Forum: Mikrocontroller und Digitale Elektronik hd44780 / LCD SC1602D / ATmega16 (STK500)


von LordIMBA (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Leute,

ich weiß ihr werdet das blanke kotzen kriegen, weil schon wieder jemand 
kommt und nen Problem mit der Ansteuerung eines LCD Display's über den 
hd44780 hat. :-) Aber ich finde das Problem einfach nicht. Vielleicht 
ist ja jemand unter euch der mal eben meinen Quellcode durchliest und 
zack den Fehler findet.

Also ich will den Controller im 4 bit Modus laufen lassen und habe 
folgende PIN-Belegung verwendet.

MCU  LCD
PD0  DB4
PD1  DB5
PD2  DB6
PD3  DB7
PD4  RS
PD5  E
     R/W -> GND

Mein Problem ist, dass ich bei der jetzigen init nichts dargestellt 
bekomme auf dem Disp. irgendwie hab ich das Gefühl, dass es am timing 
liegt aber ich habe jetzt schon so viel mit _delay rumgedoktert da kommt 
nichts bei rum.
Wenn ich die init derart umschreibe, dass die Befehlszeilen aus dem 
Datenblatt des hd44780 Seite 213 einzeln auf den PORT gegeben werden 
dann sehe ich zwar nen blinkenden curser der mit auch irgendwelche 
Zeichen darstellt aber niiie das was ich sehen will.

von holger (Gast)


Lesenswert?

1
static void lcd_out( uint8_t data )
2
{  
3
  data &= 0x0F;   
4
5
  LCD_PORT &= 0xF0;
6
  LCD_PORT |= data;  
7
8
  LCD_PORT |= (1<<LCD_EN);
9
  _delay_us(1);    
10
  LCD_PORT &= ~(1<<LCD_EN);
11
}

von Muetze1 (Gast)


Lesenswert?

JTAG am Port D abgeschaltet?

von Spess53 (Gast)


Lesenswert?

Hi

>JTAG am Port D abgeschaltet?

Welcher AVR hat am PortD das JTAG-Interface?

MfG Spess

von Klaus (Gast)


Lesenswert?

Irgendwie vermisse ich die INIT Routine die das LCD Initialisiert.
Ohne Initialisierung kommt da nur mist raus.

Bei der Initalisierung must ja dafür sorgen das LCD-controller in den
4-Bit-Modus geht.

Hier mal ein Codeschnipsel meiner INIT-routine in Assembler.

LCD_INIT:

CALL  LCD_Pause_15ms ; Warte
LDI   temp,0x30      ; 8 Bit - Mode muss 3 mal gesendet werden
CALL  LCD_Intialisieren ; Busy-Flag Abfragen ist hier noch nicht möglich
CALL  LCD_Pause_4ms
LDI   temp,0x30
CALL  LCD_Intialisieren
CALL  LCD_Pause_4ms
LDI   temp,0x30
CALL  LCD_Intialisieren
CALL  LCD_Pause_4ms
LDI   temp,0x20          ; jetzt umschalten auf den 4 bit mode
CALL  LCD_Intialisieren
CALL  LCD_Pause_4ms

LDI   temp,_LCD_SetRE               ;nur bei EADIP204-4 verwenden
CALL  LCD_Komando

LDI   temp,_LCD_ExtfuncSet          ;nur bei EADIP204-4 verwenden
CALL  LCD_Komando
LDI   temp,_LCD_Schnitstellenbreite ; Funktion Set
CALL  LCD_Komando
LDI   temp,_LCD_AUS                 ; LCD-Display ausschalten
CALL  LCD_Komando
LDI   temp,_LCD_Loeschen            ; LCD  Löschen
CALL  LCD_Komando

LDI   temp,_LCD_Betriebsart
CALL  LCD_Komando
LDI   temp,_LCD_EIN
CALL  LCD_Komando

RET

Soll nur als Anregung dienen. Schau mal in dein Datenblatt rein ob es 
Beipiele zur Initialisierung gibt 8 und 4 Bit Modus.

von Oliver J. (skriptkiddy)


Lesenswert?

Wenn dein µC genug Beinchen frei hat, dann würde ich es erst mal im 
8-Bit-Modus versuchen. Der ist weniger fehleranfällig als der 
4-Bit-Modus und somit das erste Erfolgserlebnis fast vorgrogrammiert.
Wenn das gelungen ist kann man immer noch auf den 4-Bit umsteigen.

Gruß Skriptkiddy

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
Noch kein Account? Hier anmelden.