Ich habe jetzt einen Formatierungsalgorithmus geschrieben und sitze
schon ne Stunde rum und kann den Fehler nicht finden. Das Resultat ist,
dass ich auf beiden Zeilen des Displays was sehe und zwar ändern sich
die Werte. Gemessen wird richtig denn manchmal stimmen die Werte, die
angezeit werden, aber alles irgendwie verwischt.
--> Code(Der Code dient natürlich dem Zweck des Roboters und ich habe
ihn auch dementsprechend entwickelt, also nicht wundern wegen der vielen
Dekl und Def und includes..., hoffe mir kann trotzdem jemand helfen:
Aus der for Schleife kommt er noch raus und es geht dann von vorn los,
aber irgendwie überschreibt er oder nimmt die falsche x Koordinate,
wieso auch immer.
2/ "Alles Verwischt" ist für mich klar, wenn alle ca. 50ms eine
Komplettausgabe auf dem LCD gemacht wird.
3/ Bist du sicher mit dem Start des Spalten/Zeilenindex 0,0 beim LCD?
Das ist ungewöhnlich. Öfter sieht man 0,1
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung
Stefan B. schrieb:> 2/ "Alles Verwischt" ist für mich klar, wenn alle ca. 50ms eine> Komplettausgabe auf dem LCD gemacht wird.
Begründe das mal, das versteh ich nämlich nicht.
Stefan B. schrieb:> 3/ Bist du sicher mit dem Start des Spalten/Zeilenindex 0,0 beim LCD?> Das ist ungewöhnlich. Öfter sieht man 0,1
Ok, du hast es gefunden, und das war niht einmal der einzige Fehler.
Danke!
Gruß Bro
Brocken Sei schrieb:>> 2/ "Alles Verwischt" ist für mich klar, wenn alle ca. 50ms eine>> Komplettausgabe auf dem LCD gemacht wird.>> Begründe das mal, das versteh ich nämlich nicht.
Kannst du irgendetwas lesen, wenn sich eine angezeigte Zahl in der
Sekunde 20 mal ändert? (*)
Wenn du 5 mal in der Sekunde eine Zahl austauscht, musst du schon froh
sein, wenn du die Zahlen noch einzeln identifizieren kannst. Und selbst
dann ist es von Vorteil wenn man dafür sorgt, dass die Einerstelle immer
an der gleichen Stelle auftaucht, die Zehnerstelle immer an der gleichen
Stelle auftaucht etc.
(*) stimmt ja eigentlich gar nicht.
Du klatscht ja die 5 Zahlen mit Full Speed um jeweils 4 Zeichen versetzt
(!) aufs LCD und erst dann wird eine winzige Pause eingelegt.
Und ja: Da du das LCD nie löscht, überschreibst du nur.
Wenn am LCD
+---+---+---+---+---+---+---+---+
| 1 | 0 | 0 | 0 | | | | |
+---+---+---+---+---+---+---+---+
also 1000 steht und du schreibst im nächsten Schleifendurchlauf eine 999
beginnend mit dem linken Rand drüber, dann steht da
+---+---+---+---+---+---+---+---+
| 9 | 9 | 9 | 0 | | | | |
+---+---+---+---+---+---+---+---+
also 9990, weil ja niemand die letzte 0 von den 1000 mit einem
Leerzeichen überschrieben hat.
Karl heinz Buchegger schrieb:> Kannst du irgendetwas lesen, wenn sich eine angezeigte Zahl in der> Sekunde 20 mal ändert?
Hmm, ich will aber nicht wissen wie sich die Zahl verändert sondern den
aktuellen Zustand und ja das sehe ich dann.
Karl heinz Buchegger schrieb:> Und selbst> dann ist es von Vorteil wenn man dafür sorgt, dass die Einerstelle immer> an der gleichen Stelle auftaucht, die Zehnerstelle immer an der gleichen> Stelle auftaucht etc.
habe ich jeh was anderes behauptet Karl?
Gruß Bro
Brocken Sei schrieb:>> Und selbst>> dann ist es von Vorteil wenn man dafür sorgt, dass die Einerstelle immer>> an der gleichen Stelle auftaucht, die Zehnerstelle immer an der gleichen>> Stelle auftaucht etc.>> habe ich jeh was anderes behauptet Karl?
Es spielt keine Rolle ob du das behauptet hast oder nicht. Programmiert
hast du es jedenfalls nicht.
Wenn am LCD
+---+---+---+---+---+---+---+---+
| 1 | 0 | 0 | 0 | | | | |
+---+---+---+---+---+---+---+---+
also 1000 steht und du schreibst im nächsten Schleifendurchlauf eine 999
beginnend mit dem linken Rand drüber, dann steht da
+---+---+---+---+---+---+---+---+
| 9 | 9 | 9 | 0 | | | | |
+---+---+---+---+---+---+---+---+
also 9990, weil ja niemand die letzte 0 von den 1000 mit einem
Leerzeichen überschrieben hat.
Karl heinz Buchegger schrieb:> (*) stimmt ja eigentlich gar nicht.> Du klatscht ja die 5 Zahlen mit Full Speed um jeweils 4 Zeichen versetzt> (!) aufs LCD und erst dann wird eine winzige Pause eingelegt.
Richtig.
Gruß Bro
Karl heinz Buchegger schrieb:> Und ja: Da du das LCD nie löscht, überschreibst du nur.
richtig, deshalb habe ich auch auf 1.1 formatiert. Ich komm sowieso nie
über die 5V.
Gruß Bro
Probier mal diese Variante. Die sorgt wenigstens dafür, dass die Zahlen
immer mit einer konstanten Feldbreite im Buffer abgebildet werden.
Dann sind wenigstens die Dezimalpunkte immer an derselben Stelle.
Karl heinz Buchegger schrieb:> Es spielt keine Rolle ob du das behauptet hast oder nicht. Programmiert> hast du es jedenfalls nicht.
Was du da redest..., wie kommt du immer auf so was? Dieses Programm habe
ich mir überlegt mit !allem! drum und dran! Und ich finde ich habe mich
sehr in der Programmiersprache C befreundet, denn ich versteh alles von
meinem Programm, jede Zeile, frag mich doch wenn du mir nicht glaubst.
Ich hatte ja auch erwähnt dass ich nicht nur einen Fehler habe.
Falls es dich interessiert, so schauts dann aus:
Brocken Sei schrieb:> Karl heinz Buchegger schrieb:>> Und ja: Da du das LCD nie löscht, überschreibst du nur.>> richtig, deshalb habe ich auch auf 1.1 formatiert.
Wo hast du das?
Ausserdem ist 1.1 Blödsinn.
Die Zahl vor dem Punkt gibt die Gesamtzahl an Zeichen an, inklusive
Vorzeichen und Dezimalpunkt. Die Zahl nach dem Punkt gibt an wieviele
Stellen davon Nachkommastellen sein sollen.
1.1 ist daher Blödsinn. Du kannst nicht eine Kommazahl mit einem
Deezimalpunkt und einer Nachkommastelle in einerm Zeichenfeld mit der
Gesamtbreite von 1 Zeichen unterbringen.
Karl heinz Buchegger schrieb:> Probier mal diese Variante. Die sorgt wenigstens dafür, dass die Zahlen> immer mit einer konstanten Feldbreite im Buffer abgebildet werden.> Dann sind wenigstens die Dezimalpunkte immer an derselben Stelle.> while(1)> {> zaehlerLCD = 0;> for(zaehlerVal = 0; zaehlerVal < 5; zaehlerVal++)> {> lcd_setcursor( zaehlerLCD, 0 );> sprintf(Buffer, "%6.11f ", (double)GetADC_8bit(zaehlerVal));> lcd_string(Buffer);> zaehlerLCD += 6;> }>> _delay_ms(50);> }
siehe:
Autor: Brocken Sei (Gast)
Datum: 22.08.2010 23:59
Brocken Sei schrieb:> siehe:>> Autor: Brocken Sei (Gast)> Datum: 22.08.2010 23:59
In jedem Code davor war das noch nicht so.
Und meine Aufforderung nach Formatierbreiten war noch ehe du deinen Code
gepostet hast. Ansonsten hättest du dich in deiner Antwort, in der zum
ersten mal Formatierbreiten vorhanden sind, nicht darauf beziehen
können.
Brocken Sei schrieb:> Was du da redest..., wie kommt du immer auf so was?
Weil ich mir den Code ansehe, den du postest :-)
> Dieses Programm habe> ich mir überlegt mit !allem! drum und dran! Und ich finde ich habe mich> sehr in der Programmiersprache C befreundet
Ja, wird schon.
Karl heinz Buchegger schrieb:> In jedem Code davor war das noch nicht so.> Und meine Aufforderung nach Formatierbreiten war noch ehe du deinen Code> gepostet hast. Ansonsten hättest du dich in deiner Antwort, in der zum> ersten mal Formatierbreiten vorhanden sind, nicht darauf beziehen> können.
Nun ja, ich hatte gedacht, dass das Thema erledigt war da ich es doch
schon schaffte. Ich glaub jetzt unterstellst du mir wieder dass ich das
nur hinbekommen habe weil du mir das so erklärst hast oder darauf
hingewiesen hast. Ich muss aber leider sagen, dass ich das schon fertig
hatte als ich geschrieben hatte dass ich fertig war. Und nach der ersten
Antwort wusste ich schon dass die Leute nicht heiß darauf wären meinen
Code zu analysieren.
Sry wegen der Verwirrung, aber alle Ideen hatte ich, und du hast
versucht mir zu helfen, und dafür danke ich dir, aber nur in Grenzen,
denn du kannst es scheinbar nicht widerstehen mich fertig zu machen,
aber keine Angst, ich lass mich nicht fertig machen
Gruß Bro
Brocken Sei schrieb:> Nun ja, ich hatte gedacht, dass das Thema erledigt war da ich es doch> schon schaffte.
Nein. Überhaupt nicht.
Aber des öfteren überschneiden sich auch schon mal unsere Schreibzeiten.
Da ist es dann immer gut, ehe man eine geharnischte Antwort schreibt
auch mal auf die Postingzeit zu achten. Wenn die ein paar Minuten
auseinanderliegen anzunehmen, dass man mehr oder weniger gleichzeitig
geschrieben hat.
> hingewiesen hast. Ich muss aber leider sagen, dass ich das schon fertig> hatte als ich geschrieben hatte dass ich fertig war.
Das konnte ich so nicht aus deiner Antwort rauslesen.
> Sry wegen der Verwirrung, aber alle Ideen hatte ich, und du hast> versucht mir zu helfen, und dafür danke ich dir, aber nur in Grenzen,> denn du kannst es scheinbar nicht widerstehen mich fertig zu machen,> aber keine Angst, ich lass mich nicht fertig machen
:-)
Jetzt weißt du wenigstens, wie das mit der Formatierung und der
Feldbreite funktioniert und du wirst es nie mehr vergessen. Eines sollte
man noch erwähnen: Wenn die Feldbreite nicht ausreicht, wie bei dir,
dann vergrößert sie printf auch eigenmächtig. Daher hat 1.1 zwar keinen
Fehler produziert, aber es hat auch nicht das getan was du wolltest.
:-)