roboforum.ru

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

Mega8 и АЦП

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

Re: Mega8 и АЦП

Vooon » 24 ноя 2008, 18:15

ЕМНИП cv делает ф-цию read_adc(channel)
в которой делают ADMUX = ADC_VREF_TYPE | channel;

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

Re: Mega8 и АЦП

Master » 25 ноя 2008, 12:47

Спсб, как работает до конца ниасилил, но уже работает. :D

Re: Mega8 и АЦП

rig » 25 ноя 2008, 12:54

аналогично, больно уж мудрен этот англицкий даташит.
пару научных тыков и почему то работает :crazy:

Re: Mega8 и АЦП

Vooon » 26 ноя 2008, 00:22

Я не видел код инициализации, но думаю что там указано прерывание по завершению преобразования.
В прерывании записывается результат в массив, за тем меняем канал, ждем, запускаем преобразование снова и выходим из обработчика.


Rambler\'s Top100 Mail.ru counter