www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LCD 2.Zeile geht nur ein Mal


Autor: Richard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Niels Hüsken (monarch35)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Richard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Nils
die Ausgabe habe ich im Posting in den Programmtext als Kommentar 
geschrieben

Autor: Niels Hüsken (monarch35)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was bedeutet denn "beim zweiten mal"? Ich sehe in deinem Programmcode 
keine Schleife...

Autor: Richard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Niels Hüsken (monarch35)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Richard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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?!

Autor: Niels Hüsken (monarch35)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ahhh...sorry, dann wars ein missverständnis meinerseits.

In diesem Fall tippe ich auf einen Softwarebug in der Lib...soll 
vorkommen.

Autor: Richard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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 ...

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Richard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Niels Hüsken (monarch35)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder den ISP Stecker mit en Portreiber "Abklemen" sobald Reset HIGH geht 
:)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.