PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LCD ansteuern?



neu hier
05.09.2004, 17:33
Hallo

Hab jetzt mal ein LCD Display an meinen AtMega8 angeschlossen. Hab mir auch das Tutorial auf microcontroller.net durchgelesen. Habs aber immer noch nicht geschafft, irgendwas auf dem Display darzustellen. Denke ich hab da auch noch irgend ein Problem mit den Wartezeiten, da ich ein 12 Mhz Quarz einsetz. Habs mit folgendem Programm probiert:

;; 4bit-Interface
;; DB4-DB7: PB0-PB3
;; RS: PB4
;; E: PB7
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


.include "m8def.inc"


ldi r17, 0xFF
out DDRB, r17
ldi r16, LOW(RAMEND) ; LOW-Byte der obersten RAM-Adresse
out SPL, r16
ldi r16, HIGH(RAMEND) ; HIGH-Byte der obersten RAM-Adresse
out SPH, r16



ldi r16,0b11111111
swap r16
andi r16, 0b00001111
sbr r16, 0b00010000
out portb, r16

rcall übern

ldi r16,0b11111111
andi r16, 0b00001111
sbr r16, 0b00010000
out portb, r16

rcall übern

übern: sbi portb, 7
nop
nop
nop
cbi portb, 7

Vielleicht könnt ihr mir sagen wo meine Fehler liegen. Hab übrigens ein stink normales 2*16 Zeilen Display.
Vielen Dank schonmal für eure Hilfe.

cht
06.09.2004, 15:32
ldi r16,0b11111111
;r16=0xFF
swap r16
;immer noch r16=0xFF
andi r16, 0b00001111
;r16=0x0F

lol... was bringt das bitte?
dann würde ich mal ins Datenblatt gucken (genau! rtfm!) und feststellen dass das teil für jeden befehl ne verarbeitungszeit hat. ne ziemlich lange. schreib dir also ne schöne nop-schleife. dann schickst du erstmal ne initialisierung hin (steht auch im datenblatt), und dann erst darfst du anfangen zeichen hinzuschicken.
PS: für Sourcecode gibts nen BBCode Befehl!

mfG

cht

06.09.2004, 19:53
wollte einfach mal ein Zeichen auf dem Display ausgeben. sorry hätte 11110000 heißen müssen, das hätte dann für das Zeichen "p" gestanden. Will das Board aber im 4 Bit modus betreiben. Wie schick ich dann die Initialisierung die im Datenblatt steht an den µC? Da steht alles in 8 Bt. Aber trotzdem Danke für Deinen Beitrag, auch wenn er mir nicht wirklich weiter geholfen hat... *g* was bringt mir ne nop Schleife bei 12 Mhz? Da müßte ich ja ein paar tausend nop`s hin schreiben.... oder seh ich das falsch? Naja, vielleicht erbarmt sich ja noch jemand mir zu helfen...

MFG

06.09.2004, 21:04
Falsch, im Datenblatt steht das Timing genau drin. Zumindest in denen von Reichelt (HD44780). Die Initialisierung für den 4-Bit Modus ist doch auf mikrocontroller.net demonstriert!

cht
07.09.2004, 18:10
Will das Board aber im 4 Bit modus betreiben. Wie schick ich dann die Initialisierung die im Datenblatt steht an den µC?
während der initialisierung muss man möglichst früh den befehl "auf 4bit umstellen" senden. vorher braucht man die anderen 4 bit aber sowieso nicht, die sind da immer null.


was bringt mir ne nop Schleife bei 12 Mhz? Da müßte ich ja ein paar tausend nop`s hin schreiben...
Eine Schleife heißt übrigens Schleife weil man nicht alle befehle zigtausendmal hintereinanderschreibt, sondern weil man mithilfe eines Zählers einen Befehlsblock mehrmals durchläuft:



;die folgende Warteschleife kannst du mit rcall warte aufrufen.

warte:
push r16 ;Inhalt von r16 sichern
ldi r16, 0xFF ;255 hineinladen
schleifenstart:
dec r16 ;r16:=r16-1
nop ;nichts tun
...
nop
tst r16 ;r16=0?
brne schleifenstart ;wenn nein zu schleifenstart springen
pop r16 ;r16 wiederherstellen
ret ;fertig.


mfG

cht

07.09.2004, 18:13
Hier noch eine Hilfe:
https://www.roboternetz.de/phpBB2/dload.php?action=file&file_id=78