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]

Symbol Toets = PORTA.2 ;Toetsen zitten aan PORTA.1 via een weerstandsnetwerk

???

Slechts een typ foutje in het commentaar..
Aangepast!

Op 13 juli 2010 21:05:10 schreef hhaplant:
Wellicht kunnen jullie mij vertellen waar het niet goed gaat.

Wat gaat er dan fout?

commentaar bij baudrate klopt niet
waarom gebruik je RCin terwijl een 690 gewoon ADC heeft?

Oh ok, tja heb geen idee hoe dat werkt. En kwam dit voorbeeld tegen dus vandaar.

Lees de handleiding, die van Proton is echt behoorlijk goed!

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.