В такой конфигурации вроде работает:
Код
#define ADC_VREF_TYPE 0x00
// ADC initialization
// ADC Clock frequency: 1000,000 kHz
// ADC Voltage Reference: AVCC pin
// ADC Bipolar Input Mode: Off
// ADC Reverse Input Polarity: Off
// ADC Auto Trigger Source: None
// Digital input buffers on ADC0: On, ADC1: Off, ADC2: Off, ADC3: Off
DIDR0&=0x03;
DIDR0|=0x1C;
ADMUX=ADC_VREF_TYPE;
ADCSRA=0x84;
ADCSRB&=0x5F;
// Read the 8 most significant bits
// of the AD conversion result
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input|ADC_VREF_TYPE;
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
А в такой ничего не считывает из АЦП:
Код
#define ADC_VREF_TYPE 0x20
// ADC initialization
// ADC Clock frequency: 1000,000 kHz
// ADC Voltage Reference: AVCC pin
// ADC Bipolar Input Mode: Off
// ADC Reverse Input Polarity: Off
// ADC Auto Trigger Source: None
// Only the 8 most significant bits of
// the AD conversion result are used
// Digital input buffers on ADC0: On, ADC1: Off, ADC2: Off, ADC3: Off
DIDR0&=0x03;
DIDR0|=0x1C;
ADMUX=ADC_VREF_TYPE;
ADCSRA=0x84;
ADCSRB&=0x5F;
// Read the 8 most significant bits
// of the AD conversion result
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input|ADC_VREF_TYPE;
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}
В программе только считываю значение с АЦП в переменную.
Код
while (1)
{
// Place your code here
B=read_adc(0);
#asm("wdr")
}
Так вот такое ощущщение, что при левом выравнивании значение в регистрах АЦП просто не появляется... Может кто сталкивался с таким...