какие-то не понятки с библиотекой сна
- Войдите на сайт для отправки комментариев
Втр, 28/06/2022 - 15:48
Здравствуйте. мучаю библиотеку сна.
и какая-то странная вещь у меня происходит.
Ниже приведенный код работает только при прерывании события LOW, а мне надо Change
на других событиях так же не работает. только LOW.
куда смотреть?
на пин 3 приходит меандр с микросхемы часов
#include "LowPower.h" #include <Wire.h> volatile int state = LOW; const int wakeUpPin = 3; const int test_pin = 16; void wakeUp() { state = !state; } void setup() { Wire.begin(); Wire.beginTransmission(0x68); Wire.write(0x00); Wire.write(0x00); Wire.endTransmission(); Wire.beginTransmission(0x68); Wire.write(0x07); Wire.write(0x10); // Set Square Wave to 1 Hz Wire.endTransmission(); delay(1000); pinMode(test_pin,OUTPUT); //пин тест digitalWrite(test_pin, LOW); //пин тест на ноль pinMode(wakeUpPin, INPUT); } void loop() { digitalWrite(test_pin, state); attachInterrupt(1, wakeUp, LOW); LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF); detachInterrupt(1); }
какой контроллер?
на атмега328 change interrupt на INT0 INT1 для пробуждения использовать нельзя, см даташит табл 7-1
камень 48 вообще.
уже допер, что просто добавив строки atmega48 в библиотеку - не особо решает задачу. хотя change на int0 работает отлично.
сейчас поставил 328P.
завелось.
на счет пробуждения не понял. таблица 7-1 вообще про eeprom
P.s. что бы не плодить темы, скажите, пожалуйста, я посмотрел выход мк из сна, у меня получилось 6,6 мс. как-то долговато он выходит. или нет? у меня 328p тактируется от внешнего кварца 4МГц
По даташиту, запуск кварца после сна занимает 16000 периодов, т.е. для 16 МГц - 1 мс, для 4 МГц - 4 мс.
При работе от встроенного RC генератора просыпается за 6 периодов.
Если у вас есть внешние часы и важно быстро просыпаться, то можно перейти на использование RC генератора.
на счет пробуждения не понял. таблица 7-1 вообще про eeprom
даташит на атмегу328, раздел 7 - Power Management and Sleep Modes
таблица 7-1 на странице 39, примечание 3 - "for INT0 INT1 only level interrupt"
на счет пробуждения не понял. таблица 7-1 вообще про eeprom
даташит на атмегу328, раздел 7 - Power Management and Sleep Modes
таблица 7-1 на странице 39, примечание 3 - "for INT0 INT1 only level interrupt"
Увидел. спасибо. таблица 9-1
INT1, INT0 and Pin Change
а где написано, что по change нельзя?
Увидел. спасибо. таблица 9-1
INT1, INT0 and Pin Change
а где написано, что по change нельзя?
вы какой даташит-то смотрите? дайте ссылку
https://files.amperka.ru/datasheets/ATmega328.pdf - это не атмега328P
там это написано
а вот на атмега 328
https://static.chipdip.ru/lib/549/DOC001549488.pdf
тут не вижу, что change не работает
а вот на атмега 328
https://static.chipdip.ru/lib/549/DOC001549488.pdf
тут не вижу, что change не работает
все точно так же, таблица 14-1, страница 62 - читайте внимательнее.
Кстати, первая ваша ссылка тоже даташит на атмегу328, просто другая ревизия.
все точно так же, таблица 14-1, страница 62 - читайте внимательнее.
не понимаю почему на int0/1 нельзя использовать Change ?
Вроде внимательно прочитал. Ткните неуча носом, пожалуйста.
а если очень хочется Change использовать, то можно? или так работать не будет?
Можно использовать Change. В данном случае (плата на 328) ошибка в даташите, широко известная в узких кругах.
К тому же вы сами писали, что у вас работает.
А с LOW вы работаете не правильно. Надо запрещать прерывание по LOW в обработчике, иначе будут постоянные прерывания пока на пине сохраняется LOW.
Да где там эта ошибка то? Чего-то я в глаза долблюсь. в упор не вижу.
да я вижу, что у меня ногодрыг происходит, когда на int ноль. я просто посмотрел, что только в таком режиме работает.
Вам в #8 сообщении ответили с указанием страницы.
Повторю.
Note:
1. Only recommended with external crystal or resonator selected as clock source.
2. If Timer/Counter2 is running in asynchronous mode.
3. For INT1 and INT0, only level interrupt
Видимо я не понимаю эту фразу.
Имхо это "только прерывания уровня" или "только уровень прерываний" или "одноуровневое прерывание".
"HIGH и LOW тут можно, а Change нельзя" - я б не догадался так перевести.
Видимо я не понимаю эту фразу.
Имхо это "только прерывания уровня" или "только уровень прерываний" или "одноуровневое прерывание".
"HIGH и LOW тут можно, а Change нельзя" - я б не догадался так перевести.
Просто путаетесь в терминах. Прерывания уронвня ("Level interrupt") - это и есть HIGH или LOW. А Change- это не level int
дел