Hallo,
Zur Initialisierung ...
Lcd_enable mit 5 Nop's bei 4 Mhz ist OK.Code:lcd_init: rcall delay5ms ldi r16, 0b00110000 ;muss 3mal hintereinander gesendet out Portd, r16 ;werden zur Initialisierung rcall lcd_enable ;1 rcall delay5ms rcall lcd_enable ;2 rcall delay5ms rcall lcd_enable ;3 rcall delay5ms ldi r16, 0b00100000 ;4bit-Modus einstellen out Portd, r16 rcall lcd_enable rcall delay5ms ldi r16, 0b00101000 ;2 Zeilen einstellen... rcall lcd_command ldi r16, 0b00001100 ;Display an , Cursor u. Blinken aus rcall lcd_command ldi r16, 0b00000100 ;Increment ohne Display shift rcall lcd_command ret
Bei Lcd_data und Lcd Command, hast du einen Fehler drin.
Andi r16,0b00001111 setzt die oberen 4 Bits auf 0, nicht die unteren.
Die Warteschleifen kannst du entweder selbst ausrechnen oder mal nach
AVRdelayloop googeln. Das Programm erstellt aus der Quarzfrequenz und der Wartezeit den ASM Code.
Für 50µs bei 4 Mhz, mußt du 200 Takte warten. (1/4000000 = 0,25µs)
ldi r16,66
loop: dec r16
brne loop ; der Controller braucht 3 Takte pro Schleifendurchlauf







Zitieren

Lesezeichen