Hallo zusammen Ich habe eine 2x16 LCD und programmiere mit Assembler 4 Bit Interface(Atmega163 8MHz). Kann 1.Zeile ganz links und mitte anzeigen lassen. Aber 2.Zeile kriege ich nichts, obwohl ich für 4 bit Interface und 2 Zeilen Display schon definiere. und für 2.Zeilebefehl ist ldi temp, 0b11000000 ;2. Zeile 1pos. rcall COMMAND_DISPLAY LCD_INIT: ldi temp,500 ; Wait at least 15msec after (200) D1: ; powerup before writing rcall WAIT_2msec ; to display dec temp brne D1 ldi temp, 00001100 ; System set 0b00010011 out PORTD,temp nop nop nop nop sbi PORTD, EN nop nop nop nop cbi PORTD,EN ; EN low to clock in data ; rcall WAIT_2msec ; Wait 4 msec rcall WAIT_2msec ; ldi temp,0b00001100 ; System set out PORTD,temp nop nop nop nop sbi PORTD, EN nop nop nop nop cbi PORTD,EN ; EN low to clock in data rcall WAIT_2msec ; wait at least 100usec rcall WAIT_2msec ; wait at least 100usec ldi temp,0b00001000 ;System set out PORTD,temp nop nop nop nop sbi PORTD, EN nop nop nop nop cbi PORTD,EN ; EN low to clock in data ; rcall WAIT_2msec ; (2 msec) ldi temp,0b00001000 ;System set 4 bit Display out PORTD, temp nop nop nop nop sbi PORTD, EN nop nop nop nop cbi PORTD, EN rcall WAIT_2msec ldi temp,0b00101000 ; Function set ; 4 bit mode, 2 lines 5X7 pixels rcall COMMAND_DISPLAY ;write to display ldi temp,0b00001000 ;Display off, cursor off ; blink off rcall COMMAND_DISPLAY ; ldi temp,0b00000110 ; Entry mode set ; Increment RAM, dont shift display rcall COMMAND_DISPLAY ; ldi temp,0b00001100 ; Display on, cursor/blink off rcall COMMAND_DISPLAY ret Was ich hier falsch gemacht habe. Vielen Dank für Eure Hilfe Baby
In der Codesammlung gibt es -> LCD 4Bit modus und BF flag mit Menue Text ausgabe AVR Assembler <- Schau dir das mal an.
Hallo Jornbyte Vielen Dank für Deine Hilfe. Ich habe den Fehler gefunden, es ist bei COMMAND_DISPLAY. Wenn man solche Anschlüsse hat: 4bit-Interface DB4-DB7: PD0-PD3(AVR) RS: PD4 EN: PD5 Dann,es muss so sein COMMAND_DISPLAY: mov temp_1,temp ; Copy data to temp_1 andi temp,0b11110000 ; mask off lower 4 bits swap temp ; To correct for board error cbr temp, 1<<RS ; RS auf low (Command) out PORTD,temp ; write upper 4 bits to display nop sbi PORTD,EN ; EN bit high nop ; wait 1 usec total command nop nop nop ; Stabilize line cbi PORTD,EN ; EN low to clock in data swap temp_1 ; get lower 4 bits andi temp_1,0b11110000 ; mask off lower 4 bits swap temp_1 ; To correct for board error cbr temp, 1<<RS ;RS auf low (Command) out PORTD,temp_1 ;write lower 4 bits to LCD sbi PORTD,EN ; EN high nop ; nop nop nop ; cbi PORTD,EN ; EN low to clock in data ldi Delay,200 ; Wait about 50 usec D4: dec Delay brne D4 ret ; return Was falsch war, dass ich anstatt "cbr temp, 1<<RS" schreiben muss, habe ich nur "cbr temp, RS" geschrieben. Gruss Baby
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.