PIC: fördröjning i LCD-rutiner
Postat: 9 mars 2010, 11:11:33
Håller på med en 16F676 och en LCD-display.
Har använt sodjans rutiner som grund, det funkar bra, men..
Har anropat "lcd_init_hd44780" och sen skickat ett "A" med "lcd_send_data".
Inget A syntes i displayen, markör fanns där så initieringen borde gått rätt.
Sen testade jag att skicka 10 st A'n, och då kom det fram sju stycken, alltså måste displayen varit upptagen med nåt annat då de tre första skickats.
Så med en fördröjning efter anropet till "lcd_init_hd44780" funkar det fint.
Fördröjningar borde ligga efter kommandona i "lcd_init_hd44780" ?
Har använt sodjans rutiner som grund, det funkar bra, men..
Har anropat "lcd_init_hd44780" och sen skickat ett "A" med "lcd_send_data".
Inget A syntes i displayen, markör fanns där så initieringen borde gått rätt.
Sen testade jag att skicka 10 st A'n, och då kom det fram sju stycken, alltså måste displayen varit upptagen med nåt annat då de tre första skickats.
Så med en fördröjning efter anropet till "lcd_init_hd44780" funkar det fint.
Fördröjningar borde ligga efter kommandona i "lcd_init_hd44780" ?
Kod: Markera allt
lcd_init_hd44780
;
call delay_1s ; Ge LCD'n tid att starta...
bcf LCD_E ; Se till att E och RS är
bcf LCD_RS ; nollade...
;
; Skicka initkoder enligt manual för HD44780.
; För detaljer, se manual för HD44780 eller datablad för en LCD.
;
movlw h'30'
call lcd_send_4_bit
call delay_5ms
movlw h'30'
call lcd_send_4_bit
call delay_5ms
movlw h'30'
call lcd_send_4_bit
call delay_100us
movlw h'20' ; Byt till 4-bitars interface !
;
call lcd_send_4_bit
call delay_100us
;
; Allt härefter sänds som två
; 4-bittars "nibbles". Först
; den höga delen (bit 4-7) sedan
; den låga (bot 0-3).
; Se lcd_send_cmd och lcd_send_data för detaljer.
;
movlw b'00101000' ; Function set
call lcd_send_cmd
movlw b'00010100' ; Display/curs shift
call lcd_send_cmd
movlw b'00001110' ; Display/curs on/off
call lcd_send_cmd
movlw b'00000110' ; Entry mode set
call lcd_send_cmd
movlw b'00000010' ; Display/curs home
call lcd_send_cmd
movlw b'00000001' ; Display clear
call lcd_send_cmd
;
; För detaljer kring varje kommando oven hänvisas till
; manual för HD44780 eller ett datablad för en LCD.
;
return