В этом уроке мы научимся реализовывать ШИМ сигнал на микроконтроллере 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, исходник, прошивка) вы можете ниже
Урок 14. Программный UART в BASCOM-AVR
Список радиоэлементов
Обозначение | Тип | Номинал | Количество | Примечание | Магазин | Мой блокнот |
---|---|---|---|---|---|---|
U1 | МК AVR 8-бит | ATtiny13 | 1 | Поиск в магазине Отрон | ||
R1, R2 | Резистор | 150 Ом | 2 | Поиск в магазине Отрон | ||
R3 | Резистор | 10 кОм | 1 | Поиск в магазине Отрон | ||
D1, D2 | Светодиод | 2 | Поиск в магазине Отрон | |||
Скачать список элементов (PDF)
Прикрепленные файлы:
- mc177.rar (13 Кб)
Комментарии (5) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация
Хотелось попросить автора описывать ещё и результаты которые можно наблюдать в Proteus, по данному уроку мало, что стало ясно. Работа модели в Протеусе, без описания, опускает в ещё большее не понимание.
Эта статья ориентирована для новичков в BASCOM_AVR. Даже цикл статей на этом сайте так называется. Автор, спасибо!