Hallo Ich habe mir von MyAVR ein Entwicklungsboard gekauft und selber zusammengelötet. Doch funktioniert dieses nicht so richtig. Wenn ich in die 2. Zeile springen will dann funktioniert es einfach nicht. Dasselbe gilt auch wenn ich keine Libs nutze sondern alles von Hand mache. Das heisst dass ich die Adresse 145 nutze, also irgendwo zweite Zeile, und ich die Position auslese dann zeigt er mir trotzdem 128 an(Ende erste Zeile). Aus meiner Sicht stimmt auch die Initialisierung da ich sie vom Datenblatt übernommen habe. Ich weiss echt nicht was das Problem sein könnte. Auch alle Beispielprogramme funktionieren nicht.
Hi > Das heisst dass ich die Adresse 145 nutze, also irgendwo zweite Zeile, und >ich die Position auslese dann zeigt er mir trotzdem 128 an(Ende erste >Zeile). Aus meiner Sicht stimmt auch die Initialisierung da ich sie vom >Datenblatt übernommen habe. Wie kommst du auf diese Adressen? Erste Zeile: 0x00...0x0F Zweite Zeile: 0x40...0x4F MfG Spess
Das ist ein 2x16 Display. 145 ist nur ein Test-Wert und völlig erfunden. 128 ist die höchste erreichbare Adresse, welche ich setzen kann. Allerdings stimmt deine Theorie dass die Adresse 64 der Anfang der 2.Zeile sei nicht. Wen ich versuche einen so langen String auszugeben dass er auf die nächste Zeile springen sollte dann fängt er auf der 1. Zeile vorne an.
Hi >128 ist die höchste erreichbare Adresse, welche ich setzen kann. Nein. Die höchste Adresse, die der 'Set DD-Ram Address'-Befehl zulässt, ist 127 >Allerdings stimmt deine Theorie dass die Adresse 64 der Anfang der >2.Zeile sei nicht. Keine Theorie, sondern dein Datenblatt S.10. MfG Spess
Das Problem hat sich von selbst erledigt!?!??? Ich habe das Projekt nicht geändert oder sonst etwas gemacht. Nur einmal neu kompliert und siehe da, es funktioniert. Ich habe mich jetzt immer wieder drangesetzt und versuchte alles mögliche und funktioniert hat es nie. Wahrscheinlich hab ich immer zu weit gesucht. Danke.
Hast du deinen Code ohne Warnungen/Errors durch den Compiler gebracht? Schau dir mal diesen Auszug aus lcd_init an
1 | lcd_write(0b00100000, 0); |
2 | lcd_enable(); |
3 | _delay_ms(5); |
4 | lcd_write(ob00101000, 0); |
Achte auf die letzte Binärzahl. Das ist da vorne keine 0 sondern ein kleines o. Was immer das auch macht, es macht auf jeden Fall nicht das Gewünschte, nämlich das Display auf 2 Zeilen zu setzen und damit gilt der SetFunc Befehl unmittelbar davor, der das LCD auf 1 Zeile setzt. Ob ich jetzt noch rausfinden will, wieso das überhaupt compiliert, weiß ich noch nicht. Auf jeden Fall solltest du noch den Compiler Output studieren, denn ich denke das wird nie und nimmer durch den Compiler laufen und in Wirklichkeit läuft bei dir alter Code auf dem µC. Der Compiler sieht ob00101000 als Name einer Variablen an, die nicht existiert.
Das hatte ich gerade nach dem ersten Beitrag geändert dann hatte es aber immer noch nicht funktioniert.
Nico L. schrieb: > Das hatte ich gerade nach dem ersten Beitrag geändert Vielen Dank, dass ich 20 Minuten lang deinen Code Zeichen für Zeichen absuchen durfte.
Allerdings war das Problem dass AVR-Studio die Header erst in der neuen Version kompliert wenn sie gespeichert sind. Dann hatte ich wahrscheinlich immer die alte Version des Headers drin und die neue Version hatte eine ganz neue Version der Initialisierung drin. Die alte funktionierte natürlich nicht, aber diese wurde immer verwendet bis ich dann per Zufall das bemerkte. Das wusste ich auch nicht und es tut mir Leid.
Nico L. schrieb: > Allerdings war das Problem dass AVR-Studio die Header erst in der neuen > Version kompliert wenn sie gespeichert sind. Hast du den Header File mit ins Projekt aufgenommen?
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.