Hi, das Thema verfolgt mich und es hikft nichts. hier mein Problem: 10Bit vom ADC muss ich am Display anzeigen (T6963C) alles läuft, bis auf die korrekte Darstellung des Messwertes. Das heißt, ich müsste z.B. mit itoa() den ADC Wert in einen String aus Dezimalzahlen wandeln, nur läuft es nicht, wie ich es mir vorstelle. Hat jemand vielleicht dazu schon was gemacht ? mfg LC
>Hat jemand vielleicht dazu schon was gemacht ?
Bestimmt!
Besser wäre es aber, wenn du hier deinen Code einstellen würdest.
Ich habe dazu keinen Code, sonst hätt´ ich nicht gepostet;) Aber das prinzip ist ja klar: String als Zeiger an Low-Level Routine übergeben, die bis zum 0-Byte aufs Display schreibt. Nur den String bekomme ich nicht zusammen und ich hab keine Ahnung wie das geht ! Was ich versucht hatte, war das: Rpm[x] global definiert !
1 | void _itoa(uint16_t adc) |
2 | { |
3 | |
4 | |
5 | int help = adc; |
6 | |
7 | |
8 | if(val > 999) |
9 | { |
10 | Rpm[0] = ( adc - ( help % 1000 ) ) / 1000; |
11 | help %= 1000; |
12 | |
13 | Rpm[1] = ( adc - ( help % 100 ) ) / 100; |
14 | help %= 100; |
15 | |
16 | Rpm[2] = ( help - ( help % 10 ) ) / 10; |
17 | help %= 10; |
18 | |
19 | Rpm[3] = help; |
20 | } |
21 | else if(adc <= 999) |
22 | { |
23 | Rpm[0] = 0; |
24 | |
25 | Rpm[1] = ( adc - ( help % 100 ) ) / 100; |
26 | help %= 100; |
27 | |
28 | Rpm[2] = ( help - ( help % 10 ) ) / 10; |
29 | help %= 10; |
30 | |
31 | Rpm[3] = help; |
32 | } |
33 | |
34 | |
35 | DBE_Lcd_writeStr(Rpm); |
36 | } |
Nimm dir doch bitte mal Papier und Bleistift, nimm einen Wert für adc an und rechne mal per Hand deine Formeln durch. (Was du da machst ist mächtig kompliziert. Einfacher gehts mittels fortgesetzter Division duch 10. Du kriegst halt die Stellen in umgekehrter Reihenfolge. Das lässt sich aber mit einer Routine, die einen String spiegelt leicht korrigieren. 1023 % 10 -> 3 1023 / 10 -> 102 102 % 10 -> 2 102 / 10 -> 10 10 % 10 -> 0 10 / 10 -> 1 1 % 10 -> 1 1 / 10 -> 0 ^ ^ | | Diese Null sagt aus | dass die Konvertierung | fertig ist | | Hier sind die einzelnen Digits Die Digits fallen in der Reihenfolge 3 2 0 1 an. Als String also "3201". Dieser String muss jetzt noch gespiegelt werden, was durch paarweises vertauschen leicht möglich ist. 3 2 0 1 ^ ^ ^ ^ | | | | | +-+ | +-----+ 1 0 2 3 Hat dein Compiler keine _itoa Funktion? itoa ist zwar keine Standardfunktion, die meisten Compiler bringen aber eine mit.
Da fällt mir folgende Seite ein: http://www.cc5x.de/LCD.html (Die gesuchte Funktion ist fast ganz am Ende der Seite)
Hm - und warum verwendest Du nicht die itoa()-Funktion, sondern schreibst sie selbst? Wenn Du kein Platzproblem hast, kannst Du auch sprintf() verwenden, dann hast Du sogar sämtliche Formatierungsmöglichkeiten des printf()-Befehls.
Drei Schleifen und eine IF-Abfrage: RPM[]=" "; // führende Null ignorieren x=0; If (ADC>999) { RPM[0]='1'; RPM[1]='0'; ADC -= 1000; } while (ADC>99) { RPM[1]++; ADC -= 100; RPM[2]='0'; RPM[3]='0'; } while(ADC>9) { RPM[2]++; ADC -= 10; RPM[3]='0'; } RPM[3] += ADC; Ausprobiert habe ich es nicht...
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.