ATtiny2313 / LCD2x16 / String Ausgabe fehlerhaft

OP #3405617
Lesenswert?

Hallo, ich habe auch mal etwas, wo ich nicht weiter weiß.

Ich habe ein LCD an einem ATtiny2313 angeschlossen, und bis jetzt 
funktionierte auch alles einwandfrei. Nur jetzt - um so länger der Code 
wird, werden die übergebenen Strings an das LCD fehlerhaft ausgegeben. 
Wie auf dem Bild zu sehen ist die Ausgabe der Menütexte "PWM1-3" 
problemlos, gebe ich aber "Menu4" aus, kommen kryptische Zeichen. Dabei 
ist es egal, ob ich den µC mit internem Takt oder Quarz betreibe - der 
Fehler bleibt.

Software: AVR Studio 6, Toolchain 3.0.4.65, STK500 und AVRISP MKII.

Hat da jemand einen Hinweis für mich?

Gruss Robert
Angehängte Dateien:
Gast #3405686
Lesenswert?

Könnte das eventuell mit den Umlauten zusammenhängen? Schreib mal 
'MENUE' anstatt 'MENÜ'
u.U. müsste man die Zeichen mit einem in die Entwicklungsumgebung 
eingebauten Zeicheneditor selbst definieren. ü ist nicht üblich, gäll? 
;-)
Gast #3405705
Lesenswert?

Robert Dorn schrieb:

> gebe ich aber "Menu4" aus, kommen kryptische Zeichen.

Bist du sicher, daß es tatsächlich das ist, was du ausgibst oder könnte 
es es sein, daß du in Wirklichkeit "Menü4" auszugeben versuchst?
Der springende Punkt ist hier das Vorhandensein oder Nichtvorhandensein 
eines Umlauts.

Allerdings sieht die Anzeige doch tatsächlich eher nach einer 
Stack-Heap-Kollision aus, wie ihn holger vermutet. Ich würde mal 
behaupten, man sieht hier drei Rücksprungadressen von Funktionsaufrufen 
(oder ISRs) und eine lokale Variable mit Bytegröße (oder ein gerettes 
Register) mit dem Inhalt 0x20.

Und wie Stefan Ernst schon korrekt (wenn auch etwas undeutlich) schrieb: 
(konstante) Strings haben im RAM absolut nix zu suchen, die gehören in 
den Flash. Da ist erstens viel mehr Platz und zweitens können sie da 
nicht überschrieben werden. Jedenfalls nicht vom Stack...
OP #3405710
Lesenswert?

Hallo, das mit dem String in den Progmem schreiben werde ich mir mal 
genauer ansehen - das Tut dazu habe ich eben kurz überflogen. Habe ich 
bis jetzt noch nicht gemacht, sollte nicht so schwer sein.
Zu den Sonderzeichen: da wird keines mit übergeben, wenn es ein Zeichen 
nicht kennt kommt eben ein anderes heraus, aber nicht gleich eine 
komplett verbogene Ausgabe. Der Fehler tritt ja auch bei 16 x "x" auf.
#3405953
Lesenswert?

Robert Dorn schrieb:
> Vielen Dank, läuft!

Glück. 'menutext' ist um eins zu klein.

Überhaupt ist dieses Umkopieren ganzer Strings ins RAM keine wirklich 
gute Lösung. Schreibe dir lieber eine zusätzliche lcd_string Funktion 
(lcd_string_P), die direkt Strings im Flash als Argument akzeptiert. 
Hätte obendrein den Nebeneffekt, dass du die Strings in den Aufrufen der 
Form lcd_string("XXXX"); ebenfalls auf sehr einfache Weise ins Flash 
verfrachten könntest.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren