Всем привет. Объясните пожалуйста почему программа не работает так как надо. При достижении напряжения 12в должна плавно включаться лампочка, а при уменьшении тухнуть. У меня же при достижении 12в плавно загорается, а при уменьшении не тухнет. Контроллер attiny13. частота 4.8 . Как будто по первому условию не переходит на ветку else.
#define F_CPU 4800000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
char k;
int buf;
ISR(ADC_vect) //вектор прерывания ацп
{
buf=ADCH; //в buf кидаем значение ацп
}
int main(void)
{
DDRB = 0b00000001; // настройка порта B, вывод PB0 - выход, PB4 - вход ацп.
ADMUX = 0b00100010;//-,опорное напряжение-питание мк,выравнивание результата в лево(8разр результат),-,-,-,ADC2(PB4)
ADCSRA = 0b11101111;//вкл ацп, запуск переобразования, непрерывное преобразование, флаг прерывания, ацп прерывание разрешено, делитель 128
TCCR0A = 0b10000001;
TCCR0B = 0b00000011;
sei();
while (1)
{
if (buf>=120) // если больше 12в смотрим
{ // не включалась ли уже лампочка
if (!(k==1))// если к не равно 1 делаем
{
for (int i=0;i<=254;i++)//цикл. плавно зажигаем лампочку
{
OCR0A=i; //
_delay_ms(50); //
}
PORTB|=(1<<PB0); //включаем лампочку на всю катушку
k=1;
}
}
else
{
PORTB&=~(1<<PB0); //если меньше 12в то выключаем
}
}
}
Attiny13 ацп и шим
- Реклама
Re: Attiny13 ацп и шим
1. Переменную buf объявить как volatile.
2. Передвставить
Соответственно послепишем
2. Перед
Код: Выделить всё
PORTB&=~(1<<PB0); //если меньше 12в то выключаемКод: Выделить всё
TCCR0A &=~(1<<COM0A1);
k=0;Код: Выделить всё
{ // не включалась ли уже лампочкаКод: Выделить всё
TCCR0A |=(1<<COM0A1);Re: Attiny13 ацп и шим
теперь ситуация такая: также при достижении 12в плавно разгорается и горит, уменьшаю напряжение, лампочка тухнет и плавно начинает разгораться. Непонятно почему выполняется второе условие при buf<120(напряжение меньше 12в), должно же идти по else.
Re: Attiny13 ацп и шим
Что происходит при дальнейшем уменьшении напряжения?
Re: Attiny13 ацп и шим
Напряжение немного повысилПри плавном увеличении напряжения начинает плавно зажигаться с (11,5в далее 12в и 12.5в при этих напряжения лампочка бесконечно плавно загорается и резко тухнет) при 13 плавно загорается и горит. При 11в не включается.
Код: Выделить всё
if (buf>150)- Реклама
Re: Attiny13 ацп и шим
Надеюсь, Вы сами поняли в чем дело. Не бывает идеальных регуляторов напряжения и идеальных АЦП. Поэтому нужно ввести гистерезис, т.е. зону нечувствительности:
Код: Выделить всё
if (buf>=120) // если больше 12в смотрим
.....
else if (buf<100)
....Re: Attiny13 ацп и шим
Понятно. Спасибо за помощь.


