выход ШИМ PB0(OCOA)...
грубо по нажатию на кнопку (прерывание)
должна плавно расти яркость...
схема примерно выглядит так
набросок программы - пока без кнопки...
Код: Выделить всё
#include <avr>
#include <util>
#include <avr>
volatile int tim1,cnt=0;
volatile int tim=0;
volatile int inp=0;
char Step=0xFF;
ISR(TIM0_OVF_vect){
TCNT0=0xFE;
cnt++;
//Каждый 80-й заход в прерывание
if (cnt==79){
cnt=0;
//254 шага увеличения ширины импульса
if (Step !=0xFE ) {
Step--;
OCR0A=Step;
}
}
}
ISR(INT0_vect){
//inpu=1;
//tim1++;
}
int main(void) // майн прог
{
DDRB = (1<<PB1); //
PORTB = (1<<PB1) ; // подтяжка
MCUCR= (1<<ISC01)|(0<<ISC00); // (прерывание по low level)
TIMSK0 = (1<<TOIE0); //по переполнению таймера
GIMSK = (1<<INT0);
TCCR0A=0b10100011; // Fast PWM
TCCR0B=0b00000001; // без предделителя
OCR0A=0x00;
OCR0B=0x00;
TCNT0=0x10;
sei();
while(1) { } //end while
}
симулируя в протеусе - ШИМ почемуто работает на PB1... и то как-то странно.. не могу разобратся что где не так...