[an error occurred while processing this directive]
ATMEGA8. Балшой паласатый MUX (+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Настя 09 октября 2005 г. 21:55

Какие есть тонкости переключения каналов у 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: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru