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 | void lcd_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 |
14 | // 0x30 oder 0x38 bringt auch nichts
|
15 | _delay_ms(2); |
16 | |
17 | loadnibble(0x10); |
18 | _delay_ms(2); |
19 | |
20 | loadnibble(0x02); |
21 | _delay_us(140); |
22 | |
23 | loadnibble(0x01); |
24 | _delay_ms(2); |
25 | |
26 | loadnibble(0x0c); |
27 | _delay_ms(2); |
28 | };
|