www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Mit ADC gemessenen Wert Anzeigen lassen.


Autor: Dennis Brücke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So,

nachdem das mit dem ADC jetzt klappt und ich auch die Werte in Dezimal
auf meinem Display sehe, brauche ich jetzt irgenwie mal ne
Ansatzhilfe... :(

Wie kann ich meinen Wert beispiel
7,6Volt der per Opamp um 0,303 Verstärkt wird. Jetzt auf mein Display
bringen. ? Theoretisch am Taschenrechner geht es ja...

(AREF / 255) * ADCWert
----------------------              = Angelegte Spannung
       0,30303030 (OpAmp Faktor)

Aber wie rechne ich das jetzt in ASM so um das ich mir das ganze am LCD
Display anzeigen lassen kann.

7,6 Volt in der Anzeige...

Bitte um Hilfe Gruß Dennis

P.S.:
ASM
ATMega8 bei 3,6864 Mhz

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du musst ein paar Werte geschickt zusammenfassen:
ADC*(ARef/256)/0,3030303
=
ADC/(0,30303*255/ARef)
=
ADC/30 (für 2,56V VRef)

Autor: Olaf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du rechnest entweder mit Fliesskommazahlen, brauchst einen fetteren
Prozessor und zeigst so aller Welt da du keine Ahnung von Mathe hast.

Oder da du besinnst dich auf Festkomma und Bruchrechnen ueberlegst dir
welche Genauigkeit du wirklich brauchst.
Ausserdem schadet es nicht sich vorher ein paar Gedanken um
Wertebereiche und Registergroessen zu machen und notfalls die Formeln
etwas umzuformen damit Zahlen nicht zu gross (ueberlauf) oder zu klein
(ungenauigkeit) werden.

Olaf

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Am einfachsten und schnellsten könnte man das so machen:

 1/0,3030303 (Verstärkungsfaktor) = 3,3.
 Als Integer also 33 als Multiplikator.
 Also ADC-Wert * 33
 in ASM:
  ldi r16,33
  mul ADCWert,r16

  In r0 und r1 ist dann das Ergebnis von 0 bis 8415 (0 bis 8,415).
  Das schickst Du dann zu Deiner Binär-BCD-Routine für 16Bit-Zahlen
  die vor den letzten 3 Stellen ein Komma einfügt.
  Oder Du teilst das Ergebnis mittels DIV1616 aus einer Atmel-Note
  vorher durch 100 für Werte von 0 bis 84 (0 bis 8,4).

Gruß
Andi

Autor: Dennis Brücke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Andi &@all ,

danke Dir für Deine Hilfe. Jetzt hängt es bei mir leider an der bin2bcd
routine... :( Ich habe bisher immer nur die 8 Bit Variante der Routine
gemacht um halt z.b. TempSensor DS18S20 auf meinDisplay auszugeben...
finde nur leider nichts in ASM für 16bit BIN -> BCD

Vieleicht hast Du da auch noch einen Tip für mich.

Gruß Dennis

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist im Prinzip einfach:
Eine Schleife, die solange 10000 (natürlich zerlegt in die einzelnen
Bytes) abzieht, bis der Wert <0 ist. Dann hast du die Anzahl an
Durchläufen-1 für die 10000er Stelle.
Dasselbe machst du auch für die 1000er und die 100er Stelle.
Die 10er und 1er Stelle lässt sich mit einer Division durch 10 und den
Rest berechnen.

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast doch schon ein Bin2BCD für 8Bit gemacht.
Erweiter es halt einfach auf 16Bit-Zahlen bzw. nimm Deine 8Bit-Version
für max. 3 Ziffern als Vorlage und mach daraus eine 16Bit-Version mit
max. 5 Ziffern und Kommastelle dazwischen.
Ich könnte Dir jetzt was fertiges für 8Bit- bis 32Bit-BCD geben aber
jeder hat doch selbst ein bißchen Grips.
Es kommt nicht nur drauf an, die ASM-Befehle zu kennen sondern auch
darauf, was man mit denen für Algorithmen daraus machen kann.
Ansonsten ist im Ordner Appnotes von AVR-Studio eine .asm mit Bin to
BCD-Algorithmen

Gruß
Andi

Autor: Dennis Brücke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Andi,

danke Dir auf jedenfall ;) So bin2bcd geht, hatte mal wieder einfach
nur einen befehlsdreher... :(

Womit ich aber immer noch einen Denkfehler habe ist der
Multiplikationsfaktor von 33 der bezieht sich ja nur auf den
Verstärkungsfaktor vom OpAmp aber was ist mit meinem Bezugspunkt von
AREF ? Wie kann ich den Rechnerisch mit einbinden ? oder ist der in den
33 drin ? Grübel jetzt schon zu zweit an deinem Vorschlag. Funktionieren
tut er Prinzipiell, nur haut der wert nicht genau hin.
Und ich kann es halt in der "Theorie" noch nicht nachvollziehen...

Bitte noch mal um ne kleine Hilfestütze ;)

Gruß Dennis

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, weiß auch nicht, wie ich auf eine Höchstspannung von 8,4V
gekommen bin.
Im Prinzip mußt Du nur wissen, welche Spannung bei einem bestimmten
ADC-Wert ist um den Multiplikator auszurechnen.
Sagen wir mal bei einem ADC-Wert von 255 sind es 12V.

 12 / 255 * 1000 = 47,05

Wenn man das ohne Kommastellen zurück rechnet kommt man auf
255 * 47 = 11985 also 11,985V.

In ASM gibt es leider nicht von Haus aus Fließkommaberechnungen also
machen wir einfach ADC-Wert mal 47.
Ist zwar nicht so genau aber mit entsprechender Multiplikation vorher
und/oder Division hinterher kann man das dann auch genauer
hinbekommen.
Vielleicht kennt ja ein Bitschieber-Spezi noch was gutes.

Laß Dir jetzt einfach noch mal einen ADC-Wert am LCD anzeigen und miß
dann die Spannung und gib es hier mal durch.
Am besten bei einen ADC-Wert von knapp unter 255 wegen Überlauf.

Gruß
Andi

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.