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


von Dennis Brücke (Gast)


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

von Benedikt (Gast)


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)

von Olaf (Gast)


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

von Andi (Gast)


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

von Dennis Brücke (Gast)


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

von Benedikt (Gast)


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.

von Andi (Gast)


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

von Dennis Brücke (Gast)


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

von Andi (Gast)


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

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
Noch kein Account? Hier anmelden.