Forum: Compiler & IDEs Display nur bei Wertänderung aktualisieren


von Sebastian (Gast)


Lesenswert?

Hallo,

Ich habe noch nicht viel Ahnung von C, daher ist mein erstes Projekt
eine Spannungsanzeige (0-5V) mit einer Balkenanzeige, beides auf einem
2*16 Zeichen Display.

Nun habe ich ein Problem, das ich absolut nicht nachvollziehen kann und
hoffe, dass mir einer helfen kann.

{
char wert[5]; //der Anzeigewert ist 4-stellig
char temp[5];

        if (strcmp(temp,wert)!=0)
  {
          strcpy(temp,wert);
    lcd_puts (wert);
    lcd_puts (" Volt");
        }
}

Das ist im Prinzip der Teil, um den es geht. "Wert" ist der
anzuzeigende Wert, ist der ungleich dem zuvor angezeigten wert, dann
wird der neue Wert ausgegeben.
Dabei schwankt der Wert jedoch ständig hin und her um ca 0,1- 0,3V.
Lasse ich die If-Bedingung weg, bleibt der Anzeigewert konstant.

M f G
Sebastian

von Werner B. (Gast)


Lesenswert?

Es ist (nach dem geposteten Codeausschnitt) egal ob du das if drin hast
oder nicht, denn der Inhalt von temp[] ist bei jedem Eintritt in die
oberste geschweifte Klammer undefiniert da temp jedesmal neu erzeugt
wird. Anders sieht es aus wenn du

static char temp[5];

verwendest. Hier hat temp seinen festen Platz im Speicher und ändert
seinen Inhalt zwischen den Aufrufen nicht ;-)

Davon abgesehen;
Aller Warscheinlichkeit schwank der Wert wirklich und die Anzeige hat
recht.

von Sebastian (Gast)


Lesenswert?

Hm, ich dachte auch schon, dass es bei jedem neuen Aufruf des
Unterprogramms seinen Wert ändert, daher hab ich es auch schon global
deklariert...
Auch als "static char" schwankt der Wert. Immer zwischen 2 den
gleichen Werten z.B. 5,00 - 5,25... immer abwechselnd.
Bei ganz kleinen Anzeigewerten (unter 0,5V) lässt es sich noch
einstellen, dass es konstant bleibt.
Die Frage ist nur, warum der Wert ohne If halt nicht schwankt. Ich
führe vor der Ausgabe des Analogwertes immer 20 Messungen durch und
bilde den Mittelwert, von daher sollte das Ergebnis schon recht
konstant sein.

M f G
Sebastian

von Jürgen S. (jsachs)


Lesenswert?

Hmm,

kann es sein das dein Timing im Programm sich ändert und du daher
andere Werte bekommst.
An dem Code (if Abfrage) dürfte es nicht liegen.
Aber wie Werner B. schon sagte, ohne "static" bringt die if Abfrage
vermutlich nichts.

Versuche doch mal "statische Werte" im Programm zu hinterlegen, damit
du Messfehler auschließen kannst.
Passiert das dann immer noch, würde ich auf Timing mit einem Interrupt
tippen (verändern eines Wertes wärend der Ausgabe).

Gruss
Juergen

von Sebastian (Gast)


Lesenswert?

Wenn ich das richtig verstanden habe, soll ich statt des Messwertes
einfach einen konstanten Wert hinschreiben....
Das funktioniert soweit ohne dass sich der Wert ändert. Ohne If wird
das Display ständig aktualisiert, mit If nur einmal...


M f G
Sebastian

von Sebastian (Gast)


Lesenswert?

Nochwas...
Das komische ist, dass theoretisch gar keine 5,25V angezeigt werden
können. Bei einem Analogwert von 1023 werden 5,00V angezeigt. Da es
"nur" 10 Bit sind ist wohl der Fehler irgendwo in der Messung selbst.

von Sebastian (Gast)


Lesenswert?

OK,
Der Fehler sitzt irgendwie immer davor. Habe im Laufe des "Debuggens"
versehentlich die Initialisierung für meine Analogwertvariable gelöscht,
sodass diese nicht zwingend 0 beim Aufruf ist...

M f G + Danke für die Hilfe

Sebastian

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
Noch kein Account? Hier anmelden.