Primjer coda je skinut s picbasic.co.uk stranice i prilagođen ua PIC 16f877 pic i LCD display.
Primjer radi ocitava impulse s enkodera i broji unapred i unazad ali mi treperi LCD display.
Code: Select all
'PIC16f877A
'OSCILATOR NA 20MHZ
'PORT A.0 I PORT A.1 ULAZI ZA ENKODER
'PORT B SE KORISTI ZA LCD DISPLAY
DEFINE OSC 20
DEFINE LCD_BITS 4 ' LCD broj Bita na liniji 4 ili 8
DEFINE LCD_DREG PORTB ' LCD data port
DEFINE LCD_DBIT 4 ' LCD pocetni bit podataka 0 ili 4(od kojeg pina na mikrokontroleru pocinje 0 bit podataka)
DEFINE LCD_RSREG PORTB ' LCD registar select port
DEFINE LCD_RSBIT 2 ' LCD registar select bit (na koji pin na mikrokontroleru je povezan RS bit)
DEFINE LCD_EREG PORTB ' LCD enable port
DEFINE LCD_EBIT 3 ' LCD enable bit(na koji pin na mikrokontroleru je povezan E bit)
DEFINE LCD_LINES 4 'LCD koristi 4 reda za ispis 4x20 lcd
ADCON1 = 7
TRISA = $1F 'Postavi sve pinove porta A kao ulazne
TRISB = $00 'Postavi sve pinove porta B kao izlazne
TRISD = $00 'Postavi sve pinove porta D kao izlazne
A_INPUT VAR PORTA.0
B_INPUT VAR PORTA.1
HULP1 VAR BIT
HULP2 VAR BIT
COUNTER VAR WORd
COUNTER = 1
START:
HULP2 = A_INPUT & ~ HULP1 'EVERY POSITIVE GOWING EDGE OF A_INPUT
HULP1 = A_INPUT 'GIVES A PULSE OF ONE PROGRAMM CYCLE
IF HULP2 = 1 AND B_INPUT = 1 Then 'MOTOR TURNS RIGHT
COUNTER = COUNTER + 1
EndIF
IF HULP2 = 1 AND B_INPUT = 0 Then 'MOTOR TURNS LEFT
COUNTER = COUNTER - 1
EndIF
'prikaz na displayu
Lcdout $fe,1,"brojac = ", dec counter
[b]pause 10 [/b]
GoTo START
end
primjetio sam da treperenje ima veze s pauzom u prikazu.Ako pauzu obrisem treperenje je tako brzo da se na displeju jedva vidi sto pise,a ako pak pauzu povecam onda dobivam usporeno treperenje displeja svakih par sekundi. brojac radi i ocitava impulse gore -dolje.
Lcdout $fe,1,"brojac = ", dec counter
pause 10
Da li bi se to treperenje izbjeglo ako bi se koristili interapti?