AVR: 10 bit ADC-Wert in eine 16 bit variable lesen

#2459596
Lesenswert?

ik schrieb:
> kann man in c den 10 bit ADC-Wert in eine 16 bit variable lesen ohne hin
> und her zu verschieben?

C kennt keine 10-Bit Variablen. Das ADC-Ergebnis liegt in 2 Registern, 
also in zwei Bytes, bildet also einen 16-Bit Wert (bei dem Werte über 
1023 nicht vorkommen). Du musst also nur die beiden Bytes zu einem Int 
zusammensetzen. Da wird nix verschoben, jedenfalls nicht bitweise über 
die CPU.

Aber frag' doch mal die Doku zu AVRGCC, ich halte es für sehr 
wahrscheinlich, dass der Compiler das selbst macht, wenn Du einen (in C 
vereinbarten) Namen für den ADC (als Alias-16-Bit-Register) angibst. 
Beim Timer1 ist das statt TCNT1H und TCNT1L TCNT1, beim ADC geht das 
glaube nicht so einfach, da ADC ein Schlüsselword in ASM ist.

...
Gast #2459612
Lesenswert?

uint16_t foo = ADCW;

> UInt16

uint16_t bevorzuge ich, da es ein Standard Integer Typ der avr-libc ist
http://www.nongnu.org/avr-libc/user-manual/group__avr__stdint.html

> ADC

Solche Variablennamen vermeide ich um den Quelltext besser lesbar zu 
machen. Alles groß sind bei mir Makronamen z.B. auch Makronamen für SFRs 
bei AVRs.

> ADCL, ADCH

Bei manchen AVR sind die aufeinanderfolgend und als 16-Bit-Wert ADCW 
zugänglich. Der Compiler kümmert sich dann um die richtige 
Zugriffsreihenfolge, die man beim Einzelzugriff selbst richtig machen 
muss.

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