Hi Profis, Ich bin zu blöd für folgende Aufgabe: Ich will den AD-Wandler auslesen und den erhaltenen Wert erst umrechnen, dann als String an ein LCD übergeben. Mein geplantes Vorgehen ADCL und ADCH auslesen und - wie im Tutorial beschrieben - die beiden Register verbinden. Somit erhalte ich eine binäre 16Bit Zahl (wenn ich nicht irre) mit dem Maximalwert von 1023 dezimal. Nun muss ich den Wert so umrechnen, dass 0 bis 1023 einer Skala von 00,0 bis 30,0 entsprechen. Dieses Ergebnis sollte dann als String an ein LCD gesendet werden. Hiilfee. Mein Problem ist weniger das Umrechnen, als das Wandeln von binär in einen String.
Ungetestet:
1 | char buf[5]; |
2 | char *ptr = buf; |
3 | uint32_t val = (ADC * 300UL) / 1024; |
4 | char c; |
5 | uint8_t dig = 100; |
6 | for (uint8_t i = 0; i < 3; ++i) { |
7 | c = '0'; |
8 | while (val >= dig) { |
9 | ++c; |
10 | val -= dig; |
11 | }
|
12 | *++ptr = c; |
13 | if (!i) *++ptr = ','; |
14 | }
|
15 | *ptr = 0; |
16 | //buf sollte nun den Zahlenwert beinhalten.
|
Ist wohl nicht optimal, sollte aber so in der Art funktionieren. Allerdings wirst du mit der Rechnung nie 30,0 erreichen, sondern nur 29,9. Willst du wirklich bis 30, solltest du oben mit 301 multiplizieren...
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.