Пт окт 27, 2023 10:26:02
#include <avr/io.h>
#include <avr/interrupt.h> //Для доступа к функции sei()
#include <avr/signal.h> //Для доступа к макросу INTERRUPT
volatile uint8_t adcVal[3] = {0, 0, 0};
volatile uint8_t max = 0;
volatile uint8_t max1 = 0;
ISR(ADC_vect)
{
uint8_t a = ADCH;
if (a > adcVal[ADMUX - 32]) //если значение с ацп больше записанного, то записываем это значение
{
adcVal[ADMUX - 32] = a;
}
if (ADMUX < 34) //переключаем пин ацп на следующий
{
ADMUX++;
} else
{
ADMUX = 32;
}
ADCSRA = ADCSRA | 0x40; //Устанавливаем разряд ADSC в регистре ADCSR, чтобы начать новое преобразование
}
ISR(TIM0_OVF_vect)
{
max = 0;
if (adcVal[1]>adcVal[0]) max = 1;
if (adcVal[2]>adcVal[1]) max = 2; //Находим наибольшее напряжение
if (max == max1) //если наиб. напряжение=предыдущему периоду, то устанавливаем выход
{
switch (max)
{
case 0:
PORTB = 1;
break;
case 1:
PORTB = 2;
break;
case 2:
PORTB = 8;
break;
}
} else //иначе отключаем все выходы
{
max1 = max;
PORTB = 0;
}
adcVal[0] = 0; //обнуляем ацп каждый период
adcVal[1] = 0;
adcVal[2] = 0;
}
int main(void)
{
TIMSK0 = 2;
TCCR0A = 0;
TCCR0B = 0b00000101;
ADMUX = 32;
ADCSRA = 0b11001000;
DDRB = 0b00001011;
sei();
/* Replace with your application code */
while (1)
{
}
}
Пт окт 27, 2023 12:42:54
Пт окт 27, 2023 13:09:56
Пт окт 27, 2023 15:12:26
Сб окт 28, 2023 08:19:18
Сб окт 28, 2023 13:51:14
veso74 писал(а):&
Сб окт 28, 2023 15:09:31
Сб окт 28, 2023 15:19:51
Сб окт 28, 2023 19:19:09