Настройка прерывания по внутренним таймерам микроконтроллера ESP8266 с помощью языка microPython.

В данном уроке мы рассмотрим прерывания от таймеров микроконтроллера ESP8266. Используя микроконтроллер ESP8266 может активировать до 7 таймеров.

Обычно таймера в библиотеках microPython  используют следующим образом:

Таймеры 2 и 3 используются, чтобы при помощи ШИМ  управлять устройствами, например менять яркость светодиодов.

Таймер 5 используется для управления сервоприводом или похожими устройствами.

Таймер 6  используется для синхронизированных чтения/записи АЦП/ЦАП.

Мы с Вами будем использовать 0 и 1 таймер.
Основные методы работы с таймерами:

  • Timer.init(*, freq, prescaler, period, mode=Timer.UP, div=1, callback=None, deadtime=0) :

Инициализирует таймер. Инициализацию можно выполнить либо с помощью частоты (в Гц), либо с помощью делителя частоты (prescaler) и периода (period), при этом не забываем, что значение частоты и делителя вносим на 1 меньше.  Тоесть, если Вам надо период 10000, в настройки необходимо внести 9999:

# задаем, чтобы таймер срабатывал на 10 Гц:
tim.init(freq=10)
# напрямую задаем делитель частоты и период:
tim.init(prescaler=83, period=9999)

Аргументы:

  • freq –  задает периодическую частоту таймера. 
  • prescaler –  претделитель, диапазон т 0 до 0чFFFF. Исходная частота таймера делится на (prescaler + 1),  тем самым мы получаем рабочую частоту таймера.
  • period – значение до которого считает таймер. Счетчик будет обнулен после достижения значения (period + 1). Максимальное значение зависит от типа счетчиков, и может принимать максимальное значение 0xFFFF или 0x3FFFFFFF.
  • mode – режимы роботы:

Timer.PERIODIC – устанавливает режим работы таймер. Таймер будет срабатывать с заданной периодичностью.

      Timer.UP – таймер будет считать с «0» до значения в которое мы занесли в period + 1.

      Timer.DOWN – таймер будет считать со значения в period + 1 до «0».

    Timer.CENTER – таймер будет считать с «0» до значения в period + 1, а потом обратно до «0».

  • div – может быть «1», «2» или «4». Это значение, на которое делится тактовая частота, чтобы определить частоту семплирования, используемую цифровыми фильтрами.
  • callback – определяется функция обратного вызова.
  • deadtime – здесь задается время задержки между сигналами на комплиментарных каналах (во время этой задержки оба канала будут неактивны).  Доступен не на всех таймерах, необходимо уточнять в документации.

Для работы таймера обязательно надо задать либо 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