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