Attiny13 ацп и шим

Обсуждаем контроллеры компании Atmel.
Ответить
Invisible
Родился
Сообщения: 10
Зарегистрирован: Пт фев 20, 2009 19:25:14

Attiny13 ацп и шим

Сообщение Invisible »

Всем привет. Объясните пожалуйста почему программа не работает так как надо. При достижении напряжения 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в то выключаем
}

}
}
Реклама
vdavid
Мучитель микросхем
Сообщения: 410
Зарегистрирован: Чт ноя 13, 2008 16:33:42

Re: Attiny13 ацп и шим

Сообщение vdavid »

1. Переменную buf объявить как volatile.
2. Перед

Код: Выделить всё

PORTB&=~(1<<PB0);	//если меньше 12в то выключаем
вставить

Код: Выделить всё

TCCR0A &=~(1<<COM0A1);
k=0;
Соответственно после

Код: Выделить всё

{	// не включалась ли уже лампочка
пишем

Код: Выделить всё

TCCR0A |=(1<<COM0A1);
Реклама
Invisible
Родился
Сообщения: 10
Зарегистрирован: Пт фев 20, 2009 19:25:14

Re: Attiny13 ацп и шим

Сообщение Invisible »

теперь ситуация такая: также при достижении 12в плавно разгорается и горит, уменьшаю напряжение, лампочка тухнет и плавно начинает разгораться. Непонятно почему выполняется второе условие при buf<120(напряжение меньше 12в), должно же идти по else.
vdavid
Мучитель микросхем
Сообщения: 410
Зарегистрирован: Чт ноя 13, 2008 16:33:42

Re: Attiny13 ацп и шим

Сообщение vdavid »

Что происходит при дальнейшем уменьшении напряжения?
Реклама
Эиком - электронные компоненты и радиодетали
Invisible
Родился
Сообщения: 10
Зарегистрирован: Пт фев 20, 2009 19:25:14

Re: Attiny13 ацп и шим

Сообщение Invisible »

Напряжение немного повысил

Код: Выделить всё

if (buf>150)
При плавном увеличении напряжения начинает плавно зажигаться с (11,5в далее 12в и 12.5в при этих напряжения лампочка бесконечно плавно загорается и резко тухнет) при 13 плавно загорается и горит. При 11в не включается.
Реклама
vdavid
Мучитель микросхем
Сообщения: 410
Зарегистрирован: Чт ноя 13, 2008 16:33:42

Re: Attiny13 ацп и шим

Сообщение vdavid »

Надеюсь, Вы сами поняли в чем дело. Не бывает идеальных регуляторов напряжения и идеальных АЦП. Поэтому нужно ввести гистерезис, т.е. зону нечувствительности:

Код: Выделить всё

if (buf>=120)	// если больше 12в смотрим
.....
else if (buf<100)
....
Реклама
Invisible
Родился
Сообщения: 10
Зарегистрирован: Пт фев 20, 2009 19:25:14

Re: Attiny13 ацп и шим

Сообщение Invisible »

Понятно. Спасибо за помощь.
Ответить

Вернуться в «AVR»