Имею проблемы с программой для управления RGB светодиодом с помощью ATtiny13, который при нажатии на кнопку, подключенную к INT0 должен засыпать и соответственно выходить из спячки(power down). Вот есть у меня такая прога а она что то не пашет, в смысле пашет не корректно. Светодиод меняет цвет только при подключенном программаторе(AVR ISP mkII), при отключении его светодиод не пашет и на кнопку проц не реагирует. При подключенном программаторе при нажатии на кнопку светодиод вырубается и остается в таком состоянии все время пока нажата кнопка. Потом врубается обратно и что странно с разгоном процессора, в фьюзах стоит 9.6 МГц + 14СК+64мс то есть светодиод еще какое то вемя разгорается)такое ощущение что проц ресетится. Стоит так же добавить что при отключенном программаторе если схватится пальцем за VCC светодиод светится где то 2 секунды а потом опять ресетится) Какие то непонятки) Гляньте люди добрые од может что не так написал, всетаки не профи) Буду очень благодарен)
Код: Выделить всё
#define F_CPU 9600000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <avr/sleep.h>
unsigned char e;
void abc(unsigned char a,unsigned char b,unsigned char c,unsigned char status);
unsigned char pwm[3]={255,255,255};
unsigned char to[3]={255,255,255};
int main(void)
{
DDRB = 0b00011001;
PORTB = 0b00011011;
GIMSK = 0b01000000;
MCUCR = 0b00000000;
TCCR0A = 0x00;
TCCR0B = 0x01;
TIMSK0 = 0b00000010;
sei();
while(1){
if (pwm[0]<to[0]) pwm[0]++;
if (pwm[0]>to[0]) pwm[0]--;
if (pwm[1]<to[1]) pwm[1]++;
if (pwm[1]>to[1]) pwm[1]--;
if (pwm[2]<to[2]) pwm[2]++;
if (pwm[2]>to[2]) pwm[2]--;
if(pwm[0]==to[0]&&pwm[1]==to[1]&&pwm[2]==to[2])
{
to[0]=rand()%255;
to[1]=rand()%255;
to[2]=rand()%255;
}
_delay_ms(20);
}
}
ISR(TIM0_OVF_vect)
{
if(e==255)
{
e=0;
PORTB = 0b00011001;
}
abc(pwm[0],pwm[1],pwm[2],e);
e++;
}
void abc(unsigned char a,unsigned char b,unsigned char c,unsigned char status)
{
if((status==a)) PORTB&= ~(1<<3);
if((status==b)) PORTB&= ~(1<<4);
if((status==c)) PORTB&= ~(1<<0);
}
ISR(INT0_vect) {
TIMSK0 = 0b00000000;
cli();
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_mode();
sleep_disable();
TIMSK0 = 0b00000010;
sei();
}


