Hallo,
Lothar Miller schrieb:
> subguru schrieb:
>> Ich ging davon aus er setzt mir die Bits so wie ich sie angebe.
> Er setzt sie schon, aber er lässt die anderen Bits gesetzt.
> So wäre das besser:
>
1 | > case 0x06: adc0_value = ADCW;
|
2 | > ADMUX = 0x07; break;
|
3 | > case 0x07: adc1_value = ADCW;
|
4 | > ADMUX = 0x06; break; // diese Zeile könntest du sogar
|
5 | > ganz weglassen ;-)
|
6 | > default: ADMUX = 0x06; break;
|
7 | >
|
auch diese Lösung führt nicht unbedingt zum gewünschten Ergebnis,
in ADMUX sind noch andere Bits, REFS0, REFS1 und ADLAR beim Mega8 als
Beispiel.
Die würden dann mit auf 0 gesetzt...
Richtig wäre:
default: ADMUX = (ADMUX & 0xF8) | 0x06; break;
Noch besser wäre eine Maske zu definieren:
#define MUX_MASK 0b11111000 // MUX-Bits auf 0
#define MUX6 0b00000110
#define MUX7 0b00000111
und dann
default: ADMUX = (ADMUX & MUX_MASK) | MUX6; break;
oder ähnlich.
Die Definitionen ins passende Headerfile gepackt und man hat bei
Umbauten nur eine Stelle zum Ändern.
PS: meine Fehler bitte durch C-Programmierer korrigieren,
ich mache immernoch sehr wenig C und viel Assembler...
Gruß aus Berlin
Michael