Attiny13 ацп и шим
Добавлено: Вс мар 22, 2015 09:14:03
Всем привет. Объясните пожалуйста почему программа не работает так как надо. При достижении напряжения 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в то выключаем
}
}
}
#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в то выключаем
}
}
}