Добавлено after 51 second:
Переустановка программы не помогла.
Хороший отзыв об инструментеmehanik_all писал(а):этот кусок дерьма
Код: Выделить всё
#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 писал(а):этот кусок дерьма
Код: Выделить всё
void delay(int v)
{
while (v)
{
_delay_ms(1);
V--;
}
}
Код: Выделить всё
static inline void _delay_ms(double __ms) __attribute__((always_inline));Код: Выделить всё
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
}