www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LCD-Anzeige umechnen


Autor: Helmut Hofmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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??

Autor: Lothar (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Lothar (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Lothar (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry,

die .PDF scheinen nicht rüber gekommen zu sein.
Will have a look.

Autor: Phagsae (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Lothar (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Sorry,
nur Test ob Anhang rüber kommt.

Autor: Jonas Diemer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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)

Autor: Helmut Hofmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
test.doc ist rübergekommen, ist jedoch nicht lesbar

Helmut

Autor: Ingo Busker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: Jonas Diemer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
na das ist doch wurscht!
multiplikation sollte einfacher sein als dreisatz (zumal das dasselbe 
ist, wenn man's umstellt).

Autor: Heli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Jonas Diemer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.