Forum: Mikrocontroller und Digitale Elektronik ADC in Assembler


von nesso (Gast)


Lesenswert?

Hallo
ich bin nochn neu in sachen assembler und AVR und brauche mal hilfe.
ich will bei meinem mega16 nen wert des AD_wandlers in  ein register,
zb. r20 laden. Wie mache ich das?
Weil mit den codebeisp. im datenblatt komm ich nicht weiter.


mfg
nesso

von johnny.m (Gast)


Lesenswert?

Wenn Du mit 10 Bit Auflösung arbeitest, kriegste das Ergebnis eh nicht
in ein einzelnes Register.

Bsp.:
in r20, ADCL
in r21, ADCH

Wichtig: erst das Low-Byte lesen (ADCL)!

von luxx (Gast)


Lesenswert?

ahh ok
aber brauch ich da mehr als einen IO als eingang?
und wie is des mit der Vref muss die>= zu messende V sein?
oder dient das dem uC nur als Mess hilfe?

von johnny.m (Gast)


Lesenswert?

VREF ist die Referenzspannung, auf die der Messbereich des ADC
abgebildet wird (1 LSB -> VREF/1024 beim 10-Bit-ADC). VREF muss also
größer sein als die zu messende Spannung. Wenn Du nur eine Spannung
messen willst, brauchste auch nur einen Analog-Eingang.

von luxx (Gast)


Lesenswert?

danke. aber was ist LSB?

von johnny.m (Gast)


Lesenswert?

Das 'Least Significant Bit', also das niederwertigste Bit (Bit Nr. 0).
Das ist die kleinste Stufe, die mit einer Binärzahl darstellbar ist,
also der kleinste Wert, den der Wandler auflösen kann.

Du solltest Dich aber wirklich mal mit den Grundlagen
auseinandersetzen:-)

Gruß

Johnny

von luxx (Gast)


Lesenswert?

ja ok das lsb das niedriegste bit ist weiß ich ich dachte hier heißt es
was anderes, weil "1 LSB -> VREF/1024 beim 10-Bit-ADC" kam mir
komisch vor was hat das mit dem lsb zu tun und für was die 1?

von johnny.m (Gast)


Lesenswert?

Ich war zu faul, "Ein LSB" zu schreiben, deshalb habe ich "1 LSB"
geschrieben. Sorry, wenns verwirrt hat.

Das LSB ist die kleinste Darstellbare Zahl (Entspricht einer '1').
Wenn man eine Binär-Zahl mit n Bit hat, dann kann man mit dieser Zahl
2^n Zustände darstellen. Ein A/D-Wandler tut nix anderes als einen
analogen Messwert digital auf seinen Wertebereich abzubilden. Der
Wertebereich eines A/D-Wandlers mit 10 Bit Auflösung sind also die mit
10 Bit darstellbaren Zahlen (0...1023). Um dem ADC zu sagen, welcher
Wert der größten darstellbaren Zahl entspricht, wird die
Referenzspannung benötigt. Diese wird in 2^n (also bei 10 Bit 1024)
Schritte aufgeteilt. Vref / 2^n oder hier speziell Vref / 1024 ist
damit ein LSB, also der kleinste darstellbare Wert.

Ich hoffe das war jetzt verständlicher. Hat mir meine Schreibfaulheit
nix genützt...

von Conlost (Gast)


Lesenswert?

Hallo,

ein kleiner Tip noch am Rande, für die weitere Verarbeitung
des Ergebnisses ist es besser ein 16-Bit-Registerpaar zu nehmen.
Davon gibt es 4 Stück im AVR.
Es sind die Register:
r24-r25,(ohne Namen), r26-r27(XL-XH), r28-r29(YL-YH) und
r30-r31(ZL-ZH).

Es grüsst
Arno

von gbl (Gast)


Lesenswert?

Hallo,
ich probiere gerade einen Wert mit einem Tiny15 einzulesen.
Allerdings macht der AVR nicht das was er soll.
Ich möchte die Versorgungsspannung als Referenzspannung benutzen,
den ADC starten und nach einer kurzen Pause den Wert auslesen.
Nach 25ms sollte der ADC doch fertig sein oder kann ich das so nicht 
realisieren ?



reset:  sbi  PORTB,TxD  ;Init port pins
    sbi  DDRB,TxD
    sbi admux,mux1   ;Eingang 2 wählen

    sbi adcsr,adps0
    sbi adcsr,adps2  ;Teiler durch 8
    sbi adcsr,aden  ;ADC aktivieren
    rcall pause    ;25ms

forever:
    sbi adcsr, adsc   ;Start Wandlung
    rcall pause     ;kurz warten
    in txbyte,adcl   ;LowByte einlesen
                usw....

von Bernhard S. (bernhard)


Angehängte Dateien:

Lesenswert?

Ich stell Euch mal ein kleines ADC-Beispiel zur Verfügung
(Initialisierung + Messen).

Es ist zwar für einen ATmega8 geschrieben, kann aber problemlos auf 
einen anderen µC angepasst werden.

Bernhard

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.