Как опрашивать сразу два ацп?
- Сериг
- Это не хвост, это антенна
- Сообщения: 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;
};
}
#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: Как опрашивать сразу два ацп?
В этом контроллере только один АЦП, но несколько входов. Т.ч. одновременно мерить на двух входах нельзя. Только по очереди, переустанавливая ADMUX.Как опрашивать сразу два ацп?
- Сериг
- Это не хвост, это антенна
- Сообщения: 1451
- Зарегистрирован: Пт фев 19, 2010 19:39:28
- Откуда: Москва
Re: Как опрашивать сразу два ацп?
Да по очереди,но как можно пример ?
Re: Как опрашивать сразу два ацп?
Как пример посмотри даташит к контроллеру какой регистр ответственный за входы АЦП. Переключай входы изменяя значение в регистреСериг писал(а):Да по очереди,но как можно пример ?
- Реклама
- SubDia
- Держит паяльник хвостом
- Сообщения: 995
- Зарегистрирован: Сб апр 02, 2011 17:59:22
- Откуда: Город-герой Севастополь
Re: Как опрашивать сразу два ацп?
Регистр ADMUX перенастраиваете в нужные моменты, вот и все. И пример кода никакой не нужен, весь пример уже есть в приведенном Вами коде.
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )




