Урок 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, вихідний код, прошивка) ви можете нижче
Урок 14. Програмний UART у BASCOM-AVR
Список радіоелементів
Позначення | Тип | Номінал | Кількість | Примітка | ||
---|---|---|---|---|---|---|
U1 | МК AVR 8-біт |
ATtiny13
|
1 | |||
R1, R2 | Резистор |
150 Ом
|
2 | |||
R3 | Резистор |
10 кОм
|
1 | |||
D1, D2 | Світлодіод | 2 | ||||
Прикріплені файли:
- mc177.rar (13 Кб)