Forum: Mikrocontroller und Digitale Elektronik ADC mit Mega88.


von markus (Gast)


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.

von Johannes M. (johnny-m)


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.

von Johannes M. (johnny-m)


Lesenswert?

> lds r16, (1<<ADTS2)|(1<<ADTS2)|(1<<ADATE)
Und das macht auch nicht viel Sinn. Das ADATE steht im ADCSRA (wo es ja 
auch weiter oben korrekt gesetzt ist) und nicht im ADCSRB. Und das ADTS2 
zweimal setzen macht es auch nicht besser.

von markus (Gast)


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!

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.