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.
> 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.
> 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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.