В данном уроке мы рассмотрим прерывания от таймеров микроконтроллера ESP8266. Используя микроконтроллер ESP8266 может активировать до 7 таймеров.
Обычно таймера в библиотеках microPython используют следующим образом:
Таймеры 2 и 3 используются, чтобы при помощи ШИМ управлять устройствами, например менять яркость светодиодов.
Таймер 5 используется для управления сервоприводом или похожими устройствами.
Таймер 6 используется для синхронизированных чтения/записи АЦП/ЦАП.
Мы с Вами будем использовать 0 и 1 таймер.
Основные методы работы с таймерами:
Инициализирует таймер. Инициализацию можно выполнить либо с помощью частоты (в Гц), либо с помощью делителя частоты (prescaler) и периода (period), при этом не забываем, что значение частоты и делителя вносим на 1 меньше. Тоесть, если Вам надо период 10000, в настройки необходимо внести 9999:
# задаем, чтобы таймер срабатывал на 10 Гц:
tim.init(freq=10)
# напрямую задаем делитель частоты и период:
tim.init(prescaler=83, period=9999)
Аргументы:
Timer.PERIODIC – устанавливает режим работы таймер. Таймер будет срабатывать с заданной периодичностью.
Timer.UP – таймер будет считать с «0» до значения в которое мы занесли в period + 1.
Timer.DOWN – таймер будет считать со значения в period + 1 до «0».
Timer.CENTER – таймер будет считать с «0» до значения в period + 1, а потом обратно до «0».
Для работы таймера обязательно надо задать либо freq, либо одновременно prescaler и period.
Для проверки работы прерываний от таймеров мы подключим два светодиода, которые будут включаться и выключаться с разной частотой, при этом у нас не будет задержек в программе, для реализации паузы между сменами уровня выходного сигнала:
from machine import Timer
from machine import Pin
n5=False
h5=1
n4=False
h4=1
timer0 = Timer(0)
timer1 = Timer(1)
led5 = Pin(5,Pin.OUT)
led4 = Pin(4,Pin.OUT)
def LED5(timer0):
global n5
n5 = True
print('Interrupt5')
def LED4(timer1):
global n4
n4 = True
print('Interrupt4')
timer0.init(freq=1, mode=Timer.PERIODIC, callback=LED5)
timer1.init( freq=2, mode=Timer.PERIODIC, callback=LED4)
while True:
if n5:
led5.value(h5)
if(h5):
h5 = 0
else:
h5 = 1
n5 = False
if n4:
led4.value(h4)
if(h4):
h4 = 0
else:
h4 = 1
n4 = False