Hallo Peter,
Du hast vergessen den AD Wandler zu initialisieren; -(
Der AD Wandler muss in main() zuerst konfiguriert werden:
Am Besten siehst Du Dir das Example Programm ADC8535.c (EXAMLES)an.
Studier das Programm gleichzeitig mit dem Datenblatt und lese alles
durch bis Du genau jede Programmzeile die sich mit dem Gebrauch des
AD-Wandlers befasst, verstehst.
Grundsaetzlich muessen alle Peripherien vor dem Einsatz immer
konfiguriert werden. Zum BEispiel:
// ADC initialization
// ADC Clock frequency: 57.600 kHz
// ADC Voltage Reference: AREF pin
// ADC High Speed Mode: Off
// ADC Auto Trigger Source: None
// Only the 8 most significant bits of
// the AD conversion result are used
// Select ADC input 0
ADMUX=ADC_VREF_TYPE;
ADCSRA=0x8E;
SFIOR&=0xEF;
In vielen Programmen wird der AD-Wandler am Besten im Interruptbetrieb
verwendet um den CPU nicht waeherend der Messung aufzuhalten.(Ist wie Du
im Beispiel siehst nicht schwierig)
Falls keine Interrupts gewuenscht sind, dann musst Du eine bestimmte
Zeit die von der Clock abhaengig ist, warten.
Die AD-Konvertierung muss normalerweise immer mit einem Befehl gestartet
werden. Im einfachsten Fall als Beispiel:
// Starte the first AD-Messung:
ADCSRA|=0x40;
Warten bis die AD Wandlung fertig ist oder pollen
delay_ms(20); (Normalerweise nur ein paar zig us)
Resultat lesen:
Resultat = ADCW;
Das ist im Prinzip was notwendig ist. In der Praxis ist der
Interruptbetrieb am Besten, da der CPU waeherende der Messung keine Zeit
vergeuden muss um auf das Resultat zu warten. Der Wandler kann in
"Single
Conversion Mode" und im "Auto Trigger" Modus betrieben werden.
(Steht alles genau im Datenblatt)
Sonst wuerde ich Dir noch raten die einschlaegigen Tutorials hier im
Formum durchzugehen.
Viel Erfolg!
MFG,
Gerhard