Широтно импульсная модуляция (ШИМ) напряжения имеет множество применений. В электроприводах постоянного тока она используется для регулировки оборотов электродвигателя, в асинхронных электроприводах и инверторах такой модуляцией делаются синусоидальные напряжения, в источниках питания и DC-DC конвертерах для стабилизации и изменения напряжения, также этот тип модуляции может применяться для регулировки освещения электрическими лампами, температуры создаваемой электрическими нагревателями и использоваться во многих других случаях с электроприборами для которых подходит такой способ модуляции. В общем этот тип модуляции очень важен и поэтому во многих микроконтроллерах делают аппаратную поддержку ШИМа. ATtiny2313 - не исключение и в этом микроконтроллере есть 4 канала аппаратного ШИМа. Такой ШИМ можно получить с 4х специальных пинов:
воскресенье, 4 октября 2020 г.
Аппаратный ШИМ на ассемблере для ATtiny2313
Рисунок 1 - Пины аппаратного ШИМа микроконтроллера ATtiny2313
В начале периода идет высокий уровень а по прошествии некоторого количества тактов он заменяется низким:
И чтобы так было на обоих каналах. Нужно в 5й и 7ой биты регистра TCCR0A записать единицы.
в итоге должно получиться примерно так:
LDI R16, 0b10100011
OUT TCCR0A, R16
Также нужно запустить таймер чтобы ШИМ начался. (об этом см. статью про таймер https://electe.blogspot.com/2020/08/attiny2313.html). Запускать надо естественно без предделителя чтобы режим действительно был FAST. В итоге должно получиться что то вроде этого:
LDI R16, 0b00000001
OUT TCCR0B, R16
Чтобы устанавливать какое либо напряжение на нужном пине есть регистры OCR0A и OCR0В для 8 ми битного таймера и OCR1A и OCR1В для 16ти битного таймера. Записывать в них можно от 0 до 255 (т.к. регистр 8ми битный) а напряжения на соответствующих выводах (см. рисунок 1) будет меняться пропорционально записанному числу. Например установить половину напряжения питания на пине 14 ( он же PB2 или OC0A или PCINT2) можно командами:
LDI R16, 127
OUT OCR0A, R16
На основе аппаратных ШИМов можно сделать например не обычную светодиодную мигалку а например псевдоплавную. Код такой мигалки приведен в поле:
Светодиоды с резисторами необходимо подключит к выводам 9 и 14 микроконтроллера ATtiny2313. К данной статье прилагается видео:
В котором также рассказано о подпрограммах на ассемблере для микроконтроллеров AVR.
Подписаться на:
Сообщения (Atom)