Hallo,
ich möchte eine Spannung (0 bis 5V) aus dem Netzgerät mit einem Attiny26
Mikrocontroller (ADC Wandler) messen. Da ich keine Erfahrungen
bezüglich Mikrocontroller habe, habe ich bereits das Datenblatt (ADC)
durchgelesen und auch schon viel gegoogelt. Gibts eventuell Quellcode
(Assembler), welche ich mir durchlesen könnte. Kann jemand mir Tipps
geben wie ich am besten an diese Aufgabe herangehen soll?
Danke im Voraus
Danke ich habe es mir durchgelesen.Ich habe bis jetzt nicht ganz
verstanden warum ich ein ADSC Bit brauche. Kann ich diesen Bit (Bit 6)
auf Null setzen?
Hi
>Ich habe bis jetzt nicht ganz>verstanden warum ich ein ADSC Bit brauche.
Damit startet man eine Messung und stellt fest, wann der ADC damit
fertig ist. Eigentlich eines der wichtigsten Bits.
MfG Spess
Susi schrieb:> Ich meine was ist der Unterschied zwischen die beiden codes
Keiner.
Beides ist falsch, da es kein ADSCRA-Register gibt.
Du meinst das Bit6 (ADSC) im ADCSR-Register.
Das zweite Beispiel startet den ADC, das erste Beispiel tut gar nichts,
allenfalls aktiviert es, sofern nicht schon geschehen, über Bit 7 den
ADC.
Vielen dank für die Antwort.
Heißt das, (2.) wenn ich den Bit 6 im ADSCR Register nicht setze
(ADSC=0), keine Messung vorgenommen wird. Muss ich immer diesen Bit
setzen (ADSC=1)?
Susi schrieb:> Muss ich immer diesen Bit setzen (ADSC=1)?
So wird es wohl sein, wenn auf S.96 im Datenblatt steht: "A conversion
is started by writing a logical one to the ADC Start Conversion bit,
ADSC. ".
Susi schrieb:> Muss ich immer diesen Bit> setzen (ADSC=1)?
Ja, das Rücksetzen erledigt der ADC selbst, als Zeichen dafür, dass die
Messung fertig ist. Du kannst und sollst das per Software nicht machen.
Es gibt da auch noch die Möglichkeit, dass der ADC nur einmal über das
ADSC Bit angestossen wird, und dann fortlaufend von selbst wandelt.
Dieser Modus wird über Bit5 ADFR angewählt.
Susi schrieb:> ich möchte eine Spannung (0 bis 5V) aus dem Netzgerät mit einem Attiny26> Mikrocontroller (ADC Wandler) messen.
Ich würde dir auch empfehlen, diese Spannung mittels Spannungsteiler
etwas zu reduzieren, z.B. auf 4V, damit du auch bei Überspannung noch
gültige Messwerte bekommst.
Auf der Seite von AVR- Mikrocontroller. Link:
http://www.mikrocontroller.net/articles/AVR-Tutorial:_ADC
Code:
; ADC initialisieren: ADC0, Vcc als Referenz, Single Conversion,
Vorteiler 128
ldi temp1, (1<<REFS0) ; Kanal 0, interne
Referenzspannung 5V
out ADMUX, temp1
ldi temp1, (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0)
out ADCSRA, temp1
ist ADSC im ADSCR Register auch nicht gesetzt. Ist da ein Fehler
unterlaufen? Da im Datenblatt steht, dass ADSC gesetzt werden soll.
Mfg
Susi schrieb:> ist ADSC im ADSCR Register auch nicht gesetzt. Ist da ein Fehler> unterlaufen? Da im Datenblatt steht, dass ADSC gesetzt werden soll.
Jo, das ist ja auch nur die Voreinstellung. Ein paar Zeilen darunter
wird der ADC dann per Setzen von ADSC gestartet:
1
; neuen ADC-Wert lesen (Schleife - 256 mal)
2
3
sample_adc:
4
sbi ADCSRA, ADSC ; den ADC starten
5
6
wait_adc:
7
sbic ADCSRA, ADSC ; wenn der ADC fertig ist, wird dieses Bit gelöscht
8
rjmp wait_adc
und per Abfrage des ADSC Bits wird solange gewartet, bis der ADC fertig
ist, denn das Bit wird vom ADC gelöscht, sobald die Messung beendet ist.
Dann darf aus den Ergebnisregistern der neue Messwert gelesen werden.
Denke daran, das die Registerbezeichnungen und auch manchmal die
Bitpositionen zwischen verschiedenen AVRs variieren, du nimmst also die
Bezeichnungen aus dem Datenblatt, was für deinen MC gilt.
Matthias S. schrieb:> ... du nimmst also die Bezeichnungen aus dem Datenblatt, was für> deinen MC gilt.
Und wenn dann irgendetwas hakt, kann es - auch wenn das sinnvollerweise
nicht passieren sollte - ggf. auch an Abweichungen zwischen Datenblatt
und prozessorspezifischer Header-Datei liegen.