mikrocontroller.net

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


Autor: Sebastian (Gast)
Datum:

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

Autor: Werner B. (Gast)
Datum:

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

Autor: Sebastian (Gast)
Datum:

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

Autor: Jürgen Sachs (jsachs)
Datum:

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

Autor: Sebastian (Gast)
Datum:

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

Autor: Sebastian (Gast)
Datum:

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

Autor: Sebastian (Gast)
Datum:

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

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.