mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ADC Wert am 2x16 Display ausgeben


Autor: Bernhard Bauer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo allerseits,

ich bin nicht mehr ganz Anfänger in Sachen AVR Programmierung und
beschätige mich jetzt mit der Spannungsmessung und Ausgabe an einem
Display (2x16, AtMega8). Daher meine Frage:

Ich habe die ADC Routine soweit, dass ich den Wert im ADCH bzw. ADCL
Register habe. Aber wie kann ich nun diesen Wert umwandeln, dass z.B.
"3,9 Volt" am Display erscheint.
Vielleicht könnte hier jemand feritge Umwandlungs und LCD Routinen
posten, die mir (und auch anderen) hilfreich sein können.

Ich wäre auch für eine stichpunktartige Beschreibung für die
Vorgehensweise des Problems dankbar.
Vielen Dank schon mal.

Gruß
Bernhard

Autor: Bernhard Bauer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fast hätte ich es vergessen: Ich programmieren in Assembler. Bitte nur
diese Codes posten, da ich die anderen Programmiersprachen wenig
beherrsche.

Autor: Jens D. (jens) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
=)
ich hoffe, du kannst mit grossen zahlen umgehen =)
also; datenblatt schauen lesen

da steht eine kleine formal
Vmess = ADCW / Vref * 1023

Autor: Oliver Gringel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Eine "Binär nach BCD"-Routine findest du hier:
http://www.avr-asm-tutorial.net/avr_de/rechnen/index.html
Routinen zur Ausgabe auf LCDs findest du hier im Forum, oder auch auf
der angegebenen Seite.

Gruß

Oliver

Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jens, deine Formel stimmt so nicht ganz. Sie müsste lauten
Vmess = ADCW * Vref / 1023

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: TravelRec. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die 10-Bit Zahl, die in den ADC-Registern steht, muß in 10-er Potenzen
zerlegt werden. Das geht schnell und einfach mit der
Subtraktionmethode. Zuerst subtrahierst Du von der Zahl 1.000, ist das
Ergebnis größer 0, dann inkrementierst Du einen Zähler, der vorher 0
war. Ist das Ergebnis <0, dann speicherst Du den momentanen Zählerwert
in einer Speicherzelle. Dieser Wert ist später die 1000er Ziffer. Dann
setzt Du den Zähler wieder auf 0 und subtrahierst 100 sooft, bis das
Ergebnis wieder < 0 wird und so weiter und so fort. Die verbleibenden
Einer werden direkt in die Speicherzelle für die Einer-Ziffern
übernommen. Um diese Einzel-Ziffern jetzt in ASCII für das Display zu
wandeln, addierst Du einfach zu jeder die 48 (dez.) und schon biste
fertig. Ein Komma schiebst Du an geeigneter Stelle als ASCII-Zeichen in
das Display, Texte wie "Volt" ebenso oder aus einer .db-Tabelle (in
Gänsefüßchen kannst Du dort direkt Text eintragen, abgesehen von
Umlauten, die gesondert codiert sind). Im Datenblatt zum Display
findest Du eine Zeichentabelle.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1 Post, 1 Lösung
Er kam, schrieb, und siegte

Mal ehrlich: Das isses doch im Groben, den Rest solltest du dir selber
ergooglen oder er-wiki-en.

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und in wenigen Tagen hat der Nächste die selbe Frage.

Wobei mir zum "Messen von Volt" (Spannungsmessung) der AVR zu schade
und zu ungenau ist. Das macht ein Billig-Digital-Multimeter viel
besser, genauer und billiger.

...

Autor: gerd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Hannes

Das ist ja grade das Schöne an der Hardware von den AVRs: Da ist alles
drin, ohne Aufpreis. Und meistens will man ja nicht nur die Spannung
messen, sondern auch was damit machen. Zum Beispiel malnehmen, oder
auch mal was schalten, oder was einstellen, u.v.a.m.

Und wenn wir schon bei Genauigkeit sind: Welches Multimeter ist schon
genauer als 10 Bit? Ich hab keins von der Sorte. Alles nur Schätzeisen.
Und in der Realität, beim Messen, klappert meist nicht nur die letzte
Stelle.

mfg
gerd

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Gerd:

Na wer die letzte Stelle des Multimeters ernst nimmt, der ist doch
selbst schuld...

Aber ich nutze den ADC des AVRs auch gerne:
http://www.brummbaerhannes.de/hannes/avr/uiwa/uiwa.html
http://www.brummbaerhannes.de/hannes/avr/schaltmo/...
http://www.brummbaerhannes.de/hannes/avr/impkorr/i...

Nur eben nicht als reines Voltmeter. Die interne Hardware habe ich
inzwischen auch schon schätzen gelernt, da rennst du bei mir offene
Türen ein. Es ist nur Schade, dass Einige diese Hardware-Features nicht
effizient nutzen können, da sie meinen, das Benutzen einer Hochsprache
erspart den Blick ins Datenblatt... ;-(

Bit- & Bytebruch...
...HanneS...

Autor: Bernhard Bauer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo nochmal,

ich habe jetzt nur noch ein Problem: Ich benutze, die interne
Referenzspannung von 2,56 Volt. Die ADC Auflösungg beträgt aber 1024,
dh. ich kann auf 2,5mV genau messen. Muß ich den ADC Wert dann nicht
irgendwie durch 4 teilen, bevor ich ihn in BCD umforme, und auf dem
Display ausgebe?
Noch eine Frage: Brauche ich für eine BCD Ziffer ein komplettes
Register, oder ist es auch möglich zwei BCD Ziffern in ein Register zu
schreiben.
Für Antworten und eine prinzipielle Vorgehensweise wäre ich sehr
dankbar.

MfG
Bernhard

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Natürlich muss der vom ADC ermittelte Wert auf den Messbereich skaliert
werden. Einige Hinweise dazu solltest du hier finden:

http://www.mikrocontroller.net/forum/read-1-241240...
http://www.mikrocontroller.net/forum/read-1-183626...

BCD als Zwischenergebnis bekomme ich garnicht, ich wandle meist gleich
in ASCII um und sende die einzelnen Zeichen sofort zum LCD.

Die interne Referenz ist zwar relativ stabil, hat aber eine starke
Exemplarstereuung (siehe Datenblatt).

...

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.