Forum: Mikrocontroller und Digitale Elektronik Atmega168 ADC lässt sich nicht starten


von Honki (Gast)


Lesenswert?

Hallo,

ich hab da ein merkwürdiges Problem.
Ich möchte den ADC des Atmega168 über das Bit ADSC, aber leider wird bei 
meiner Programmierung nicht Bit6 sondern Bit1 (ADPS1) vom ADCSRA 
Register auf 1 gesetzt. Habs mir im Simulator (AVR Studio) angeschaut 
und kanns mir nicht erklären.

im temp steht 0x85, dann wird angeblich ADSC gesetzt, danach seht 0x87 
drin, sehr komisch

Hab auch spassenshalber mal Bit 1 gesetzt um zu Schauen ob es da 
umgedreht ist, aber da kommt auch 0x87, is ja uch richtig so.

;Initialisierung
ldi     temp, (1<<REFS0) | (1<<MUX1) | (1<<MUX2)
sts     ADMUX, temp
ldi     temp, (1<<ADEN) | (1<<ADPS2) | (1<<ADPS0)
sts     ADCSRA, temp

;ADC Starten
lds temp, ADCSRA
sbr temp, ADSC
sts ADCSRA, temp

sbi funktioniert nicht wegen der Out of range Geschichte.

Habt ihr ne Idee?

Gruß

von Uwe (Gast)


Lesenswert?

sbr setzt bits in Register "BITS". Also nicht nur eins. Mußt du wie bei 
ldi machen. Instructionset im Datasheet mal angucken unter Spalte 
Operation.

von spess53 (Gast)


Lesenswert?

Hi

'SBR' benötigt eine Bitmaske.

>sbr temp, ADSC -> sbr temp, 1<<ADSC

MfG Spess

von Honki (Gast)


Lesenswert?

Uwe schrieb:
> sbr setzt bits in Register "BITS". Also nicht nur eins. Mußt du wie bei
> ldi machen. Instructionset im Datasheet mal angucken unter Spalte
> Operation.

So wird ein Schuh draus.

lds temp, ADCSRA
sbr temp, (1<<ADSC)
sts ADCSRA, temp

Danke.

von Honki (Gast)


Lesenswert?

Noch nen Frage zu den ADC Eingängen.

Ich benutze PC0-PC5 als digitale Eingänge und hab nun PC6 als ADC (was 
anderes kanner ja auch nicht) in Verwendung. Was geschieht wenn ich über 
"in temp, PINC" die Eingänge von PortC einlese?

Was steht in temp wenn an PC0-PC5 ne 1 ansteht am ADC nen Spannungn von 
5 V liegt. Beinflusst der ADC den Inhalt von PINC oder ist der ADC-Pin 
ausgeblendet?

Gruß

von spess53 (Gast)


Lesenswert?

Hi

>Ich benutze PC0-PC5 als digitale Eingänge und hab nun PC6 als ADC (was
>anderes kanner ja auch nicht) in Verwendung. Was geschieht wenn ich über
>"in temp, PINC" die Eingänge von PortC einlese?

PC6 ist kein ADC-Eingang. Ohne gesetzte RSTDISBL-Fuse ist das der 
Reset-Eingang. ADC6/7 gibt es nur beim 32pol. TQFP/MLF-Gehäuse.

MfG Spess

von Honki (Gast)


Lesenswert?

>sADC6/7 gibt es nur beim 32pol. TQFP/MLF-Gehäuse.

Naja, was meinst Du warum ich danach frage. ;-)

Also, kann der Wert von PINC größer werden als 0x3F wenn an ADC6 oder 
ADC7 was dran ist oder nicht?

Gruß

von spess53 (Gast)


Lesenswert?

Hi

ADC6/7 gehören nicht zu PortC. Damit erübrigt sich die Frage.

MfG Spess

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.