Moin, ich habe ein LCD mit einer Zeile, 16 Zeichen. Ist ja intern als 2x8 organisiert. ich verwende die Bibliothek von Peter Fleury, hab 2 Zeilen mit je 8 Zeichen und WRAP_LINES definiert. Das Problem ist, dass die Ausgabe in die 2. Zeile nur ein Mal funktioniert lcd_init(LCD_DISP_ON); lcd_puts("Hello World"); // Anzeige:Hello World waittaste(); lcd_gotoxy(0,0); lcd_puts("abcdefghijk"); // Anzeige:abcdefghrld waittaste(); lcd_gotoxy(0,1); lcd_puts("ijk"); // Ausgabe:abcdefghijk kennt jemand den Effekt? Mache oder verstehe ich was falsch? ich kann mir zwar einen Workaround schreiben und bei mehr als 8 Zeichen in die 2. Zeile springen, aber das kanns ja nicht sein? Wenn ich das ganze debugge und mir in der Fleury-Funktion lcd_putc die Positionen anschaue, kommen beim ersten Mal die korrekten 0 1 2 3 4 5 6 7 8 41 42 beim zweiten Mal 0 1 2 3 4 5 6 7 0 1 2
Richard wrote: > Das Problem ist, dass die Ausgabe in die 2. Zeile nur ein Mal > funktioniert Was bedeutet "funktioniert nur ein Mal"? Wie äussert sich das?
@Nils die Ausgabe habe ich im Posting in den Programmtext als Kommentar geschrieben
Was bedeutet denn "beim zweiten mal"? Ich sehe in deinem Programmcode keine Schleife...
lcd_init(LCD_DISP_ON); >>>>>>> hier das erste Mal >>>>>>>>>>>>> lcd_puts("Hello World"); // Anzeige:Hello World waittaste(); lcd_gotoxy(0,0); >>>>>>>>>> hier das 2. Mal >>>>>>>>>>> lcd_puts("abcdefghijk"); // Anzeige:abcdefghrld waittaste(); lcd_gotoxy(0,1); lcd_puts("ijk"); // Ausgabe:abcdefghijk
Also irgendwas stimmt hier garnicht! > 0 1 2 3 4 5 6 7 8 41 42 Keines deiner beiden Strings besteht aus 9 Zeichen, so wie es diese Positionsangaben angeben. Das Einzige, was auffällt ist, das der String "abcdefghijk" länger ist als "Hello World". Demnach würde einziges dafür sprechen, daß > 0 1 2 3 4 5 6 7 0 1 2 die ausgabe von "Hello World", gotoxy (0,0), "abcdefghijk" ist und > 0 1 2 3 4 5 6 7 8 41 42 die ausgabe von"abcdefghijk", gotoxy (0,1), "ijk" widerspiegelt. Nur die Längenangaben stimmen wie gesagt überhaupt nicht...
Hast du in der Fleury Lib den Wrap-Around eingeschaltet, der dafür sorgt, dass beim sichtbaren Zeilenende (also nicht erst nach den üblichen 0x40 Zeichen) in die nächste Zeile geschaltet wird? Wenn ich mich recht erinnere muss beim Wrap-Around die Abfrage vom Display mittels R/W Leitung funktionieren.
@Niels >Also irgendwas stimmt hier garnicht! >> 0 1 2 3 4 5 6 7 8 41 42 >Keines deiner beiden Strings besteht aus 9 Zeichen, so wie es diese >Positionsangaben angeben. "Hello World" besteht aus 11 Zeichen, deshalb kommen auch 11 Positionsangaben, diese sind meiner Meinung nach auch korrekt! Kommt 8 zurück schlägt der Wraparound von Fleury zu und setzt die Position auf 0x40, deshalb kommt als nächstes 0x41 >Das Einzige, was auffällt ist, das der String "abcdefghijk" länger ist >als "Hello World". "abcdefghijk" ist auch 11 Zeichen lang?!
ahhh...sorry, dann wars ein missverständnis meinerseits. In diesem Fall tippe ich auf einen Softwarebug in der Lib...soll vorkommen.
@Karlheinz >Hast du in der Fleury Lib den Wrap-Around eingeschaltet, >der dafür sorgt, dass beim sichtbaren Zeilenende (also nicht >erst nach den üblichen 0x40 Zeichen) in die nächste Zeile >geschaltet wird? Hab ich, geht ja auch beim ersten Mal >Wenn ich mich recht erinnere muss beim Wrap-Around die >Abfrage vom Display mittels R/W Leitung funktionieren. das geht wohl, so erhalte ich ja die Positionsangaben vom Controller es ist nur so dass ich beim ersten Mal nach dem 8.Zeichen die Position 8 erhalte, was ja richtig ist, denn dann setzt es der Wraparound auf 0x40 ABER: beim 2.Mal kommt nach dem 8. Zeichen 0 anstatt 8 zurück, dann wird also das 9. Zeichen ausgegeben. Das landet aber nicht im AnzeigeRAM auf 0, sondern auf 8 und deshalb ist nix zu sehen ...
Hmm. Ich weiss jetzt nicht, ob es möglich ist, mittels Hapsim ein derartiges LCD zu simulieren. Wenn ja, dann würde ich das mal tun und im Simulator mal den Code durchsteppen.
grrrr hab den Fehler jetzt gefunden: also, da mir die Pins kanpp wurden musste ich das LCD auf Port B anschließen, D3 an PB3. Das ist aber auch MOSI der ISP-Schnittstelle. Ich dachte nicht dass das ein Problem darstellt da ja avrdude und Ponyprog den Treiber im Parallel-Programmieradapter nach getaner Arbeit auf hochohmig schalten. Leider gilt das nur für ca 10 Sekunden und dann murkst Windows an der Schnittstelle rum und schaltet den Treiber wieder ein. Der prügelt sich nun mit AVR und LCD um den Pin PB3. Der AVR ist wohl der stärkste der drei denn das schreiben aufs LCD hat immer funktioniert, das LCD war am schwächsten sodass es die Position 8 (Bit 3 gesetzt) nicht zurückmelden konnte. Deshalb hat es bei der ersten Ausgabe funktioniert, bei der zweiten (nach mehr als 10 Sekunden) nicht mehr. Und die Lehre daraus: der erste Anschein trügt
Richard wrote:
> Und die Lehre daraus: der erste Anschein trügt
Die eigentliche Lehre sollte sein: ISP-Stecker im Betrieb entfernen.
Immer und bedingungslos. Und: man kann sich auch tod-debuggen.
Oder den ISP Stecker mit en Portreiber "Abklemen" sobald Reset HIGH geht :)
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.