Hallo, ich habe mal eine Frage an die Spezialisten: mir gelingt es,bei einem 4433 über den internen AD-Wandler einen Spannung von 0-5 Volt in eine 10bit-Binärzahl umzuwandeln und auf einem LCD-Display als Dezimalzahl von 0-1023 auszugeben. Ich möchte aber eine Volt-Anzeige von 0,00 Volt bis 5,00 Volt realisieren. Wie kann ich das genau umrechnen?? (Ungenau wäre einfach eine Division durch 2. Entspricht dann bei 1023 einer Anzeige von 5,12 Volt) Oder geht das auch mit Tabellen wie beim C-Control??
Der erste Schritt ist es, die Binärzahl in eine Kette von BCD-Zeichen zu wandeln. Dies gelingt durch eine simple Division der Binärzahl durch 10 in einer Schleife, bis die Binärzahl=0. Das Ergebniss einer solchen Division "16div8", also 16 Bit durch 8 Bit, liefert ein Ergebnis und eine Rest. Der Rest stellt die BCD-Ziffer dar. Im ersten Schritt liefert die Division die Einerstelle des Dezimaläquivalents im BCD-Format. Diesen speichert man im S-Ram, Stack oder übergibt ihn der Ausgaberoutine. Im folgenden wird in der Schleife mit dem übergebenen Ergebnis weiter gerechnet. 10er, 100er, Stelle etc. bis als Ergebnis Null übergeben. In der Ausgaberoutine addiert man auf diese BCD-Stelle einfach 31 dezimal und erhält den ASCII-Code des Zahlenwerts der Dezimalstelle. Dieser kann dann auf's Display gebraten werden. Wer interesse hat, ich arbeite gerade an einer Reihe von erklärten Standardroutinen wie "XdivY" "XmulY", "BIN2BCD", "BCD2ASC" etc. als Standard-Programmbibliothek. Braucht man halt immer. Siehe Anhang als Beispiel. PSE Info bei Interesse.
Teil 2 der Antwort: Theoretisch müsste man des Wert des AD-Wandler in deinem Fall vor der Ausgabe mit 0,0048828125 mal nehmen. Das läuft natürlich auf eine Berechnung mit realen Zahlen heraus. Machbar (Darstellung Mantisse,Exponent) aber auch für µP recht aufwendig. Über Look-Up Tabelle im Programmspeicher (lpm) gings auch. 2 Byte pro Wert möglicher Wert des AD-Wandler = 2048 Byte, also 2k. Ich gehe hier von einer interpretierten Ganzzahldarstellung aus. 500 wäre da 5,00V, 312 3,12V und so. Das ginge vielleicht noch ins Flash. Aber was, wenn Du mal den Messbereich über Schalter und Vorwiderstand auf 12V erweitern möchtest? Warum nicht die Spannungsschritte mit einer Zehnerpotenz (10, 100, 1000, .. ) malnehmen, damit ganzzahlmäßig rechnen, das Ergebnis in ASCII konvertieren, interpretieren wo das Komma hin muss und ausgeben. In deinem Fall wäre der Faktor 10000. Der Wandlerwert mal 49 ist hinreichend genau. Die ersten zwei Wandlerergebnisse schmeist du weg. Merkst dir ggf. eine Rundung wenn >= ,0050. Dann gibst Du zwei stellen aus (rechts nach links), ein Komma, dann den Rest ? Auch das ist eine Form der interpretierten Ganzzahldarstellung. Wie man das umsetzt um nicht jedesmal das Rad neu erfinden zu müssen? Eine Reihe von Standardroutinen wie im ersten Teil meiner Antwort angedeutet.
Hmmmm..... viel verwirrung wo keine sein müsste .-) So wie ich das kenn erreicht der ADC seinen max Wert 1023 = 10bit wenn am Input genau Vref anliegt ergo Vref auf 5,12 Volt dann ein kleiner links shift und Anzeigen Das man da ein bit verliert stört bei 2LSB genauigkeit nu wirklich nicht Umess=(CONV/RES)*Vref Phagsae
Achtung! Vref darf nicht größer asl AVcc sein. AVcc widerum darf nicht größer als Vcc+0.3V sein. hast also nochmal glück. AVcc=Vref=5,15V sollte klappen. dann musste den werd nur noch /2. Oder mal 5/10 (d.h. mal 5 und dann das komma verschieben. geht bestimmt besser, wenn der AVR keine division unterstützt)
Hi, wie wäre es mit einfachem Dreisatz? AdWert 500 AdWert 25 ------------------ = (ca.) ---------------- 1024 51 Ich weiss, man kann es sicherlich genauer machen, aber: Kann man mit seinem Aufbau auf einem Millivolt genau messen? Meisst befinden sich noch irgendwelche Hardwarefilter im Meßzweig und einen ungefilterten (Software) Wert sollte man ohnehin nicht verarbeiten. Wenn es genauer sein soll, kann man ja für die Berechnung auf (long) casten, dann kann man auch mit 1023 anstatt mit 1024 rechnen... Bis dann, Ingo!
na das ist doch wurscht! multiplikation sollte einfacher sein als dreisatz (zumal das dasselbe ist, wenn man's umstellt).
Vielen Dank für den Tip, geht prima mit der Feinabstimmung der Spannungsmessung durch Veränderung von Aref. Ich stimme die Versorgungsspannung ab und verbinde Aref und AVCC mit VCC. Frage: wie kann ich die Meßwerte stabilisieren, pendeln immer um ca 20mV hin und her (z.B von 00,69 V bis 00,71V)? mfg Helmut
dazu steht was im datenblatt der avrs... es gibt z.B. die möglichkeit, den avr während der messung in den sleep mode zu schalten, dann stört der die messung 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.