PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LCD Anzeige liefert nur Müll



05.02.2004, 21:01
Hallo Leute,
kann mal jemand da rüberschauen? Mein LCD wird nur zugemüllt mit Buchstaben!
Gruß Alex


.include "m8535def.inc" ;Definitionsdatei einbinden m8535def.inc

;--------------------------------------------------------------------------
ldi r16, 0x2 ;Stapelzeiger eingerichtet
out sph, r16
ldi r16, 0x5F
out spl, r16
;--------------------------------------------------------------------------

;-----Deklarationen--------------------------------------------------------

; EN = PORTA, 7
; RW = PORTA, 6
; RS = PORTA, 5
.SET LCD = PORTC
;--------------------------------------------------------------------------
ser r16 ; setzte Register auf 0xFF
out DDRC, r16 ; PortC&D als Ausgang konfiguriert
out DDRA, r16
call busy_flag

ldi r17, 0b00111000 ; 3x 8Bit initialisieren
out LCD, r17
call send_lcd
call busy_flag
call send_lcd
call busy_flag
call send_lcd

ldi r17, 0b00001000 ; Display aus
out LCD, r17
call send_lcd
call busy_flag

ldi r17, 0b00000001 ; Display löschen
out LCD, r17
call send_lcd
call busy_flag

ldi r17, 0b00000110 ; Entry Set
out LCD, r17
call send_lcd
call busy_flag

ldi r17, 0b00001100 ; Display an
out LCD, r17
call send_lcd
call print

ende:
jmp ende
;-------------------------------------------------------------
send_lcd:
sbi PORTA, 7 ; L/H Flanke Enable
nop
nop
nop
nop
cbi PORTA, 7 ; H/L Flanke Enable
ret
;-------------------------------------------------------------
busy_flag:
sbi PORTA, 6 ; R/W & RS konfigurieren
cbi PORTA, 5 ; fürs busy
sbi PORTA, 7 ; Flanke Enable
nop
nop
nop
nop
testen:
sbic PORTC, 7 ; Busy lesen
rjmp testen ; polling bis frei
cbi PORTA, 7 ; Enable auf Low
cbi PORTA, 6 ; RS & R/W löschen für
cbi PORTA, 5 ; weitere Konfiguration
ret ; raus aus warten
;-------------------------------------------------------------
print:
ldi ZH, high(2*Text) ; Pointer adressieren
ldi ZL, low(2*Text)
sbi PORTA, 5 ; RS und R/W konfigurieren
cbi PORTA, 6 ; zum schreiben
rw:
lpm r0,z+ ; hole wert adressiert durch z in r0 und inc z
out PORTC, r0 ; Ausgabe an Interface LCD
mov r16, r0 ; Kopieren für Vergleich in r16
cpi r16,0 ; Vergleich ob "0"
brne ok ; Keine "0"?, dann "ok"
ret ; doch "0", dann surüg ;-)
ok:
call send_lcd ; is klar!
rjmp rw ; weiter Zeichenausgabe bis endlich "0"

Text: .DB "initialized",0

Matthias
07.02.2004, 08:25
Ich kenn mich mit AVRs nicht aus, aber vielleicht hast du die Datenleitungen falschrum angeschlossen.

Matthias

krischan100
08.02.2004, 14:26
Es wäre gut, wenn Du ein Schaltplan mit veröffentlichst. Damit wir nachschauen können ob es mit der Programmierung so richtig ist.
Und teile uns auch bitte die Typenbezeichnung des Display mit, welchen Chipsatz ist auf dem Display?

Krischan100

08.02.2004, 14:30
So , ich habs rausgefunden.
Die Routine zur Abfrage des Busy_flags war falsch.
Habe das Programm auch für 8051 geschrieben und der gab auch nur Müll aus. Also mit dem 8051 funktioniert es jetzt.
@Matthias danke für den Tipp, das wars zum Glück nicht ;-) und wenn, dann hätte ich's nicht zugegegeben - is ja oberpeinlich;-)
Gruß Alex

08.02.2004, 14:35
@Krischan100
Ja danke Krischan für dein Hilfeangebot. Es leeeffft jetzt. Ich hab Rotz-und Wasser geheult ;-)