MsTimer2 проблемы

Вопросы программирования в системе Ардуино
Аватара пользователя
AlexCo
Сообщения: 18
Зарегистрирован: 01 мар 2017, 21:34

MsTimer2 проблемы

Сообщение AlexCo » 19 дек 2017, 08:29

Я написал пробный пример, чтобы понять как работает библиотека MsTimer2. Набросал 8 светодиодов и задал им разное время включения и отключения по таймеру. Выводил информацию в сериал и сравнивал заданный счетчик для включения и реальный временной интервал.
Ну при наблюдении ощущение, что работает некорректно. У меня arduino mega 2560, в интернете пишут, что микроконтроллер не поддерживается библиотекой.

До этого пробовал другой пример, у меня на LCD выводятся часы реального времени и считают секунды, а "параллельно" читаем аналоговые и цифровые датчики и выводим на экран. Так вот секунды считаются но наблюдается не ровные интервалы. Например первые три секунды нормально, затем задержка(~1400ms), и вывод следующей и следующий секунды с меньшей задержкой(~600ms). и так по кругу.

Ниже код:

Код: Выделить всё

#include <MsTimer2.h>

unsigned int LTC2, LTC3;
int TLP2, TLP3;

void setup()
{
  pinMode(2,OUTPUT);
  pinMode(3,OUTPUT);
 
  MsTimer2::set(2, timerInterupt);
  MsTimer2::start();
 
  digitalWrite(2, HIGH);
  digitalWrite(3, HIGH);
 
  TLP2 = 1000;
  TLP2 = 800;
}

void loop()
{
  LedOnOff(2, LTC2, TLP2);
  LedOnOff(3, LTC3, TLP3);
}

int LedOnOff(int pin, unsigned int &counter, int timer)
{
  if(counter >= timer)
  {
    digitalWrite(pin,!digitalRead(pin));
    counter=0;
  } 
}

void  timerInterupt()
{
  LTC2++;
  LTC3++;
}


Может я неправильно понял суть работы библиотеки?


Эдуард
Администратор
Сообщения: 484
Зарегистрирован: 30 окт 2016, 20:53

Re: MsTimer2 проблемы

Сообщение Эдуард » 19 дек 2017, 09:58

Здравствуйте!
Принцип работы библиотеки MsTimer2 прост. Через заданные промежутки времени (у вас в программе 2 мс) вызывается функция обработки прерывания (timerInterupt).
MsTimer2 не работает с Mega2650. Для Atmega2560 или Teensy надо использовать FlexiTimer2. Скачать можно здесь: http://playground.arduino.cc/Main/FlexiTimer2.

Аватара пользователя
AlexCo
Сообщения: 18
Зарегистрирован: 01 мар 2017, 21:34

Re: MsTimer2 проблемы

Сообщение AlexCo » 19 дек 2017, 10:02

Эдуард писал(а):Здравствуйте!
MsTimer2 не работает с Mega2650. Для Atmega2560 или Teensy надо использовать FlexiTimer2. Скачать можно здесь: http://playground.arduino.cc/Main/FlexiTimer2.


Спасибо, попробую, отпишусь!

Аватара пользователя
AlexCo
Сообщения: 18
Зарегистрирован: 01 мар 2017, 21:34

Re: MsTimer2 проблемы

Сообщение AlexCo » 19 дек 2017, 10:39

Вот вполне рабочий код на примере 4-х светодиодов. Другой вопрос, что если таймер будет пытаться использовать любая другая библиотека. Например я буду точно использовать SPI, I2C, 1-WIRE и библиотеки для работы с датчиками и дисплеем, хардварный сериал. Или работа покажет? ))

Код: Выделить всё

#include <FlexiTimer2.h>

unsigned int count1, count2, count3, count4;

void counters()
{
count1++;
count2++;
count3++;
count4++;
}

int LedOnOff(int pin, unsigned int &counter, int timer)
{
  if(counter >= timer)
  {
    digitalWrite(pin,!digitalRead(pin));
    counter=0;
  } 
}

void setup()
{
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);

  digitalWrite(2, HIGH);
  digitalWrite(3, HIGH);
  digitalWrite(4, HIGH);
  digitalWrite(5, HIGH);
 
  FlexiTimer2::set(2, counters);
  FlexiTimer2::start();
}

void loop()
{
LedOnOff(2, count1, 125);
LedOnOff(3, count2, 250);
LedOnOff(4, count3, 500);
LedOnOff(5, count4, 1000);
}

Эдуард
Администратор
Сообщения: 484
Зарегистрирован: 30 окт 2016, 20:53

Re: MsTimer2 проблемы

Сообщение Эдуард » 19 дек 2017, 11:28

Конечно есть ограничения. Нельзя использовать таймер в других библиотеках. Те, что вы перечислили таймер 2 не трогают. Таймер 2 используется в аппаратных ШИМ для выводов 3 и 11. Поэтому эти ШИМ работать не будут.

Аватара пользователя
AlexCo
Сообщения: 18
Зарегистрирован: 01 мар 2017, 21:34

Re: MsTimer2 проблемы

Сообщение AlexCo » 19 дек 2017, 11:41

Эдуард писал(а):Конечно есть ограничения. Нельзя использовать таймер в других библиотеках. Те, что вы перечислили таймер 2 не трогают. Таймер 2 используется в аппаратных ШИМ для выводов 3 и 11. Поэтому эти ШИМ работать не будут.

Это полезная информация, большое спасибо!

Аватара пользователя
AlexCo
Сообщения: 18
Зарегистрирован: 01 мар 2017, 21:34

Re: MsTimer2 проблемы

Сообщение AlexCo » 17 янв 2018, 14:51

Насколько такой метод работы с таймером и счетчиками правильный? Ведь если я начну считывать например 10 - 12 датчиков температуры со смещением таймеров таким образом, чтобы например чтение датчиков не попадало близко друг к другу по интервалу, я все равно наблюдаю замедление работы системы в целом.

Чтение датчиков и не совсем своевременный вывод отсчета секунд еще не проблема по большому счету, но что будет когда я подкину еще пару модулей где нужна точность для обмена данными?

Вообще в целом можно ли назвать такой подход работой с прерываниями или нужно идти другим путем?


Вернуться в «Программирование Ардуино»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя