PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : EA DIP204-4 4 bit modus



DBF
05.03.2008, 19:08
Erst mal guten Tag, bin neu hier.
Ich heisse Bernhard und habe nicht viel Ahnung vom Programmieren.

Dennoch habe ich es hinbekommen das 4 Zeilen LCD Modul EA DIP204-4 an einen Atmel MEGA 8515 zum Laufen zu kriegen - zumindest im 8-Bit-Modus.
Ich muss es aber in den 4-bit-Modus bekommen (sonst reichen mir die Anschlusspins des Prozessors für das Projekt nicht).
Wie kann ich das Display dazu überrreden?
Ich benutze "Studio4" von der Atmel Seite heruntergeladen.
Wäre sehr dankbar für Eure Hilfe!

pacer_one
06.03.2008, 10:31
Ich habe zwar keine Ahnung von LCDs aber aber unter Funktion das Datenbyte 4 nicht mit setzen.

Alternativ, poste doch mal dein 8-Bit Programm. Da müssen wir nicht im Nebel rumstochern und die anderen haben auch noch was davon

DBF
06.03.2008, 18:40
So sieht die Initialisierung des LCD-Moduls in der acht bit Version aus:

LCD_INIT: LDI r16,$05
RCALL DEL_LANG ; Beim Einschalten 60ms warten
RCALL DEL_LANG
LDI r19,0b00110000
OUT PORTB,r19 ; muss 3mal hintereinander gesendet
RCALL LCD_ENABLE ; werden zur Initialisierung
LDI r16,$04 ; Timer / 256 => 7,5 msec
RCALL DEL_LANG
RCALL LCD_ENABLE
RCALL DEL_LANG
RCALL LCD_ENABLE
RCALL DEL_LANG

; hier würde Umstellen auf 4 bit erfolgen

LDI r19,0b00110100 ;RE-bit=1
OUT PORTB,r19
RCALL LCD_COMMAND
LDI r19,0b00001001 ; = 4 Zeilen Modus
RCALL LCD_COMMAND
LDI r19,0b00110000 ; RE-bit=0
RCALL LCD_COMMAND
LDI r19,0b00001100 ; Display Ein / Cursor Aus / Blnken Aus
RCALL LCD_COMMAND ; 0 0 0 0 1 D C B
RCALL LCD_CLEAR
RET

LCD_DATA: SBI PORTA,5 ; RS= High -> Daten
OUT PORTB,r19 ; ausgeben
NOP
NOP
RCALL LCD_ENABLE ; Enable-ROUTine aufrufen
NOP
NOP
CBI PORTA,5 ; zurücksetzen
RET zurück

LCD_COMMAND: CBI PORTA,5 ; RS = Low -> Befehl
NOP
NOP
OUT PORTB,r19 ; ausgeben
NOP
NOP
RCALL LCD_ENABLE ; Enable-ROUTine aufrufen
RET ;zurück

LCD_ENABLE: SBI PORTA,6 ; Enable high
NOP 6Taktzyklen warten
NOP
NOP
NOP ;erzeugt den Enable-Puls
NOP
NOP
CBI PORTA,6 ; Enable wieder low
LDI r16,$02 ; Timer / 8
RCALL Delay_50 ; normale Wartezeit für Ausgabe
RET ;Und wieder zurück

Das funktioniert, danach kann ich Schriftzeichen ausgeben etc.
Wenn ich in der Initialisierung das einfüge

LDI r19,0b00100000 ; 4 bit Modus wählen
OUT PORTB,r19
RCALL LCD_COMMAND

bleibt das Display ohne irgendein Zeichen beim Beschreiben.
Es ist an Port B(4-7) angeschlossen.
Beim Beschreiben in 4 bit-Modus gebe ich zuerst das höhere Nibble mit Enable Puls, dann das untere mit weiterem EN-Puls aus.
Was mache ich falsch??[/quote]

pacer_one
07.03.2008, 13:25
hab noch was gefunden, vielleicht hilft es:
http://www.mikrocontroller.net/articles/AVR-Tutorial:_LCD

DBF
07.03.2008, 14:16
Ich hab es gefunden!

Flsch ist:

LDI r19,0b00110000 ; RE-bit=0
RCALL LCD_COMMAND

denn das schaltet das LCD in den 8-bit-Modus zurück

Richtig ist:

LDI r19,0b00100000 ; RE-bit=0
RCALL LCD_COMMAND

und natürlich dafür sorgen das die Nibbles in LCD_COMMAND und LCD_DATA in der richtigen Reihenfolge ausgegeben werden. und auch das Bit an R/S muss passen.