Пн авг 30, 2021 23:58:44
Вт авг 31, 2021 01:45:04
Вт авг 31, 2021 02:00:11
Хороший отзыв об инструментеmehanik_all писал(а):этот кусок дерьма
Вт авг 31, 2021 03:38:01
#define F_CPU 8000000UL // Я использую внутренний генератор 8 МГц
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <math.h>
volatile uint8_t V=0;
volatile uint8_t int_adc=0;
ISR(ADC_vect) //функция прерывания АЦП
{
V=ADCH; //запись значения с вывода ADC старших 8-ми бит с учётом выравнивания ADCW влево (ADLAR=1)
}
int main(void){
DDRD |= _BV (PD6)| _BV (PD5); //установить как выход (установить 1)
PORTD &=~ (_BV (PD6)| _BV (PD5)); //установить 0 на выводах
DDRB |= _BV (PB5); //установить как выход (установить 1)
PORTB &=~ _BV (PB5); //установить 0 на выводах
//TIMSK0 |= _BV(TOIE0); //разрешить прерывание по переполнению таймера Т0
TCCR0A &=~ (_BV(WGM01)| _BV(WGM00)); //Режим работы
TCCR0B &=~ _BV(WGM02); //таймера Normal
TCCR0B |= _BV(CS02)| _BV(CS00); //предделитель таймера
TCCR0B &=~ _BV(CS01); //Т0 clk/1024
TCCR0A &=~ _BV(COM0A1); //Управление выводами OCn
TCCR0A |= _BV(COM0A0); //меняется на противоположное
ACSR |= _BV (ACD); //выключить компаратор
ADMUX |= _BV (REFS1)| _BV (REFS0); //источник опорного напряжения - внутренний 1,1В
//ADMUX |= _BV (MUX1)| _BV (MUX0); //входной канал MUX3...0
ADMUX |= _BV (ADLAR); //выравнивание результата преобразования - влево (для удобства 8 бит в регистре ADCH)
ADCSRA |= _BV (ADEN); //включить АЦП
ADCSRA |= _BV (ADATE); //выбор режима работы АЦП - по ADTS2...0
ADCSRA |= _BV (ADIE); //разрешить прерывание
ADCSRA |= _BV (ADPS2)| _BV(ADPS0); //выбор частоты преобразования - 250 кГц
ADCSRB |= _BV (ADTS2); //выбор источника сигнала для запуска преобразования - переполнение таймера Т0
sei ();
while(1){
if (int_adc<20) int_adc++;
else int_adc=0;
if (int_adc>=0 && int_adc<=5)
{
ADMUX &=~ (_BV (MUX1)| _BV (MUX0)); //ADC0
}
if (int_adc>=6 && int_adc<=10)
{
ADMUX |= _BV (MUX0); //ADC1
ADMUX &=~ _BV (MUX1);
}
if (int_adc>=11 && int_adc<=15)
{
ADMUX &=~ _BV (MUX0); //ADC2
ADMUX |= _BV (MUX1);
}
if (int_adc>=16 && int_adc<=20)
{
ADMUX |= _BV (MUX0); //ADC3
ADMUX |= _BV (MUX1);
}
ADCSRA |= _BV (ADSC); //запуск АЦП (запускается один раз)
PORTB &=~ _BV (PB5);
_delay_ms (V);
PORTB |= _BV (PB5);
_delay_ms (V);
}
}
Хороший отзыв об инструментеmehanik_all писал(а):этот кусок дерьма
Вт авг 31, 2021 04:41:06
Вт авг 31, 2021 08:15:04
Вт авг 31, 2021 09:00:09
void delay(int v)
{
while (v)
{
_delay_ms(1);
V--;
}
}
Вт авг 31, 2021 14:40:15
static inline void _delay_ms(double __ms) __attribute__((always_inline));
Вт авг 31, 2021 14:53:25
Вт авг 31, 2021 14:55:11
int_adc++;
if (int_adc == 20) {
int_adc = 0;
ADMUX &= ~(_BV(MUX1) | _BV(MUX0)); //ADC0
}
else
if (int_adc == 5 || int_adc == 10 || int_adc == 15) {
ADMUX++;//next input
}
Пн сен 06, 2021 21:45:44
Вт сен 07, 2021 03:29:31
Вт сен 07, 2021 21:42:52
Сб сен 11, 2021 16:50:52