Forum: Mikrocontroller und Digitale Elektronik LCD mit KS0073


von KS0073 (Gast)


Lesenswert?

Dieses Display treibt mich in den Wahnsinn. Ich habe gestern den ganzen 
Tag probiert mir einen Init für dieses Display zu basteln. Leider ohne 
Erfolg..
Also hier ein bisschen gesucht und in den zahlreichen Threads zum Thema 
auch einige Funktionen gefunden, die das Display eigentlich ans laufen 
bringen sollten. Bei mir tun sie das aber nicht und ich weiss nicht mehr 
wo ich noch suchen soll.

Ich habe mich für folgende Funktion entschieden
Beitrag "LCD EA DIP204-4 Initialisieren"

Das Display ist im 4 bit Modus angeschloßen.
In der Display.h habe ich folgende Änderungen vorgenommen
1
#define LCD_DATAPORT    PORTB  //Port für die 4 Datenleitungen
2
#define LCD_DATAPORTDR    DDRB
3
#define LCD_DATA0      0
4
#define LCD_DATA1      1
5
#define LCD_DATA2      2
6
#define LCD_DATA3      3
7
#define LCD_SETPORT      PORTB  //Port für die 3 Steuerleitungen
8
#define LCD_SETPORTDR    DDRB
9
#define LCD_RS        4    //Umschalten zwischen Befehl(Low) und Daten
10
#define LCD_E        5    //Enable bei fallender Flanke

Meine Datenleitungen liegen also auf PortB 0-3 und die beiden 
Steuerleitungen ebenfalls auf PortB Pin 4+5. Vielleicht ist das auch der 
Knackpunkt, denn in der ursprünglichen Version der Funktion liegen die 
Steuerleitungen auf einem anderen Port. Vielleicht funktionieren daher 
die letzten 4 Zeilen des #defines nicht korrekt. Um das zu beurteilen 
kenne ich mich aber zu wenig aus.

Das Display zeigt im jetzigen Zustand nur dunkle Kästchen

von Michael U. (amiga)


Lesenswert?

Hallo,

um das rauszufinden und ausschließen zu können, brauchst Du doch nur RS 
und E nur mal an einen anderen Port zu legen...

Gruß aus Berlin
Michael

von KS0073 (Gast)


Lesenswert?

Das ist nicht ganz so einfach weil die lcd platine geätzt ist und über 
einen wannenstecker mit dem Board verbunden wird. Aber ich werd mal ein 
passendes Kabel basteln

von KS0073 (Gast)


Lesenswert?

Habe jetzt mal RS und E auf Port A gelegt. Immer noch nur dunkle 
Kästchen

von Anderer Gast (Gast)


Lesenswert?

Vielleicht Probleme mit der Kontrasteinstellung.
Dort schonmal geschaut?

von holger (Gast)


Lesenswert?

Die Headerdatei suggeriert das die Pins frei
verteilt werden dürfen. Kann man aber nicht.
Es müssen die Bits D4..7 für Daten benutzt werden.
Die Steuersignale dürfen nicht auf demselben Port
wie die Daten liegen. Das Proggi ist einfach
schlecht geschrieben.

von KS0073 (Gast)


Lesenswert?

Also muss ich wohl doch selbst ran..
Wie läuft das denn genau mit dem senden im 4 bit Modus? Zuerst das High 
Nibble, dann das Low, OK. Aber muss ich zwischendrin warten? Oder schick 
ich das einfach direkt nach einander?

von gast (Gast)


Lesenswert?

init wird :


senden 8bit modus  ( ohne busy )
warten
senden 4bit modus ( ohne busy)  // dasganze 3x ( meist reicht 2x )
warten
senden restliche parameter ( cursor , disp ON , usw ..)


bei den schreibroutinen sendest du zuerst das high , dann das low nibble
damit das univeseller einsetzbar ist hab ich folgendes gemacht :

for( ;i<2;i++)
{
if (i==1) data <<= 4;  // im 2ten durchlauf wird das databyte geschoben
if (data & 0x80) LCD_PORT |= (1<<LCD_D7);
if (data & 0x40) LCD_PORT |= (1<<LCD_D6);
if (data & 0x20) LCD_PORT |= (1<<LCD_D5);
if (data & 0x10) LCD_PORT |= (1<<LCD_D4);
enable_E
 asm volatile("nop");
disable_E
}


LCD_PORT ist eben der PORT wo die datenleitungen dranhängen
LCDDx  ist der passende pin dazu
wenn man möchte kann man LCD_PORT sogar für jeden pin einzeln definieren
also LCD_PORT_1 bis ..._4   dann isses wirklich egal wo welcher pin 
dranhängt
nach dem nibble muss E geenabled werden für 1-2 nops
meist sagt das datenblatt 50-200ns


in der initialisirungsphase hab ich eine abfrage drin die mir nur 1 
durchlauf gibt

von KS0073 (Gast)


Lesenswert?

zieh ich nach jedem Nibble E kurz auf low oder erst nach dem Low Nibble?

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.