drew
22.05.2008, 18:58
Hallo,
ich will gerade meinen ADC von meinem ATmega 168 in Betrieb nehmen.
Mein Programm sieht so aus:
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...
ich will gerade meinen ADC von meinem ATmega 168 in Betrieb nehmen.
Mein Programm sieht so aus:
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...