ШИМ - широтно-импульсная модуляция (или по англ. PWM). У микроконтроллера ATtiny13 есть два ШИМ выхода OC0A и OC0B от таймера 0. ШИМ выход OC0A на 5 ножке микроконтроллера Attiny13, а OC0B на 6 ножке. В данном примере светодиод подключённый к ШИМ выходу OC0B будет плавно загораться и гаснуть.
Вот схема устройства:
Для сборки устройства понадобится:
1.Микроконтроллер Attiny13 (с любыми индексом)
2. Панелька DIP8
3. Любой светодиод
4. Резистор 4,7k (можно от 2,2кОм до 20кОм)
5. Резистор 150ом
Питание для устройства должно быть от 3 до 5 вольт. Для питания устройства я использовал "литьевую таблетку" на 3 вольта.
Прошивка для устройства написана в среде BASCOM-AVR.
Вот исходник прошивки:
$regfile = "attiny13.dat" $hwstack = 8 $swstack = 16 $framesize = 16 Config Portb.1 = Output Config Timer0 = Pwm , Prescale = 8 , Compare B Pwm = Clear Down Start Timer0 Do Do Waitms 10 Incr Pwm0b Loop Until Pwm0b = 255 Do Waitms 10 Decr Pwm0b Loop Until Pwm0b = 0 Loop End
В канал ШИМ можно записать значение от 0 до 255.
Вот упрощенный вариант кода управления ШИМ:
$regfile = "attiny13.dat" Config Portb.1 = Output Config Timer0 = Pwm , Prescale = 8 , Compare B Pwm = Clear Down Start Timer0 Pwm0b = 255 End
В данном случае в ШИМ канал OC0B мы запишем число 255. То есть светодиод будет гореть постоянно.
Записать значение в ШИМ канал можно так:
(ШИМ канал) = (Значение от 0 до 255)
Вот такое устройство получилось у меня:
Микроконтроллер прошивал программой PonyProg2000.
Вот картинка установки фьюз битов:
Ниже вы можете скачать прошивку, исходник, печатную плату, проект в Proteus
Прикрепленные файлы:
- t13pwm.rar (23 Кб)
Комментарии (10) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация
$hwstack = 8
$swstack = 16
$framesize = 16
Config Portb.1 = Output
Config Timer0 = Pwm , Prescale = 8 , Compare B Pwm = Clear Down
Start Timer0
Do
Do
Waitms 10
Incr Pwm0b
Loop Until Pwm0b = 255
Wait 1
Do
Waitms 10
Decr Pwm0b
Loop Until Pwm0b = 0
Wait 1
Loop
End
На Си
#include <util/delay.h>
int main(void)
{
DDRB = 0x1;
PORTB = 0x01;
TCCR0A=0x83;
TCCR0B=0x02;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;
for(;;)
{
do // Нарастание яркости
{
OCR0A++;
_delay_ms(5);
}
while(OCR0A!=255);
_delay_ms(1000); // Пауза 1 сек.
do // Затухание
{
OCR0A--;
_delay_ms(5);
}
while(OCR0A!=0);
_delay_ms(1000); // Пауза 1 сек.
}
}
Код.
#include <util/delay.h>
int main(void)
{
DDRB = 0x1;
PORTB = 0x01;
TCCR0A=0x83;
TCCR0B=0x02;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;
for(;;)
{
do
{
OCR0A++;
_delay_ms(5);
}
while(OCR0A!=255);
do
{
OCR0A--;
_delay_ms(5);
}
while(OCR0A!=0);
}
}
Прошивка, модель в Протеусе. Файлы в аттаче.