#include <avr/io.h>
#include <util/delay.h>
void pause (unsigned int a)
{ unsigned int i;
for (i=a;i>0;i--)
;
}
void init_pwm (void)
{
TCCR1A=(1<<COM1A1)|(1<<WGM10); //Turn 1, if OCR1A==TCNT1, 8-bit PWM, phase correct
TCCR1B=(1<<CS10); //Psescallers= /1
OCR1A=0x00; //Set
}
int main(void)
{ unsigned char i;
DDRB=0x02; //init PB1 as output
init_pwm();
for (i=0;i<255;i++) //More brightness
{
OCR1A++;
pause(1000);
}
for (i=0;i<255;i++) //Less brightness
{
OCR1A--;
pause(1000);
}
{
OCR1A=0xFF;
i=30; while(--i) _delay_ms(100);
}
for (i=0;i<255;i++) //Less brightness
{
OCR1A--;
pause(1000);
}
for (i=0;i<255;i++) //More brightness
{
OCR1A++;
pause(1000);
}
}
Выделенная жирным, это и есть пауза, которую надо заменить. Дело в том, что 15сек delay занимают всю память ATMega8, а мне как минимум понадобится пауз в сумме минут на 5. Хекс получается большим, из за того что я не ставлю оптимизацию в AVR Studio 4.19. Зато когда я ее ставлю, хекс получается маленьким, не больше 1кб, но перестает работать ШИМ.
Нужно решить одну проблему из двух:
1. Когда я использую delay и оптимизацию, у меня должен работать ШИМ.
2. Вместо delay я использую другой метод паузы(который вы мне предложите) с отключенной оптимизацией(при которой работает ШИМ).


