Доброго дня! Учусь писать прошивки для AtTiny13. Проект предполагает, что при нажатии кнопки сначала загориться 1 светодиод, через 20 секунд он помигает и загорится другой светодиод. Возник вопрос, а как вместо мигания сделать затухание через ШИМ? Так как памяти в attiny очень мало, я попытался писать на СИ, что дало мне существенную экономию места, но как реализовать ШИМ я не разобрался.
Привожу код:
Привожу код:
C:
#include <avr/io.h>
#include <util/delay.h>
int timer_protect = 20; //активация 1 режима
int timer_zombie = 20; //активация 2 режима
int main(void)
{
DDRB &= ~ (1 << 2); // устанавливаем вывод PB2 как вход кнопки (не забыть подтянуть её на землю через резистор)
DDRB |= (1 << 0); // устанавливаем вывод PB0 как выход
DDRB |= (1 << 1); // устанавливаем вывод PB1 как выход
while (1) {
if (PINB & (1 << PINB2)) { //если нажали кнопку
PORTB |= (1 << 0); // устанавливаем высокий уровень на выводе PB0
PORTB &= ~(1 << 1); // устанавливаем низкий уровень на выводе PB1
_delay_ms(timer_protect * 1000); // ждем 1й таймер
for (int i = 0; i < 10; i++) {
PORTB &= ~(1 << 0); // попеременно мигаем двумя светодиодами
PORTB |= (1 << 1);
_delay_ms(300);
PORTB |= (1 << 0);
PORTB &= ~(1 << 1);
_delay_ms(300);
}
PORTB &= ~(1 << 0); // устанавливаем низкий уровень на выводе PB4
PORTB |= (1 << 1); // устанавливаем высокий уровень на выводе PB3
_delay_ms(timer_zombie * 1000); // ждем 2й таймер
} else {
PORTB &= ~(1 << 0);
PORTB &= ~(1 << 1); //если ничего не нажато либо истек 2 таймер - выключаем все.
}
}
return 0;
}