Hallo liebes Forum,
ich möchte gerne einen Fließtext/Lauftext auf mein LCD-Display ausgeben
nach einem Tastendruck.
Grundsätzlich funktioniert das auch. Das ganze läuft in einer Schleife,
die jede Sekunde den gesamten Displaytext um eins nach rechts bewegt
(http://www.mikrocontroller.net/articles/AVR-Tutorial:_LCD).
Wenn ich nun einen anderen Taster drücke, will ich, dass das Programm
etwas anderes macht (zb eine andere Displayausgabe). Ich habe
verschiedene Möglichkeiten durchprobiert. Entweder kommt das Programm
nicht aus der Schleife raus (schiebt also jede Sekunde den Text auf dem
Display um eins nach rechts, egal wie ich auf die Taster einhaue) oder
der Fließtext läuft nicht mehr kontinuierlich nach rechts weiter.
Aktuell scrollt der gesamte Text genau ein Zeichen nach rechts und macht
dann nichts mehr. (siehe Quellcode)
Ich weiß leider keine weiteren Lösungsversuche mehr.
In dem angehängten Quelltext ist unter dem Label "taster4" in Zeile 353
der entsprechende Fehlercode.
Sami Reim schrieb:> Ich weiß leider keine weiteren Lösungsversuche mehr.> In dem angehängten Quelltext ist unter dem Label "taster4" in Zeile 353> der entsprechende Fehlercode.>> Ich hoffe, irgendwer hat nen Lösungsansatz. :)
Das Ganze sieht nach Code der von einem Basic Compiler generiert und
dann wahllos reinkopiert wurde. Formatierung und Zeileneinrückung ist
katastrophal.
Aber:
a) Timer1 wird auf 1ms eingestellt, aber es wird mit 10ms gerechnet,
somit läuft alles 10x schneller.
b) Timer1 benutzt CS10 und nicht CS00, daß die beiden zufällig auf
selber bitposition stehen, ändert nichts daran.
c) SREG wird in der ISR nicht gerettet, wenn der ISR sofort nach
einem Vergleich und vor dem Sprung zuschlägt, wird es nichts mit
darauffolgenden Flagauswertung.
d) Bei deiner Tasterabfrage wird Prellen nicht berücksichtigt.
e) Das, was du gepostet hast, nennt man Spaghetti-Code, da wird
einem schwindelig von Vor- und Zurückspringen.
Versuche das Ganze etwas übersichtlicher zu gestalten.
Sami Reim schrieb:> Ich weiß leider keine weiteren Lösungsversuche mehr.
...
> Ich hoffe, irgendwer hat nen Lösungsansatz. :)
Nun, ich würde vorschlagen, du lernst erstmal Programmieren im
Allgemeinen und Assembler im Besonderen.
Dein Programm ist echt grausam. Mal abgesehen von der miesen
Formatierung und dem Fehlen eines erkennbaren Grundkonzeptes strotzt es
nur so von Fehlern.
Es ist überdeutlich zu erkennen, daß es aus fremden Quellen
zusammenkopiert und mit sehr schwachen Assemblerkenntnissen angepaßt
wurde.
So wird das nix.
Hi Marc & c-hater,
erstmal vielen Dank für Eure Antworten! Ihr seid ja ganz schön schnell
hier ;)
Aktuell bin ich dabei mir Programmieren im Allgemeinen und Assembler im
Besonderen beizubringen. Ich hab mich bemüht, meinen Code halbwegs
ordentlich ausschauen zu lassen. Anscheinend habe ich das schonmal nicht
hinbekommen.
a) Da is mir wohl ein Fehler beim Kommentieren untergekommen.
Grundsätzlich funktioniert der Timer aber und ist nicht 10x schneller.
b) Hab ich geändert ;)
c) Hier lag tatsächlich der Fehler! Vielen vielen Dank!
d) Meine Tasterabfrage funktioniert problemlos. Es treten keinerlei
Prell-Anzeichen auf.
e) Solange arbeite ich noch nicht mit Assembler. Kann gut sein, dass es
unübersichtlich oder Spaghetti-Code ist. Besser habe ich es aber leider
nicht hinbekommen. :/
In einem Jahr werd ich wahrscheinlich auch sagen: "Was für ne scheiße
hab ich denn damals bitte geschrieben??" Aber aktuell reichen meine
Erkenntnisse einfach nicht für viel mehr.
Sami Reim schrieb:> a) Da is mir wohl ein Fehler beim Kommentieren untergekommen.> Grundsätzlich funktioniert der Timer aber und ist nicht 10x schneller.
Nein, mein Fehler beim lesen, dachte deine Mega läuft mit 10MHz.
Wert für Timer_Grundlage liest man nicht zur Laufzeit aus dem Flash,
sondern schreibt es als Konstante, etwa so:
Sami Reim schrieb:> d) Meine Tasterabfrage funktioniert problemlos. Es treten keinerlei> Prell-Anzeichen auf.
Wahrscheinlich wegen der LCD-Schieberei gleich danach. Trotzdem muss
man mit so etwas rechnen.
Sami Reim schrieb:> Aber aktuell reichen meine Erkenntnisse einfach nicht für viel mehr.
Was ja auch nicht schlimm ist.
P.S.
"Standard" schreibt sich mit "d"