Почему я не могу использовать Jeelib Sleepy на Teensy 2 вместе с serial

Я уже несколько лет использую функцию Jeelib Sleepy для достижения состояний низкого энергопотребления на платах Arduino ATmega328/1280/2560, в частности, функции LoseSomeTime.

Я хочу, чтобы мой Teensy 2 перешел в аналогичное состояние с низким энергопотреблением, поэтому я попробовал очень простой скетч, который просто переводил устройство в спящий режим, мигал светодиодом и отправлял несколько последовательных сообщений. Мне действительно нужно было прокомментировать несколько строк в Jeelib:

// отрегулировать миллиметровые тики, так как мы пропустим несколько
#if defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny85__) || defined (__AVR_ATtiny44__) || defined (__AVR_ATtiny45__)
    extern volatile unsigned long millis_timer_millis;
    millis_timer_millis += msecs - msleft;
#else
    extern volatile unsigned long timer0_millis;
    timer0_millis += msecs - msleft;
#endif

Это нужно было сделать, так как функции delay() и millis() в Teensy используют разные имена переменных для настройки, и это был самый быстрый способ решения проблемы. LoseSomeTime работает на оборудовании ATmega328 с этим изменением.

Я обнаружил, что, хотя функция LoseSomeTime некоторое время спала, последовательная функция полностью перестала работать - сообщения вообще не печатались. Я сталкивался с этим раньше на оборудовании ATmega328, потому что микроконтроллер перешел в спящий режим до того, как последовательный буфер был сброшен. Я добавил несколько delay()после последовательной записи, а также попытался использовать Serial.flush (), чтобы убедиться, что буфер пуст.

LoseSomeTime требует установки прерывания на сторожевом таймере, но я не вижу, как это повлияет на последовательную работу.

, 👍0

Обсуждение

Вы явно упоминаете Teensy 2 для этой проблемы, означает ли это, что вы пробовали на других платах и не сталкивались с этой проблемой Jeelib Sleepy на Teensy 2 вместе с serial? Это выглядит так в вашем вопросе, но в этом вопросе не все ясно на 100%. Было бы полезно упомянуть список плат, на которых один и тот же скетч работает или не работает, на случай, если вы могли бы протестировать его на разных формах plqt., @jfpoilpret

Не проблема на любых платах ATmega328, ATmega1280, ATmega2560. Я еще не примерял крошечный 2++. Я знаю, что это не сработает ни с одной из плат для ARM., @Cybergibbons

Имеет ли это какое-либо отношение к тому, что сериал теперь основан на прерываниях? Может ли это повлиять на это? Я никогда не пользовался библиотекой или Teensy 2, поэтому я мало что знаю об этой ситуации, но я мог бы изучить ее, если у меня будет время., @Anonymous Penguin

Я думаю, что и Uno, и Teensy используют прерывания для последовательного, не так ли? По крайней мере, с версии v1 IDE., @Cybergibbons


1 ответ


1

Это проблема с платами Teensy - или, точнее, с тем, что библиотека Jeelib Sleepy не поддерживает платы Teensy.

Вам нужно будет изменить библиотеку, чтобы она работала для плат Teensy. Или вы можете использовать другую библиотеку низкого энергопотребления/сна.

,