Hallo,
ich will gerade meinen ADC von meinem ATmega 168 in Betrieb nehmen.
Mein Programm sieht so aus:
Code:
void AdcInit(void)
{
   ADMUX=0;
   ADMUX|=0x00;      // VREF=AREF Pin
   ADMUX|=0x01;      // Kanal AIN1
   ADCSRA=0;
   ADCSRA|=0x04;     // Prescaler clk/16REFS 6 92
   ADCSRB=0;
   ADCSRA|=0x80;     // Enable
}

void AdcStart(void)
{
   ADCSRA|=0x40;     // Start
}

u8 AdcReady(void)
{
   if( (ADCSRA&0x40)==0x40 )
   {  return(1);  }
   else
   {  return(0);  }
}

s16 main(void)
{

   AdcInit();

   while( 1 )
   {
      AdcStart();
      while( AdcReady()==0 )
      {  ;  }
   }
}
Das Ergebnis werte ich mit meinem Emulator aus. Darum fehlt das Auslesen des ADC-Data-Registers.
Bei der Hardware habe ich einfach GND(8 ) mit AGND(22) und VCC(7) mit AVCC(20) und AREF(21) verbunden.
Ich hab jetzt mal AIN1(13) auf GND gelegt und erwartet, dass der ADC 0 liefert. Ich bekomme aber immer 0x01D2 (+-2).
Hab ich was übersehen?

Drew

PS: ich hab auch schon mal DIDR0 alle auf 1 gelegt. Das hat aber auch nicht viel gebracht...