roboforum.ru

Технический форум по робототехнике.

Mega8 и АЦП

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Mega8 и АЦП

Сообщение Master » 24 ноя 2008, 16:39

Есть такой регистр ADMUX
компилятор CVavr походу сразу создает дефайн в который записывает 0
Код: Выделить всёРазвернуть
#define ADC_VREF_TYPE 0x00

а затем приравниеват ADMUX
Код: Выделить всёРазвернуть
ADMUX=ADC_VREF_TYPE;

А мне нужно делать измериния не только на ADC0, но и на ADC1 я так понимаю что мне нужно изменять значения битов 0-4, так вот как мне лучше их изменить используя битовую маску?
Вот так буит правильно:
Измерения на ADC0
ADMUX=ADMUX & 00000000
Измерения на ADC1
ADMUX=ADMUX | 00000001
Аватара пользователя
Master
 
Сообщения: 4468
Зарегистрирован: 21 дек 2006, 19:56
Откуда: Украина, г.Одесса
прог. языки: Delphi и С

Re: Mega8 и АЦП

Сообщение Vooon » 24 ноя 2008, 18:15

ЕМНИП cv делает ф-цию read_adc(channel)
в которой делают ADMUX = ADC_VREF_TYPE | channel;
Linux user | Firefox user
Аватара пользователя
Vooon
Site Admin
 
Сообщения: 3339
Зарегистрирован: 09 фев 2006, 15:36
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков

Re: Mega8 и АЦП

Сообщение rig » 25 ноя 2008, 08:17

Master, есть же мастер, хорошее подспорье
для 32й меги:
Код: Выделить всёРазвернуть
#define FIRST_ADC_INPUT 5       // миниботовские АЦП опрашиваю так
#define LAST_ADC_INPUT 7        // входы PORTA5-7
unsigned int adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1];     // тут будет лежать результат измерения
#define ADC_VREF_TYPE 0xC0  // относительно чего оцифровывать ( вн. источник 2,56V)

// ADC interrupt service routine
// with auto input scanning
interrupt [ADC_INT] void adc_isr(void)
{
static unsigned char input_index=0;
adc_data[input_index]=ADCW;       // Read the AD conversion result

// Select next ADC input
if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT))
   input_index=0;

ADMUX=(FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff) )+input_index; // собственно ответ на ввопрос

delay_us(10);         // Delay needed for the stabilization of the ADC input voltage
ADCSRA|=0x40;         // Start the AD conversion
}

кодевижен 2
Аватара пользователя
rig
 
Сообщения: 1437
Зарегистрирован: 03 авг 2007, 19:43
Откуда: Екатеринбург
прог. языки: Си, асм со словарем

Re: Mega8 и АЦП

Сообщение Master » 25 ноя 2008, 12:47

Спсб, как работает до конца ниасилил, но уже работает. :D
Аватара пользователя
Master
 
Сообщения: 4468
Зарегистрирован: 21 дек 2006, 19:56
Откуда: Украина, г.Одесса
прог. языки: Delphi и С

Re: Mega8 и АЦП

Сообщение rig » 25 ноя 2008, 12:54

аналогично, больно уж мудрен этот англицкий даташит.
пару научных тыков и почему то работает :crazy:
Аватара пользователя
rig
 
Сообщения: 1437
Зарегистрирован: 03 авг 2007, 19:43
Откуда: Екатеринбург
прог. языки: Си, асм со словарем

Re: Mega8 и АЦП

Сообщение Vooon » 26 ноя 2008, 00:22

Я не видел код инициализации, но думаю что там указано прерывание по завершению преобразования.
В прерывании записывается результат в массив, за тем меняем канал, ждем, запускаем преобразование снова и выходим из обработчика.
Linux user | Firefox user
Аватара пользователя
Vooon
Site Admin
 
Сообщения: 3339
Зарегистрирован: 09 фев 2006, 15:36
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков


Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16