Как опрашивать сразу два ацп?

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Аватара пользователя
Сериг
Это не хвост, это антенна
Сообщения: 1451
Зарегистрирован: Пт фев 19, 2010 19:39:28
Откуда: Москва

Как опрашивать сразу два ацп?

Сообщение Сериг »

Нужно также но опрашивать ос0 и ос1
Реклама
Аватара пользователя
Сериг
Это не хвост, это антенна
Сообщения: 1451
Зарегистрирован: Пт фев 19, 2010 19:39:28
Откуда: Москва

Re: Как опрашивать сразу два ацп?

Сообщение Сериг »

#include <mega8.h>
#include <delay.h>
#define FIRST_ADC_INPUT 0
#define LAST_ADC_INPUT 0
unsigned char adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1];
#define ADC_VREF_TYPE 0x20
interrupt [ADC_INT] void adc_isr(void) //стандартное прерывание по ADC от CVAVR
{
static unsigned char input_index=0;
// Read the 8 most significant bits
// of the AD conversion result
adc_data[input_index]=ADCH;
// 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 needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
}
void main(void)
{
PORTD=0x00;
DDRD=0xFF;

ADMUX=FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff);
ADCSRA=0xCC;
#asm("sei")
while (1)
{
if(adc_data[0]>10) PORTD.0=1; //если значение ADC>10 (~0.2V)
else PORTD.0=0;
if(adc_data[0]>70) PORTD.1=1; //ADC>70 (~1.4)
else PORTD.1=0;
if(adc_data[0]>130) PORTD.2=1; //~2.5
else PORTD.2=0;
if(adc_data[0]>190) PORTD.3=1; //~3.7
else PORTD.3=0;
if(adc_data[0]>250) PORTD.4=1; //~ 4.9
else PORTD.4=0;
};
}
Реклама
Аватара пользователя
IfoR
Поставщик валерьянки для Кота
Сообщения: 2029
Зарегистрирован: Сб ноя 15, 2008 10:09:56
Откуда: г. Тула
Контактная информация:

Re: Как опрашивать сразу два ацп?

Сообщение IfoR »

Как опрашивать сразу два ацп?
В этом контроллере только один АЦП, но несколько входов. Т.ч. одновременно мерить на двух входах нельзя. Только по очереди, переустанавливая ADMUX.
Изображение
/dev/urandom - гигабайты информации.

OS: openSUSE 13.2 (x86_64)
Аватара пользователя
Сериг
Это не хвост, это антенна
Сообщения: 1451
Зарегистрирован: Пт фев 19, 2010 19:39:28
Откуда: Москва

Re: Как опрашивать сразу два ацп?

Сообщение Сериг »

Да по очереди,но как можно пример ?
Реклама
Эиком - электронные компоненты и радиодетали
Слесарь
Друг Кота
Сообщения: 4851
Зарегистрирован: Ср июл 14, 2010 18:27:52

Re: Как опрашивать сразу два ацп?

Сообщение Слесарь »

Сериг писал(а):Да по очереди,но как можно пример ?
Как пример посмотри даташит к контроллеру какой регистр ответственный за входы АЦП. Переключай входы изменяя значение в регистре
Реклама
Аватара пользователя
SubDia
Держит паяльник хвостом
Сообщения: 995
Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь

Re: Как опрашивать сразу два ацп?

Сообщение SubDia »

Регистр ADMUX перенастраиваете в нужные моменты, вот и все. И пример кода никакой не нужен, весь пример уже есть в приведенном Вами коде.
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение
Реклама
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»