Goedendag,
Na wat rommelen met microcontrollers en programmeren loop ik tegen het volgende probleem aan.
Ik probeer de RCIN functie zoals beschreven op picbasic.nl te gebruiken op een 16F690. Maar ik krijg dit niet voor elkaar.
De uitgangen werken prima, heb nu onderstaande verkorte code gebruikt om de ingang op pin A2 werkend te krijgen.
Wellicht kunnen jullie mij vertellen waar het niet goed gaat.
; PIC16F690:
; +--v--+
; Vdd <[ ]> Vss
; OSC1/A5 <[ ]> A0
; OSC2/A4 <[ ]> A1
; A3 <[ ]> A2
; C5 <[ ]< C0
; C4 <[ ]< C1
; C3 <[ ]< C2
; C6 <[ ]< B4/Open Drain
; C7 <[ ]< B5/RX
; TX/B7 <[ ]< B6
; +-----+
Device 16F690 ;Gebruik een 16F690 type
Config HS_OSC,WDT_OFF, PWRTE_ON, MCLRE_OFF
ANSELH = 0
ANSEL = 0
ALL_DIGITAL TRUE ;Alle ingangen digitaal
XTAL 20 ;Kristal van 20MHz
; 76543210
TRISA = %00100100 ;(0=uitgang, 1=Ingang)
TRISB = %00000000 ;(0=uitgang, 1=Ingang)
TRISC = %00000000 ;(0=uitgang, 1=Ingang)
;Logische constanten
Symbol AAN = 0 ;Geinverteerd AAN
Symbol OFF = 0 ;UIT
Symbol On = 1 ;AAN
Symbol Toets = PORTA.2 ;Toetsen zitten aan PORTA.2 via een weerstandsnetwerk
Symbol K1 = PORTC.5
Symbol K2 = PORTC.4
;Variabele declareren
Dim Weerstand As Word ;WORD variabele, bevat straks waarden van de toetsindrukken
HSERIAL_BAUD = 2400 ' Set baud rate to 2400
HSERIAL_RCSTA = %10010000 ' Enable serial port and continuous receive
HSERIAL_TXSTA = %00100000 ' Enable transmit and asynchronous mode
HSERIAL_CLEAR = On ' Optionally clear the buffer before receiving
;Hoofdprogramma
HSerOut ["Program Started",10,13]
While 1 = 1 ;Oneindig door blijven meten
If Toets = AAN Then ;Als er op een toets wordt gedrukt dan...
Print At 1, 1, "Toets " ;Zet het woordje 'Toets' alvast op de eerste display regel
High Toets ;Condensator ontladen
DelayMS 1 ;Even wachten zodat condensator helemaal leeg is
Weerstand = RCIn Toets, High ;Geef RC oplaadtijd aan WORD variabele 'Weerstand'
HSerOut [Weerstand]
If Weerstand < 31 Then ;Toets 1 ingedrukt dan...
K1 = OFF ;...beide LED's uit
K2 = OFF
ElseIf Weerstand < 94 Then ;Toets 2 ingedrukt dan...
K1 = K1 ^ 1 ;...toggle de groene LED
ElseIf Weerstand < 159 Then ;Toets 3 ingedrukt dan...
K2 = K2 ^ 1 ;...toggle de rode LED
ElseIf Weerstand < 228 Then ;Toets 4 ingedrukt dan...
K1 = On ;...beide LED's aan
K2 = On
ElseIf Weerstand < 300 Then ;Toets 5 ingedrukt dan...
K1 = On ;...de groene LED aanzetten
ElseIf Weerstand < 999 Then ;Toets 6 ingedrukt dan...
K2 = On ;...de rode LED aanzetten
EndIf
While Toets = AAN : Wend ;Wacht hier tot toets(en) wordt losgelaten
EndIf
Wend ;Terug naar WHILE[\code]Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Op 13 juli 2010 21:05:10 schreef hhaplant:
Wellicht kunnen jullie mij vertellen waar het niet goed gaat.
Wat gaat er dan fout?
hadv
Just find out what you like and let it kill you
hadv
Just find out what you like and let it kill you
Heb je nu een drukknop op dezelfde aansluiting zitten als de rc combinatie?
Omdat je eerst controleert op het 0 zijn van de knop en vervolgens op diezelfde knop het rcin commando loslaat.