[an error occurred while processing this directive]
|
Какие есть тонкости переключения каналов у ADC? Может им времени сколько-то надо, чтобы переключиться?
В теле while(1)
оцифровываю последовательно 4 канала,
переключаю каналы последовательно между землёй GND и внутренним источником на 1,23В. Прерывания запрещены.
хочу в результате получит 0В; 1,23В; 0В; 1,23В;
а получаю какую-то ерунду:
(байты 2-5)
1 0 0 123 0
1 123 0 0 123
1 0 0 0 123
1 123 0 0 123
1 0 0 123 123
1 123 0 0 123
1 0 0 0 0
и т.д.код здесь:
.....
void ADC_Init()
{ADCSR = (1 << ADEN)|(101 << ADPS0); // 2,56В опоры
}unsigned char ADC_Conversion()
{
ADCSR |= (1 << ADSC); // старт
while(!(ADCSR & (1 << ADIF))) ; ждем
return ADCH;
}
...
void main()
{
....
while(1)
{
Query[0] = USART_Receive(); // ждем "1"
Answer[0] = Query[0]; // отправляем обратно "1"
USART_Transmit(Answer[0]);
ADMUX = (3 << REFS0)|(1 << ADLAR)|(0x0F << MUX0); // GND
HMC1001_Pulse(1);// ~5 мкс
Delay30mcs();~30 мкс
Answer[1] = ADC_Conversion();USART_Transmit(Answer[1]);
ADMUX = (3 << REFS0)|(1 << ADLAR)|(0x0E << MUX0); // 1,23В
HMC1001_Pulse(2); // ~5 мкс
Delay30mcs(); // ~30 мкс
Answer[2] = ADC_Conversion();
USART_Transmit(Answer[2]);
ADMUX = (3 << REFS0)|(1 << ADLAR)|(0x0F << MUX0); // GND
HMC1001_Pulse(3);
Delay30mcs();
Answer[3] = ADC_Conversion();
USART_Transmit(Answer[3]);
ADMUX = (3 << REFS0)|(1 << ADLAR)|(0x0E << MUX0); // 1,23В
HMC1001_Pulse(4);
Delay30mcs();
Answer[4] = ADC_Conversion();
USART_Transmit(Answer[4]);
}}
E-mail: info@telesys.ru