Почему я не могу использовать 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 требует установки прерывания на сторожевом таймере, но я не вижу, как это повлияет на последовательную работу.
@Cybergibbons, 👍0
Обсуждение1 ответ
Это проблема с платами Teensy - или, точнее, с тем, что библиотека Jeelib Sleepy не поддерживает платы Teensy.
Вам нужно будет изменить библиотеку, чтобы она работала для плат Teensy. Или вы можете использовать другую библиотеку низкого энергопотребления/сна.
- Как эта строка кода определяет, подключен ли последовательный интерфейс?
- Как прервать соединение HM10 Bluetooth?
- Последовательная связь между Teensy и Teensy через USB-разъем
- Скорость передачи устанавливается на 9600 автоматически, даже если указано другое значение.
- как я могу подключить зарядное устройство для липосакции к teensy 4.0?
- Модуль SIM800L просто повторяет данные, отправленные через последовательный порт.
- ESP32 Arduino Bluetooth Serial не подключается повторно после отключения
- Как написать библиотеку, которая поддерживает как последовательную связь HW, так и SW и позволяет пользователю выбирать, какую из них использовать?
Вы явно упоминаете 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