Beste COers,
Ik ben bezig om een rotary encodee uit te lezen,
en vervolgens het aantal stappen (tov beginstand) op een LCD te plaatsen.
Hierover zijn al een aantal topics geopend, en er is zelfs een How-to op GoT.
Maar ik kom er maar niet uit !
Onderstaand mijn code, ik programeer dus in Proton Basic,
de rotary zit aan PORTB.0 en PORTB.1.
DEVICE 16F628A
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL = TRUE
PORTB_PULLUPS = TRUE
LCD_DTPIN = PORTa.0 ;LCD data aan a0 tm a3
LCD_RSpin = PORTa.6 ;RS = pin 4 LCD
lcd_enpin = PORTa.7 ;EN = pin 6 LCD
; 76543210
PORTA = %00000000 ;1 = 5V 0 = 0V
PORTB = %00000000 ;1 = 5V 0 = 0V
TRISA = %00110000 ;1 = input 0 = output
TRISB = %11111111 ;1 = input 0 = output
INTCON= %10001000
symbol ENC_A = portb.0
symbol ENC_B = portb.1
symbol GIE = INTCON.7
DIM TEMP as byte
;================================================================
clear
DELAYMS 500
cls
print " Rotary"
;================================================================
on interrupt goto Interr
Interr:
if enc_a = 1 then
if enc_b = 1 then
temp = temp + 1
else
temp = temp - 1
endif
else
if enc_b = 1 then
temp = temp - 1
else
temp = temp + 1
endif
delayms 5
gie = 0
endif
INTCON= %10001000
while 1 = 1
delayms 100
PRINT AT 2, 1, temp
wend
end
Ik heb de code die in het topic op got staat te getracht vertalen.
Helaas zit in de PIC die ik gebruik, de 16f628, zit geen "string" functie.
Verder heb ik ook bepaalde "interrupt" dingen niet kunnen plaatsen,
zelfs niet met de handleiding !
Met de code van avrfreaks kom ik helaas ook niet ver.
Hier onder de links die ik gebruikt heb, hopelijk kan iemand mij verder helpen.
http://gathering.tweakers.net/forum/list_messages/1167996/last
http://www.circuitsonline.net/forum/view/40455/1/
http://www.circuitsonline.net/forum/view/47208/1/
http://www.circuitsonline.net/forum/view/36659/1/
http://www.circuitsonline.net/forum/view/52970/1/
~Galaxy
In the beginning there was nothing.... and even that exploded...
Het eerste wat ik al zie is dat je prog meteen de ISR induikt, omdat je na je on_interrupt niet naar je main loop springt.
Ten tweede dien je een ISR af te sluiten met CONTEXT RESTORE.