Hi, bei den Kalten Tagen hab ich mal wieder endlich ein bisschen Zeit gehabt mich mit dem AVR zu beschäftigen. Ich hab mal den Code http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#LCD-Ansteuerung 1:1 für die LCD-Ansteuerung meiner zwei verschiedenen 2x16 Zeichen Displays verwendet. Funktioniert eigentlich alles ganz toll, bis auf dass die zweite Zeile nicht geht. Habe set_cursor(0,2) verwendet um in die zweite Zeile zu kommen, leider werden da allerdings ein paar Zeichen (jedoch nicht alle) von der ersten Zeile überschrieben und in der zweiten ist gar nichts. Mich wundert zudem auch, dass wenn ich den Kontrast aufdrehe die erste Zeile immer leicht schwarz wird, die zweite jedoch nicht, was ja bedeuten könnte, dass die untere Zeile nicht aktiviert ist. Im Forum hab ich hier auch was von irgendeinem Bug in der lcd_command() Funktion gelesen, der in der Display-Ansteuerung sein soll, hab auch die Zeilen ausgebessert, hat allerdings keinen Effekt gehabt, bis auf dass nichts mehr in der ersten Zeile überschrieben worden ist, allerdings wurde wieder nichts in der zweiten Zeile angezeigt. Das Problem hab ich übrigens mit zwei verschiedenen 2x16 Zeichen Displays, ich vermute also dass das Problem irgendwo im Quellcode liegt. Hat jemand ne Idee? Vielen Dank im Voraus Joscha
Die Adressposition fuer die Daten der 2. Zeile ist ueblicherweise 0x40 ++
Hi, danke für den Hinweis, ich hab jetzt mal Spaßeshalber alle Adresspositionen durchprobiert:
1 | for(i=0x80;i<0xff;i++) { |
2 | lcd_clear(); |
3 | lcd_command(i); |
4 | lcd_data('x'); |
5 | _delay_ms(1000); |
6 | }
|
das 'x' wandert zwar super über die erste Zeile, ist dann nicht mehr zu sehen und irgendwann erscheint es wieder in der ersten Zeile und der ersten Spalte, ist wieder weg und bleibt dann stehen. Jedoch ist es nie in der zweiten Zeile zu sehen. Stimmt vielleicht irgendwas mit der Initialisierung von dem Display nicht? Viele Grüße Joscha
Hallo, ... ja du musst dem Display beim Init sagen ob's ein oder mehrzeilig arbeiten soll. Sascha
Hallo, habs endlich geschafft, musste nochmals lcd_command(0x28) aufrufen, dann gings plötzlich (warum auch immer). Also hab ich an die Funktion lcd_init() das noch angehängt:
1 | void lcd_init(void) |
2 | {
|
3 | /* Programmzeilen aus dem Tutorial */
|
4 | ...
|
5 | // 4Bit / 2 Zeilen / 5x7
|
6 | lcd_command(0x28); |
7 | ...
|
8 | |
9 | /* Angehängter Aufruf: */
|
10 | lcd_clear(); |
11 | lcd_command(0x28); |
12 | }
|
Viele Grüße Joscha
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.