Hallo, ich habe den MPX4115A an meinen ATMega16 angeschlossen und bekomme die Werte siehe Foto. Ich verstehe allerdings nicht wieso der "tenBitValue"-Wert richtig ist die Umrechnung allerdings nicht. Rein rechnerisch müsste eigentlich 1013hPa rauskommen, was vom Wert her wohl passen sollte. Aber trotz meiner Multiplikation von 10 um von kPa zu hPa zu gelangen kommt nur der Wert 105 raus. An der Auflösung von 10bit kann es ja eigentlich nicht liegen, da der Wert von 836 richtig zu sein scheint. Ich muss wohl irgendwie bei den Datentypen einen Fehler begangen haben. Leider kenne ich mich was das betrifft noch nicht sehr gut aus. Ausschnitte aus der main.c: float phPa; char phPa_char[4]; char tenBitValue_char[4]; uint8_t theLow = ADCL; //Need to read ADCL before ADCH uint16_t tenBitValue = ADCH << 8 | theLow; //convert tenBitValue from adc to hPa-Value phPa = ((tenBitValue/1023+0.095)/0.009)*10; //in hPa //Convert the ADC conversion result to a string itoa(phPa, phPa_char, 10); //Value between 0-1023 itoa(tenBitValue, tenBitValue_char, 10);
Tach Florian, vielleicht liegt es daran, dass du itoa auf ein float an die Backe klebst? Thor PS: Ach ja, nächstes mal bitte
1 | CODE! |
benutzen!
tenBitValue/1023 ist 0 (Integer/Integer) Verwende 1023.0 Grüße
@wind: Super! So funktioniert es! Kannst du mir auch noch erklären was es damit auf sich hat, warum benötige ich ".0", bzw was ändert diese Schreibweise? @Thor368 oh entschuldige! Jetzt sehe ich erst diese option! Kommt nicht nocheinmal vor :)
1 | Test
|
Bisher war das eine Integer Division. Mit 1023,0 wird daraus ein Integer / Float Division. Das Ergebnis ist damit auch Float. Und das willst Du ja in diesem Fall Grüße
Achso selbst wenn die Variable "phPa" oben als float deklariert ist, benötigt jede einzelne Operation eine "Transformation" in den richtigen Datentyp. Folgende Variante wäre dementsprechend funktionsfähig aber ich vermute viel zu "Speicherplatz" raubend?
1 | float phPa; |
2 | |
3 | float tenBitValue_float = tenBitValue; |
4 | float Resolution = 1023; |
5 | |
6 | phPa = ((tenBitValue_float/Resolution+0.095)/0.009)*10; |
Vielen Dank!
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.