Hallo,
ich habe ein LCD HD44780 mit einem Schieberegister 74HC164 verbunden.
Nun habe ich ein Problem.
Ich kann keinen Text in die 2. und 4. zeile schreiben.
Anhand der Suchfunktion habe ich schon herausgefunden, das es an der
Init-Funktion liegt.
Da ja alles andere funktioniert, schließe ich einen Hardwarefehler aus.
Auch hat das LCD im 8-Bit Modus, die Zeile 2 und 4 richtig beschrieben.
Es ist ein:
electronic assembly 1604A (4 Zeilen, 16 Spalten).
Ich habe aber irgendwo einen Denkfehler und finde ihn nicht.
Dies is so ziemlich mein erster Code den ich mir selber zusammengebaut
habe.
Es wäre nett wenn jemand mal drüberschauen würde und mir helfen könnte.
Hier die Init-Funktion, der komplette Code ist im Anhang. Sowie der
Schaltplan als PDF.
1
voidlcd_init(void)
2
{
3
DDR=(1<<ENABLE)|(1<<DATA)|(1<<CLK);
4
_delay_ms(20);
5
6
loadnibble(0x30);
7
_delay_ms(5);
8
loadnibble(0x30);
9
_delay_us(120);
10
loadnibble(0x30);
11
_delay_us(120);
12
13
loadnibble(0x20);// hier ist wahrscheinlich der Fehler
Was soll das verodern mit 0x0f hier bewirken?
t1 = (out >>4) | 0xf0;
if (RSPin ==0)
{
t2 = 0b00000000 | 0x0f;
}
else
{
t2 = 0b00010000 | 0x0f;
}
Falls du die relevanten Bits maskieren wolltest, ginge das mit
t1 = (out >> 4) & 0x0f besser...
Hi Georg,
das veroden soll bewirken, das am Pin5 des 74hc164, bei einem
Commandbyte der Pin low ist und bei einen Zeichenbyte der Pin auf High
gesetzt wird.
Aber ich werde mir deinen Vorschlag anschauen. Ich habe das nur deshalb
so gemacht, weil ich es besser nicht wusste, bin halt Anfänger.
Nur leider hilft mir das bei meinem Prob mit der Init-Funktion nicht
weiter.
Trotzdem danke für den Hinweis.
Gruß
WilliP
Willi P. schrieb:> das veroden soll bewirken, das am Pin5 des 74hc164, bei einem> Commandbyte der Pin low ist und bei einen Zeichenbyte der Pin auf High> gesetzt wird.
Das ist schon klar. Das macht der linke Binär Wert. Ich fragte, was das
Verodern mit 0x0f bewirken soll,das du mehrfach machst.
Hi,
ich muss gestehen, das ich diesen Teil auch nicht richtig verstanden
habe.
Das mit dem verroden, ist mir im Tutorial auch nicht ganz klar geworden.
Ich hatte das ganze am Schieberegister mit LEDs getestet um mir die bits
beim übertragen direkt anzuschauen. Und weil es funktioniert hat, habe
ich mir keine weitere Gedanken gemacht.
ich habe das ganze auch mit einem Schieberegister 74hct595 aufgebaut und
dort funktioniert das alles wunderbar. Auch das beschreiben der 2. und
4.Zeile. Du siehe ich stehe am Anfang von Programmieren.
Wie löse ich das besser? Ich werde dein Vorschlag versuchen umzusetzen,
bin ja froh wenn ich was lernen kann.
oder hast du direkt eine Idee, was geändert werden muss.
Gruss
Willi
Deine loadnibble Funktion sendet immer high und low Nibble an das LCD.
Bevor das LCD in den 4-Bit Modus geschaltet wurde, kann das Display mit
dem low Nibble aber noch gar nichts anfangen. Das gesendete low Nibble
wird als eigener Befehl interpretiert. 0x00 gibt es als Befehl aber
nicht. Bis der4 Bit Modus aktiviert wurde, darf nur das high Nibble
gesendet werden. Andernfalls funktioniert die Initialisierung nicht
immer zuverlässig. Dies fällt meistens nicht weiter auf.
Die Initialisierung (0x20) für den 4-Bit Modus an sich ist soweit
korrekt. Allerdings fehlt die Initialisierung für die zweite Zeile.
Anstelle 0x20 wäre dafür 0x28 notwendig. Zu dem Zeitpunkt ist das
Display aber noch im 8-Bit Modus (nur high Nibble senden) und würde das
low Nibble ignorieren. Also anschließend noch ein 0x28 für die
Initialisierung der zwei Zeilen senden (diesmal als high und low
Nibble), dann sollte es funktionieren.
Hi Michael,
danke für die ausführliche Antwort.
Wenn ich das jetzt richtig verstanden habe, muss ich noch eine Fuktion
schreiben, wo nur das High Bit gesendet wird, während das LCD sich noch
im 8Bit Modus befindet?
Ich habe mal die Initsequenz so geändert, das anstatt des 0x20, zweimal
hintereinander 0x28 gesendet wird.
Das Ergebnis ist, es wird nicht mehr angezeigt, auch nicht mehr die 1.
oder 3. Zeile.
Ich habe auch schon den Kontrast verändert, da sich bei dem Display nach
dem einschalten des zweizeiligen Modus, dieser aufteilt und somit
schwächer wird.
Gruß
Willi
Eine eigene Frage?
Dieser Thread ist über 13 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.