Forum: Mikrocontroller und Digitale Elektronik Programmierung Lcd Display mit einem C8051F124 von Silabs


von mikromaster (Gast)


Lesenswert?

Hallo,

Ich habe ein Problem ein Lcd Display anzusteuern mit einem C8051F124 
Mikrokontroller von Silabs. Das Display(GDM1602A) bsitzt ein KS0066U 
Controller. Ich habe einfach ein Problem das Display richtig zu 
Initialisieren da es außer der Funktion Funktion Set (Display Modus 
wählen 1 Zeilig oder 2 Zeilig u.s.w.) keine weiteren Operationen 
ausführt. Desweitern nimmt das Display die Befehle nur Binär an, also 
durch setzen jedes einzelnen Pins DB7-DB0.Wäre net wenn da mir jemand 
weter helfen könnte, bräuchte hier vieleicht einfach mal ein C-Code 
Beispiel mit allen Programmroutinen auch mit einer String ausgabe,

Danke im Vorraus.

von Oliver J. (skriptkiddy)


Lesenswert?

mikromaster schrieb:
> Desweitern nimmt das Display die Befehle nur Binär an, also
> durch setzen jedes einzelnen Pins DB7-DB0.
Erklär das mal bitte genauer.

> Ich habe einfach ein Problem das Display richtig zu
> Initialisieren da es außer der Funktion Funktion Set (Display Modus
> wählen 1 Zeilig oder 2 Zeilig u.s.w.) keine weiteren Operationen
> ausführt.
Woran erkennst du das?



Schau mal auf Seite 26 im Datenblatt [1] zum ks0066 nach. Da steht 
haarklein beschriben, wie man ein Diplay mit einem solchen Conroller 
initialisert.


[1] http://www.lcd-module.de/eng/pdf/zubehoer/ks0066.pdf


Gruß Skriptkiddy

von mikromaster (Gast)


Lesenswert?

Ja also das display erscheint zu anfang wenn ich es in betrieb nehme mit 
einer hellen Zeile und einer Dunklen Zeile. Das heist es ist Standart 
mäßig in 1 Zeilen Modus, 5x11, 8Bit Betrieb. Nach Function set aktiviert 
es  zumindestens Zwei Zeilen aber sonst gar, kein curser blinken und die 
weitern standard einstellungen die ich in meiner Init Funktion einstelle 
werden nicht übernommen. Die signale sind auch Ok,sie liegen auch wie 
ich sie einstelle am display an und somit ist es ein rein Software 
techniches Problem. Um an das Display Befehle zu senden setze ich jeden 
bin einzelnd Z.B. so :

void lcd_Init(void){


 LCD_RS = 0;
 LCD_RW = 0;
 LCD_EN = 0;
 wait_ms(30);//wait beginn




 DB0  =  0;//Set Function
 DB1  =  0;
 DB2  =  1;
 DB3  =  1;
 DB4  =  1;
 DB5  =  1;
 DB6  =  0;
 DB7  =  0;

 LCD_EN = 1;
 zeit_s(3);
 LCD_EN = 0;


 DB0  =  0;//Entry Mode
 DB1  =  0;
 DB2  =  0;
 DB3  =  0;
 DB4  =  0;
 DB5  =  1;
 DB6  =  1;
 DB7  =  1;

 LCD_EN = 1;
 zeit_s(3);
 LCD_EN = 0;



 DB0  =  0;//Display on/cursor Blinkt
 DB1  =  0;
 DB2  =  0;
 DB3  =  0;
 DB4  =  1;
 DB5  =  1;
 DB6  =  1;
 DB7  =  1;

 LCD_EN = 1;
 zeit_s(3);
 LCD_EN = 0;

Da es in Hexadezimal nicht Funktioniert und die signale an den port Pins 
nicht richtig anliegen so z.B.:


LCD_RS = 0;
LCD_RW = 0;

P6 = 0x01H //clear Display

LCD_EN = 1;
zeit_s(3);
LCD_EN = 0;

oder ist die Zeitschleife vieleicht mau, es steckt  hinter zeit_s nur 
eine simple for Schleife die aber lange genug zählt um die mindest 
zeiten für die datenübernahme eizuhalten.

von Oliver J. (skriptkiddy)


Lesenswert?

poste mal deinen ganzen code.

von Ralf (Gast)


Lesenswert?

Die SiLabs MCUs sind bis auf wenige Ausnahmen 3V Controller. Dein 
Display ist wie ich annehme ein 5V-LCD, oder?
Wie hast du die Pegelkonvertierung vorgenommen?

Ralf

von Bernhard S. (b_spitzer)


Lesenswert?

mikromaster schrieb:
> eine simple for Schleife die aber lange genug zählt um die mindest
> zeiten für die datenübernahme eizuhalten.

Ist die im Assembler-Code noch enthalten? Je nach Optimierungs-Level 
werden leere Schleifen gerne rausoptimiert.
Für Keil und Raisonance fügt man _nop_(); in die Schleife ein, für SDCC 
asm nop endasm;

> einer hellen Zeile und einer Dunklen Zeile. Das heist es ist Standart
> mäßig in 1 Zeilen Modus, 5x11, 8Bit Betrieb.

So verhalten sich meine Displays, wenn sie nicht initialisiert wurden...

unn tschuess
Bernhard

von mikromaster (Gast)


Angehängte Dateien:

Lesenswert?

Hier der Ganze Quellcode es Handelt sich um ein Steuerungsprogramm für 
einen Asynchronmotor der über einen Frequenzumrichter gesteuert wird. 
Áuf meinen Mikrokontroller läuft ein von mir erzeugtes Programm was 
Drehzahl,Frequenz und Spannung einstellt sowie die Drehzahl erfasst und 
die über ein Lcd Display anzeigt.

von Kay S. (mikromaster)


Lesenswert?

Mein Display wird über einen DC DC wandler versorgt der von 3.3 auf 5V 
Spannungversorgung hochpuscht, also daran sollte es nicht liegen.

von Ralf (Gast)


Lesenswert?

> Mein Display wird über einen DC DC wandler versorgt der von 3.3 auf 5V
> Spannungversorgung hochpuscht, also daran sollte es nicht liegen.
Das ist aber nur die Hälfte. HAST du eine Pegelkonvertierung für die 
Datenleitungen des Displays oder nicht? Bzw. akzeptiert das Display die 
Pegel des Controllers als High-Pegel? Wenn nicht brauchst du mindestens 
Pull-Ups nach 5V und die Ausgänge des Controllers müssen auf Open-Drain 
konfiguriert werden!

Ralf

von Kay S. (mikromaster)


Lesenswert?

Ja, danke habt mir echt geholfen Lcd Display geht jetzt

gruß Kay

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.