mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ADC in Assembler


Autor: nesso (Gast)
Datum:

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

Autor: johnny.m (Gast)
Datum:

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

Autor: luxx (Gast)
Datum:

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

Autor: johnny.m (Gast)
Datum:

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

Autor: luxx (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke. aber was ist LSB?

Autor: johnny.m (Gast)
Datum:

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

Autor: luxx (Gast)
Datum:

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

Autor: johnny.m (Gast)
Datum:

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

Autor: Conlost (Gast)
Datum:

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

Autor: gbl (Gast)
Datum:

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

Autor: Bernhard S. (bernhard)
Datum:
Angehängte Dateien:

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

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.