ADC mit Mega88.

Gast #670398
Lesenswert?

Hallo zusammen!
Befasse mich zum ersten mal mit dem ADC des Mega88 und habe dazu einige 
Fragen:

Ich möchte bei jedem Zählerüberlauf im Counter0 einen Messwert an einem 
bestimmten PIN des µC einlesen lassen.

Dazu habe ich bereits aus dem Datenblatt entnommen, dass ich im ADC dies 
einstellen kann und bei jedem Zählerüberlauf der ADC den Wert misst. Nur 
funktioniert das bei mir nicht. Mir ist aufgefallen, dass wenn ich z. B. 
mit lds r16, (1<<ADEN)|(1<<ADATE)... sts ADCSRA, r16 keine Bits im 
jeweiligen Register gesetzt bekommen. Scheint so als würden meine 
Befehle im Sande verlaufen und nicht berücksichtigt.
Wenn ich per Hand das ADEN und ADSC bit setze bekomme ich sofort den 
richtig gemessenen Wert. Aber alle anderen bits die ich in ADCSRA vorher 
gesetzt habe erscheinen nicht.

Hier mal mein bisheriger Code. Ist nur die Initialisierung. Müsste ja 
dann wenn der Interrupt ausgelöst wird in einer Schleife die Werte noch 
sichern, oder?

lds r16, (1<<REFS0)
sts ADMUX, r16
lds r16,(1<<ADEN)| (1<<ADATE)|(1<<ADPS2) | (1<< ADPS1)|(0<<ADPS0)
sts ADCSRA, r16
lds r16, (1<<ADTS2)|(1<<ADTS2)|(1<<ADATE)
sts ADCSRB, r16

So müsste doch eigentlich alles passen, oder? Mehr habe ich dem 
Datenblatt bisher nicht entnehmen können.

Vielen Dank schon mal für jede Anregung!!

gruss

p.s. der zähler läuft richtig und aktiviert.
#670412
Lesenswert?

> lds r16, (1<<REFS0)
Das ist doch Murks. lds lädt ein Byte von der angegebenen Adresse aus 
dem SRAM in das Zielregister. (1 << REFS0) wird da als Adresse 
interpretiert.

Du willst doch einen konstanten Wert in r16 laden. Und das geht mit ldi 
und nicht mit lds...

Das selbe gilt für die beiden anderen lds.
Gast #670421
Lesenswert?

vielen Dank für deine Antwort!
hatte das lds noch im kopf von gestern, da man beim mega88 ab einem 
gewissen bereich ja nicht mehr mit in/out usw. arbeiten kann.
jetzt ist es mir wie schuppen von den augen gefallen...
vielen dank nochmal!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren