Hallo allerseits, ich habe ein Problem mit meinem Code, das ich nicht verstehe. Ich messe an ACD0 und ADC1 eine Spannung, wandle sie im Programm um und gebe sie auf dem LCD aus. An ADC0 hängt ein ACS712 Stromsensor, die gemessenene Werte passen soweit. Wenn ich 4A durch den ACS schicke zeigt mir das Display auch 4000mA an. Allerdings stimmt etwas mit ADC1 nicht und ich weiß nicht was. An diesem möchte ich Spannungen bis 35V über einen 82K/13K Spannungsteiler messen. Zur Zeit hängen das 12V dran, was zwischen den Widerständen 1,66V ergibt, umgerechnet in einen ADC Wert entspicht das 340 UND diese 340 kann ich mir auch auf dem LCD direkt anzeigen lassen. Das LCD zeigt 340 wenn ich volt_adc ausgeben lasse. Das passt soweit. Will ich mir allerdings volt_u (diese Variable soll die Spannung an ADC1 ausgeben) direkt in mV anzeigen lassen, bekomme ich 4294967293 angezeigt. Und genau das ist der Punkt den ich nicht verstehe. Meine Rechnung ist doch richtig, oder? Was mache ich falsch? Ich dachte das mir die Spannungsmessung weitaus weniger Probleme bereiten würde, aber scheinbar ist dem nicht so. Oder bin ich einfach nur betriebsblind? Kann man bitte jemand drüber schauen? Viele Grüße Marko
OK, ich habe gerade den Fehler gefunden! volt_u muss natürlich ebenfalls long sein und nicht int. Trotzdem Danke für die Hilfe, die ich sicherlich bekommen hätte!
Unter anderem deshalb wird in den anderen Funktionen uint32_t verwendet. Es ist sofort ersichtlich wie groß der Datentyp ist!
Marko schrieb: > OK, ich habe gerade den Fehler gefunden! volt_u muss natürlich ebenfalls > long sein und nicht int. Du musst überhaupt ein wenig mehr auf deine Datentypen aufpassen. Die sind nicht nur Dekoration
1 | long amp_real = 0; |
2 | ...
|
3 | ultoa( amp_real, s, 10 ); |
Der Prefix 'ul' in 'ultoa' wiesst darauf hin, dass diese Funktion für 'unsigned long' gedacht ist. Deine Variable ist aber (signed) long. Das ist ein Unterschied! Spätestens dann, wenn du einmal negative Zahlen hast, wirkt sich das aus. Wie, bei dir kommen keine negativen Zahlen vor? Warum ist die Variable dann long und nicht unsigned long? Die Dinge müssen schon zusammenpassen: Hast du einen long, dann ist die korrekte Funktion dafür ltoa. Hast du einen unsigned long, dann ist die korrekte Funktion dafür ultoa. Und natürlich auch in der anderen Richtung: jede Funktion hat einen Datentyp für den sie gedacht ist und der für sie korrekt ist. Etwas mehr Sorgfalt. (Respektive natürlich int32_t bzw uint32_t)
:
Bearbeitet durch User
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.