Hallo Leute,
ich arbeite zur Zeit an der Ansteuerung eines LCD-Displays von Pollin
(LCD-Modul HMC16223SG). Betreibe das Display (sowie den Rest der
Schaltung) mit 3.3V aus einem Step-Up-Converter bis 200mA (AS1320 von
austria microsystems). Zum Ansteuern benutze ich einen Atmega8 bei 4MHz.
Display ist mit EN an PortB5 und RS an PortB4, RW ist auf Masse,
Busy-Flag lässt sich also nicht abfragen. Datenleitungen liegen auf
PortC0:5 (DB0:5) und PortD0:1 (DB6:7). Schaltung ist bereits geätzt und
fertig bestückt, soll also nicht verändert werden, da auch für die
RW-Leitung kein Pin mehr frei wäre!
Nun mein Problem: Der Versuch einer Initialisierung auf 2-zeiligen
Betrieb mit 8-bit-Ansteuerung funktioniert nicht und nur die obere Zeile
zeigt einen schwarzen Balken.
Vor ein paar Wochen hat das Display schon mal mit 3V funktioniert, nur
hat es dann bei sinkender Batteriespannung irgendwann auch nichts mehr
gemacht, deshalb der Step-Up-Converter für eine zuverlässige
Spannungsversorgung auf 3.3V.
Sämtliches Experimentieren mit den Wartezeiten brachte keinen Erfolg.
Einen falsch eingestellten Kontrast als Fehlerquelle kann ich
ausschließen.
Ich hoffe es hat jemand eine Idee zur Lösung, da ich auch in diversen
Foren keine funktionierende Lösung gefunden habe.
Grüße
Steve
PS: bei Spannungsmessung der Eingangspins am Display erhält man dann
auch das zuletzt gesendete Muster aus High- und Low-Pegeln, Portpins des
Controllers scheinen also auf den ersten Blick ihren Dienst
ordnungsgemäß zu tun.
Grüße
St
15ms hab ich auch schon probiert ... nichts.
bin sogar bis 1000ms hochgegangen.
zusätzlich hatte ich auch die anderen delays proportional angepasst da
das Display ja eigentlich für 5V ausgelegt ist und somit bei 3.3V
theoretisch nur noch in etwa halb so schnell läuft.
> Lt. Datenblatt:>> Technische Daten:> Betriebsspannung: 5 V
das mit den 5V ist mir klar, allerdings hat es ja auch schon bei
frischen Batterien mit zusammen ca. 3.1V funktioniert... ?(
Hallo Steve,
warum die Verzoegerung vor der Instruktion? Normalerweise sendet man
zuerst die Instruktion und dann wartet man wie im Datenblatt
beschrieben. Mit einem normalen HD44780 ist die Clear Display
Instruktion die einzige die 15ms+ an Verarbeitungszeit braucht. Alle
anderen genuegen sich mit 20us.
//_delay_ms(40);
send_display(0,0x30);
//_delay_ms(4);
//_delay_us(100);
send_display(0,0x30);
//_delay_us(100);
send_display(0,0x30);
send_display(0,0x30);
send_display(0,0x38);
send_display(0,0x08);
// Die LCD CLEAR instruction braucht mindestens 20ms
send_display(0,0x01);
_delay_ms(40);
send_display(0,0x06);
send_display(0,0x0C);
Versuch es mal so wie abgeaendert. Uebrigens ist es nicht todsicher dass
das LCD noch bei 3V funktioniert. Mit der Kontrasteinstellung koennte es
zumindestens Probleme geben.
MFG
Gerhard
Das ist schon mal völlig daneben:
#include "util/delay.h"
#define F_CPU 4000000UL /* Quarz mit 4.0 Mhz */
So rum gehört das
#define F_CPU 4000000UL /* Quarz mit 4.0 Mhz */
#include "util/delay.h"
Optimierung einschalten hilft dabei den Code klein zu halten ;)
Also wenigstens -O1
Laut Pollin Datenblatt ist das ein KS070.
Da würde ich folgende Init probieren:
_delay_ms(10);
_delay_ms(10);
_delay_ms(10);
_delay_ms(10);
send_display(0,0x38); // two line, 8 bit
_delay_us(25);
_delay_us(25);
send_display(0,0x0C); // display on
_delay_us(25);
_delay_us(25);
send_display(0,0x01); // display clear
_delay_ms(5);
send_display(0,0x06); // entry mode set
_delay_us(25);
_delay_us(25);
Vielen Dank schon mal für all die Tipps, leider hat bisher nichts
geholfen. Ich hab alle Hinweise ausprobiert, auch Kombinationen, nichts
brachte Erfolg.
@Gerhard: die Kontrasteinstellung macht keine Probleme, da der
Kontrastpin ohnehin ca. -1.2V braucht, also an einer Ladungspumpe hängt.
Die erste Verzögerung sollte laut Datenblatt als Wartezeit während der
Stabilisierung der Spannungsversorgung dienen.
Ich bin leider immer noch ratlos.
MfG
Steve
hallo leute, hab grad ein erfolgserlebnis gehabt:
ich hatte das ganze projekt bereits in mehrfacher ausführung aufgebaut
(3 geräte mit jeweils identischen Teilen) und nun einfach mal probiert
den code auf einem anderen teil zum laufen zu bringen und siehe da das
display lässt sich initialisieren und zeigt nun auch zu testzwecken
immerhin schon ein "A" an.
schein also ein hardwareproblem zu sein, muss ich nochmals alle pins
checken und ggf nachlöten. ich denke nicht, dass der atmega defekt ist
da er sich problemlos programmieren lässt und auch alle anderen dinge
umsetzt die im aufgetragen werden.
nun geht also die fehlersuche erneut los, falls jemand eine idee hat....
mfg
steve
ps: ich versuche trotzdem das timing nochmal zu verändern, sodass ich
kürzest mögliche wartezeiten habe, falls es jemanden interessiert
welches timing das display bei 3.3V braucht kann ich das ja einfach noch
posten.
grüße
steve
ist der Controller sicher ein echter HD44780? Beim oft als kompatibel
bezeichneten KS0066 z.B. sieht die Initialisierung nämlich ganz anders
aus.
Beginnt z.B. mit 3 mal 0x03 und nicht 0x30...
Unten ein Code für 4-Bit-Ansteuerung der bei mir funktioniert (Du machst
es ja mit 8 Bit).
Frank
// Initialisierung fuer KS 0066 4-Bit
RS = 0;
E = 0;
E = 1;
delay_ms(10);
E = 0;
delay_ms(230);
Send_ByteLCD(0x03,0);
delay_ms(5);
Send_ByteLCD(0x03,0);
delay_ms(1);
Send_ByteLCD(0x03,0);
delay_ms(1);
Send_ByteLCD(0x02,0); // ab hier 4 Bit
Send_ByteLCD(0x2C,0);
Send_ByteLCD(0x01,0);
Send_ByteLCD(0x00,0);
Send_ByteLCD(0x00,0);
Send_ByteLCD(0x01,0);
Send_ByteLCD(0x0C,0);
Send_ByteLCD(0x01,0);
Ja, ich bin sicher, dass es zumindest ein HD44780 kompatibler controller
auf dem display ist, schließlich funktioniert ja jetzt die
initialisierung und somit auch die komplette restliche Ansteuerung.
Danke trotzdem.
Grüße
steve