Урок 13. Аппаратная ШИМ на микроконтроллере

В этом уроке мы научимся реализовывать ШИМ сигнал на микроконтроллере AVR с помощью BASCOM-AVR. В микроконтроллерах AVR, ШИМ можно реализовать посредством таймеров, для этой цели в микроконтроллере есть ШИМ выходы на порты вводавывода. К примеру, в микроконтроллере Attiny13 есть один таймер (Timer0) и два канала вывода ШИМ Pwm0a и Pwm0b, которые находиться на портах PB.0 и PB.1. В документации на микроконтроллер ШИМ каналы подписываются так: OC0A – ШИМ канал A на таймере 0, OC0B – ШИМ канал B на таймере 0, OC1A – ШИМ канал A на таймере 1, OC1B – ШИМ канал B на таймере 1 и т.д.

Работа с ШИМ в микроконтроллере
Для начала работы нужно сконфигурировать таймер на работу ШИМ для этого есть команда:
Config Timer1 = Pwm, Pwm = Разрядность, Compare A Pwm = Состояние канала A, Compare B Pwm = Состояние канала B, Prescale = Частота ШИМ
Разрядность можно задать 8, тогда будет скважность ШИМ от 0 до 255. Для Timer1 разрядность можно задать 9 или 10. Состояние канала A или B можно задать Clear Up – скважность при 0 = логической 1 и Clear Down – скважность при 0 = логической 0. Частоту ШИМ можно задать: 1, 8, 64, 256 и 1024.
Пример команды конфигурирования: Config Timer0 = Pwm , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 8
После конфигурирования таймера нужно сконфигурировать порты ШИМ на вывод командой Config порт = Output, например: Config Portb.0 = Output
Потом нужно запустить таймер командой Start таймер, например: Start Timer0.
Теперь можно записать скважность в ШИМ канал для канала A таймера 0 это можно сделать так: Pwm0a = скважность, например: Pwm0a = 150

Практический пример

Теперь давайте попробуем поработать с ШИМ на практике, сделаем простую моргалку которая будет плавно зажигать и тушить светодиоды. За основу возьмём микроконтроллер Attiny13 и два светодиода, соберём простую схему:

Теперь напишем простую программку на BASCOM-AVR, применяя полученные знания:

$regfile = «attiny13.dat»
$crystal = 9600000
Config Timer0 = Pwm , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 8
Config Portb.0 = Output
Config Portb.1 = Output
Start Timer0
Do
Incr Pwm0a
Decr Pwm0b
Waitms 5
Loop
End

Откомпилируем её, прошьём микроконтроллер и установим фьюз биты микроконтроллера на тактирование от внутреннего тактового генератора на 9.6 МГц без делителя на 8. Пример установки фьюз битов в программе SinaProg:

Я использовал свою отладочную плату и вот что получилось:

Скачать файлы для урока (проект в Proteus, исходник, прошивка) вы можете ниже


Список радиоэлементовОбозначение
Тип
Номинал
Количество
ПримечаниеМагазинМой блокнот

U1
МК AVR 8-битATtiny131
R1, R2
Резистор150 Ом2
R3
Резистор10 кОм1
D1, D2
Светодиод2
Добавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

Добавить комментарий

Ваш адрес email не будет опубликован.