Чт авг 10, 2017 10:45:14
ISR(ADC_vect)
{
adc_result[ADMUX & 0b00001111] = ADCH;
if ((ADMUX & 0b00001111) < 8) ADMUX++;
else ADMUX = ADMUX & 0b11110000;
ADCSRA |= ( 1 << ADSC );
}
Чт авг 10, 2017 10:47:38
Чт авг 10, 2017 10:52:46
Чт авг 10, 2017 10:53:55
Чт авг 10, 2017 11:08:54
ADCSRA |= ( 1 << ADSC );
ISR(ADC_vect)
{
PORTB &= ~(1 << PORTB1);
adc_result[ADMUX & 0b00001111] = ADCH;
if ((ADMUX & 0b00001111) < 8) ADMUX++;
else ADMUX = ADMUX & 0b11110000;
ADCSRA |= ( 1 << ADSC );
PORTB |= (1 << PORTB1);
}
Чт авг 10, 2017 11:17:55
ISR( TIMER0_OVF_vect )
{
// 100 us oveflow
// Reinitialize Timer 0 value
TCNT0=0x9C;
ADCSRA|=(1<<ADSC); //ADCSRA|=0x40
}
ISR (ADC_vect)
{
//static byte input_index=0;
// Read the AD conversion result
adc_data[input_index]=ADCW;
// Select next ADC input
if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT))
input_index=0;
ADMUX=(FIRST_ADC_INPUT % 3)| (ADC_VREF_TYPE+input_index);
// Delay needed for the stabilization of the ADC input voltage
_delay_us(10);
//ADCSRA|=(1<<ADSC);
}
Чт авг 10, 2017 11:22:36
ISR( TIMER0_OVF_vect )
{
// 100 us oveflow
// Reinitialize Timer 0 value
TCNT0=0x9C;
ADCSRA|=(1<<ADSC); //ADCSRA|=0x40
}
ISR (ADC_vect)
{
//static byte input_index=0;
// Read the AD conversion result
adc_data[input_index]=ADCW;
// Select next ADC input
if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT))
input_index=0;
ADMUX=(FIRST_ADC_INPUT % 3)| (ADC_VREF_TYPE+input_index);
// Delay needed for the stabilization of the ADC input voltage
_delay_us(10);
//ADCSRA|=(1<<ADSC);
}
Чт авг 10, 2017 11:32:49
Чт авг 10, 2017 11:40:23
Чт авг 10, 2017 12:31:23
тогда сделайте прерывание по таймеру и перенесите строку:
ISR( TIMER0_OVF_vect )
{
// Reinitialize Timer 0 value
TCNT0=0xBE;
ADCSRA &= ~(1<<ADSC); //ADCSRA|=0x40
}
Чт авг 10, 2017 12:45:53
тогда сделайте прерывание по таймеру и перенесите строку:
ISR( TIMER0_OVF_vect )
{
// Reinitialize Timer 0 value
TCNT0=0xBE;
ADCSRA &= ~(1<<ADSC); //ADCSRA|=0x40
}
Чт авг 10, 2017 12:48:40
TIMSK0=(0<<OCIE0B) | (0<<OCIE0A) | (1<<TOIE0);
Чт авг 10, 2017 13:04:47
Чт авг 10, 2017 13:21:00
Ivanoff-iv писал(а):некоторое снижение случайной ошибки, вот например возьмём 10бит шим (младший разряд шумящий) сложим 2 замера и получим 11бит сигнал, младший шумящий - отсекаем его (/2) и получаем обратно 10бит сигнал, но уже стабильней.
Чт авг 10, 2017 13:22:05
... и т.д. Короче крутимся в цикле без прерываний))
Чт авг 10, 2017 13:35:10
Чт авг 10, 2017 13:39:31
Чт авг 10, 2017 13:56:32
ozonn писал(а):при помощи прерывания обрабатываются самые важные. Для того прерывания и придуманы
ozonn писал(а):на прерывания отвлекаться нельзя, а вот задержки на 200 мкс делать можно.
Чт авг 10, 2017 14:14:39
Чт авг 10, 2017 15:03:43
чтобы получать 8 разрядов с нешумящими (хотя это самообман) разрядами, специально придуман режим "выравнивания влево" (бит ADLAR) - включите его и пользуйтесь ADCH в качестве результата - к чему какие-то загадочные вычисления, гистерезисы и т.п.?roman.com писал(а):Тут, на выходе 10 разрядного АЦП получаем 8 разрядов данных (или 9 разрядов). Понятно, что разрешающая способность АЦП меньше, но зато последний разряд не шумит))