Помогите чайнику с АЦП на avr

Обсуждаем контроллеры компании Atmel.
Ответить
Родился
Сообщения: 13
Зарегистрирован: Сб мар 10, 2012 14:07:20
Откуда: Краматорск

Сообщение dictor »

titoFF писал(а):Може данные слишком часто обновляются, цифры меняются часто, а глаз неуспевает...
я тоже думал так, может поставить задержку в районе 0,5 секунды?
Реклама
Держит паяльник хвостом
Сообщения: 933
Зарегистрирован: Ср апр 13, 2011 11:09:20
Откуда: Екатеринбург

Сообщение Alkul »

dictor писал(а):я тоже думал так, может поставить задержку в районе 0,5 секунды?
Так что мешает поставить и посмотреть, что изменится?

На мой взгляд, у Вас не совсем верный алгоритм. Из-за шумов несколько младших разрядов результата измерения могут быть недостоверны. Плюс само измеряемое напряжение может в известных пределах колебаться. А значит, для получения более-менее стабильной картины следует производить оцифровку несколько раз, вычислять среднее арифметическое и уже его выводить на экран.
Оцифровывайте, после каждой итерации считайте среднее арифметическое как "скользящий интеграл" за, допустим, 10 последних итераций. Инициализируйте таймер на 0,5 секунды и в обработчике прерывания по переполнению делайте вывод имеющегося на данный момент результата среднего арифметического.
Реклама
Родился
Сообщения: 13
Зарегистрирован: Сб мар 10, 2012 14:07:20
Откуда: Краматорск

Сообщение dictor »

Alkul писал(а):
dictor писал(а):я тоже думал так, может поставить задержку в районе 0,5 секунды?
Так что мешает поставить и посмотреть, что изменится?

На мой взгляд, у Вас не совсем верный алгоритм. Из-за шумов несколько младших разрядов результата измерения могут быть недостоверны. Плюс само измеряемое напряжение может в известных пределах колебаться. А значит, для получения более-менее стабильной картины следует производить оцифровку несколько раз, вычислять среднее арифметическое и уже его выводить на экран.
Оцифровывайте, после каждой итерации считайте среднее арифметическое как "скользящий интеграл" за, допустим, 10 последних итераций. Инициализируйте таймер на 0,5 секунды и в обработчике прерывания по переполнению делайте вывод имеющегося на данный момент результата среднего арифметического.
Спасибо, ббуду пробовать, просто я ещё не совсем оазобрался с прерываниями, просто это еще дополнительная трудность, я с теми что были еле разобрался
Родился
Сообщения: 1
Зарегистрирован: Сб мар 08, 2014 23:36:05

Сообщение alhimik_999 »

всем привет, аналогичная проблема не запускается ацп

Код: Выделить всё

#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/delay.h>


void ADC_init()
{
         ADMUX = 0x00;
         ADCSRA = 0x8E;
}

unsigned int ADC_result(unsigned char adc_input)
{
         ADMUX=adc_input | (ADMUX & 0xF0);
         _delay_us(10);
         ADCSRA |= 0x40;
 //        while((ADCSRA & 0x10)==0);
 		while ((ADCSRA&(1 << ADIF))== 0); 
        ADCSRA|=0x10;
        return ADCH;
}

void main(void) {

	int i=0;
	DDRC = 0x00;
	DDRB = 0xFF;
	PORTB = 0xFF;
	ADC_init();
	sei();
	while(1)
	{
		i=ADC_result(0);
		if(i != 0)
			PORTB = 0x00;
		else 
			PORTB = 0xFF;
	}

}
Реклама
Эиком - электронные компоненты и радиодетали
Ответить

Вернуться в «AVR»