LCD 16x2 i2c не хочет работать по прерыванию.
- Войдите на сайт для отправки комментариев
Ср, 12/07/2017 - 21:30
Собственно суть проблемы полностью уложилась в название темы. "Мигалка" из библиотеки MsTimer2 работает, сам дисплей тоже работает. Но если я хочу по прерыванию выводить инвормацию на дисплей - не получаеться. Аналогичный дисплей, без i2c работает отлично. Пример кода который отказываеться работать.
#include <MsTimer2.h> #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x3F, 16, 2); int i; void flash() { lcd.clear(); lcd.setCursor(0,0); lcd.print(i); i++; } void setup() { lcd.begin(); MsTimer2::set(500, flash); MsTimer2::start(); } void loop() { }
В чем прикол?
Вставьте sei(); в строку 10
помогло, а как коректно пользоваться этой функцией?
Ну, вот так и пользоваться. В обработчике прерываний другие прерывания запрещены, а для I2C они нужны. Вот Вы их и разрешили этой функцией.
Ну, вот так и пользоваться. В обработчике прерываний другие прерывания запрещены, а для I2C они нужны. Вот Вы их и разрешили этой функцией.
так вот почему у меня Timer2 должным образом не заработал )))
Правильный код
Где можно поподробней почитать об этом?
Может вы мне поможите с еще одной проблемой. Я игру написал, все работает, но невозможно играть, так как в какой то момент с экрана пропадает вся информация и остаеться только подсветка. Этот баг случается на 2 моих дисплеях, и в протеусе. Вот так https://www.youtube.com/watch?v=PT_gOwOm-gQ выглядит сама игра, но баг не проявился, я специально так снял) Могу снять и сам баг. После того как с экрана все пропадает, андуинка продолжает работать и можно услышать звук если проиграл. Помогает если перезапустить дисплей клавишей резет на ардуино. Что это может быть?
Начните читать здесь, а там ещё ссылки есть.
Про игру - не знаю, надо код смотреть. По описанию похоэе на то, что Вы постпенно заполняете всю память, а когда она переполнится, у Вас отваливается работа с дисплеем.
Я пытался писать максимально адекватно, но понимаю что там черт ногу сломит. Этот баг появляется рандомно и логически связать его с чем либу у меня не получилось. Можно играть минуту и его не будет или он может появиться на первых же секундах. IDE пишет Скетч использует 7422 байт (23%) памяти устройства. Глобальные переменные используют 225 байт (10%) динамической памяти.