0 / 0 / 0
Регистрация: 04.05.2010
Сообщений: 115
|
|
1 | |
АЦП несколько каналов25.09.2010, 16:26. Просмотров 7646. Ответов 12
Метки нет Все метки)
(
0
|
|
25.09.2010, 16:26 | |
Использование нескольких каналов АЦП Большое количество АЦП каналов Проект платы аналогового реобаса на несколько каналов. Свитчер звуковых каналов |
|
0 / 0 / 0
Регистрация: 01.05.2010
Сообщений: 833
|
|
25.09.2010, 16:35 | 2 |
Какие сигналы, как часто замерять, с какой точностью?
0
|
1 / 1 / 0
Регистрация: 30.08.2010
Сообщений: 3,382
|
|
25.09.2010, 16:44 | 3 |
Есть несколько разных способов, все они более или менее грамотны. Выбор конкретной реализации зависит от задачи и от МК.
0
|
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 966
|
|
25.09.2010, 17:15 | 4 |
В чем конкретно сложность? Активируешь нужный канал и читаешь. Потом второй точно также и третий.
0
|
0 / 0 / 0
Регистрация: 04.05.2010
Сообщений: 115
|
|
25.09.2010, 17:59 | 5 |
![]() ![]()
0
|
0 / 0 / 0
Регистрация: 01.05.2010
Сообщений: 833
|
|
25.09.2010, 18:19 | 6 |
0
|
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 966
|
|
25.09.2010, 18:43 | 7 |
![]()
0
|
1 / 1 / 0
Регистрация: 30.08.2010
Сообщений: 3,382
|
|
25.09.2010, 19:12 | 8 |
Это если процессор типа Меги. Если иксмега, например, то задача решается по другому - там псевдомногоканальный АЦП.
Для меги при измерениях лучше использовать специальный режим сна, будут меньше помехи.
0
|
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 3,496
|
|
26.09.2010, 01:26 | 9 |
![]() Только надо вкурить даташит к конкретному процу и ерраты. Может оказаться, что после баловства с admux первое измерение будет фуфловым. Его результат надо проигнорировать и сделать ещё одно измерение.
0
|
0 / 0 / 0
Регистрация: 04.05.2010
Сообщений: 115
|
|
10.10.2010, 18:38 | 10 |
В общем сделал так: первое преобразование стартует после инициализации. Каналы 0,1,2. В прерывании забирается значение с АЦП, меняется канал и преобразование повторяется.
Код
unsykned char AdcBuf[3] = {0,0,0}; unsykned char AdcIndex = 0; #pragma vector = ADC_vect __interrupt void ADC_ISR(void) { ADMUX &= ~((AdcIndex)<<MUX0); // Выключаем предыдущий канал АЦП AdcBuf[AdcIndex] = ADC; // Забираем значение АЦП if (++AdcIndex >= 3) { AdcIndex = 0; } ADMUX |= ((AdcIndex) << MUX0); // Включаем следующий канал АЦП ADCSRA |= (1<<ADSC); // Стартуем преобразование }
0
|
0 / 0 / 0
Регистрация: 24.01.2010
Сообщений: 727
|
|
10.10.2010, 18:50 | 11 |
А зачем
ADMUX &= ~((AdcIndex)<<MUX0); // Выключаем предыдущий канал АЦП ... ADMUX |= ((AdcIndex) << MUX0); // Включаем следующий канал АЦП Почему бы не написать #defyme ADMUXval ((1<<ADIM)|...) ADMUX=ADMUXval|(AdcIndex<<MUX0);
0
|
0 / 0 / 0
Регистрация: 04.05.2010
Сообщений: 115
|
|
10.10.2010, 18:59 | 12 |
![]()
0
|
0 / 0 / 0
Регистрация: 10.08.2010
Сообщений: 1,264
|
|
10.10.2010, 19:16 | 13 |
Код
#ymstude <avr/io.h> #ymstude <util/delay.h> #ymstude "uart.h" //--------------------------------------------------------------------------- // // System objects // UART::CUart MyUart; //============================================================ int main() { unsykned char H0,L0; MyUart.init(); // инициализация UART PORTC=0; ADCSR=(1<<ADIM) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0); while(1) { //Канал 1 ADMUX=(1<<REFS0)|(1<<REFS1); //выбираем MyUart.sendByte(0xFF); //Начало посылки, два байта FF уникальный символ MyUart.sendByte(0xFE); ADCSR |= (1<<ADSC); while((ADCSR&(1<<ADSC))!=0); L0=ADCL; H0=ADCH; //Канал 2 ADMUX=(1<<REFS0)|(1<<REFS1)|(1<<MUX0); MyUart.sendByte(H0); //отправить данные канала 1 MyUart.sendByte(L0); ADCSR |= (1<<ADSC); while((ADCSR&(1<<ADSC))!=0); L0=ADCL; H0=ADCH; //канал 3 ADMUX=(1<<REFS0)|(1<<REFS1)|(1<<MUX1); MyUart.sendByte(H0); //отправить данные канала 2 MyUart.sendByte(L0); ADCSR |= (1<<ADSC); while((ADCSR&(1<<ADSC))!=0); L0=ADCL; H0=ADCH; //канал 4 ADMUX=(1<<REFS0)|(1<<REFS1)|(1<<MUX1)|(1<<MUX0); MyUart.sendByte(H0); //отправить данные канала 3 MyUart.sendByte(L0); ADCSR |= (1<<ADSC); while((ADCSR&(1<<ADSC))!=0); L0=ADCL; H0=ADCH; MyUart.sendByte(H0); //отправить данные канала 4 MyUart.sendByte(L0); } }//end main //============================================================ 0xFFFE - метка начала посылки. Также у меня на входе стоит делитель 1:2.
0
|
10.10.2010, 19:16 | |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь. Распределитель импульсов на 35 каналов Просмотр платных каналов со спутниковых рессиверов! на каких элементах делать коммутацию каналов "Farblichtmusik 2012". Светомузыка (цветомузыка) 6 каналов. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |