Hallo Leute, ich hoffe ihr könnt mir helfen. Und zwar mache ich eine Spannungs - Messung mit dem ADC vom ATMEGA88. So nun habe ich meine Ergebnis result=ADCW Das Ergebnis wird ja in der Form Vin*1024/Vref gespeichert. Mein Bsp: 4.12V*1024/5,12V (=824). Nun möchte ich eine Rückkonvertierung in den tatsächlichen Wert machen und es auf dem Display anzeigen : result_new=result*5.12V/1024 (=4.12) Wie kriege ich diese 4.12 mit möglichst kleinem Aufwand aufs Display ? Die Variante mit modulo finde ich nicht so elegant, zudem ich modulo schon in der vorlesung nicht verstanden habe. Wäre toll, wenn ihr mir die paar Zeilen Code schreiben könntet
1 | char str [20]; |
2 | ... |
3 | sprintf (str, "%.2f\n", result_new); |
4 | ... |
Das Ergebniss steht nun im Array Char und das kannst du mit einer For-Schleife durchlaufen und jedes Zeichen einzeln am Display ausgeben.
und nicht vergessen die entsprechende library mit einzubinden gruss hans --
>zudem ich modulo schon in der vorlesung nicht verstanden habe.
Tolle Begruendung!
citb
ultra-vatah schrieb: > zudem ich modulo schon in der vorlesung nicht verstanden habe. das lässt sich recht einfach lösen: wenn du an die division denkst, wie sie in der volks-/grundschule gelehrt wird, kommt immer eine ganze zahl als ergebnis heraus und falls notwendig ein rest. z.b. 10:3 = 3 mal, 1 rest 10%3 = 1 -> modulo liefert den rest der ganzzahligen division (rest von vorher)
ich versteh nicht wie man modulo nicht verstehen kann.... modulo gibt immer den rest zurück 124%100 =24 6%3=0 12%10 = 2 1024%2=0 usw... ganz einfach und wenn du 3 var für ne 3 stellige ziffer hast dann bsp: 321 soll ausgeg werden char zahl, min,mid,max; zahl=321; min = 321%10; //ergibt 1 für niederwertigste stelle zahl= zahl -min;(oder zahl -= min;) //321-1=320 mid = zahl %100;//damit ergibt sich aus 320%100 = 20 zahl-=mid; //320-20 = 300 max=zahl/100; //300/100=3 ich hoffe ich habe in aller eile keinen fehler eingebaut;
normie schrieb: > ich versteh nicht wie man modulo nicht verstehen kann.... braucht man doch alles heutzutage nicht mehr, das macht doch alles der Computer ;-)
Walter schrieb: > braucht man doch alles heutzutage nicht mehr, das macht doch alles der > Computer ;-) Tja, trotzzdem musst du wissen, wass Modulo macht. Wenn alles der Computer macht, sage ich ihm jetzt folgendes:
1 | > bringe_mir_eine_tasse_kaffee |
2 | Der Befehl "bringe_mir_eine_tasse_kaffee" ist entweder falsch geschrieben oder konnte nicht gefunden werden. |
Ok, falscher Computer; dann halt ein anderer:
1 | [root@kaffeemaschine]# hole_mir_eine_tasse_kaffee |
2 | bash: hole_mir_eine_tasse_kaffee: command not found |
Kann er auch nicht :-(
Modulo nutzt dir bei Fliesskommazahlen (4.12) nix. Nimm dafür die Lösung von Massa mit sprintf(). Oder wechsele zu Ganzzahlen und Fixkommarechnung in dem du z.B. intern mit dem hundertfachen Wert rechnest (412). Modulo ist Grundhandwerk beim µC programmieren. Bring dir das schleunigst selber bei, sonst hast du nicht viel Spaß beim Hobby! Statt Modulo kannst du auch durch Subtrahieren und Vergleichen herausfinden, wie viele Hunderter, Zehler und einer in deiner Zahl vorhanden sind. Diese Ergebnisse (4 Hunderter, 1 Zehner, 2 einer) kannst du durch Addition von '0' in ASCII-Ziffern ('4', '1', '2') umwandeln und zusammen mit einem Dezimaltrennzeichen (',' oder neudeutsch '.') an der richtigen Stelle ("nach den Hundertern, wenn intern mit dem Hundertfachen gerechnet wurde") aus geben.
Ich weiß ja nicht, wie das bei Mikrocontrollern aussieht, aber unter Umgebungen mit Betriebssystemen gilt es mittlerweile nicht mehr als guter Stil, sprintf bzw. printf zu verwenden. Das Auswerten eines Format-Strings zur Laufzeit habe ich eh' noch e als schönes Konzept empfunden. Diese Funktionen sind eine gute Möglichkeit, kleine Fehler so unterzubringen, dass sie nicht nur große Auswirkungen haben, sondern auch noch schwer zu finden sind. Abgesehen vom Geschwindigkeitsgewinn verbrät es außerdem meistens deutlich weniger Programmspeicher, diese Funktionen nicht mit in sein Programm zu linken sondern stattdessen die Formatierung mit ftoa(), itoa(), strncpy() etc.. selbst vorzunehmen.
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.