Добрый день. Почитал, тут по теме был диалог по инициализации lcd. Подскажите, допустим, есть программа, которая собирает информацию с кнопок. Кнопки висят на отдельных прерываниям. И есть дисплей на который выводится название кнопки и счётчик количества нажатий. Проблема в том, что когда происходит прерывание от кнопки, иногда вылетает мусор на экран. Дисплей древний, на hd44780. Подключен по 4bit. Я так понимаю нарушаются тайминг. Проблема в том, что отключать прерывания на время передачи данных на lcd - не вариант. В случае spi можно было б использовать dma . Я так понимаю. А тут... Как вообще быть в таком случае?

Комментарии: 7

  1. Dimmu

    опрос кнопок на прерываниях (есни не из спячки будить) - тупиковая ветвь эволюцыи

    • Pavel

      Понял-принял. А в случае с герконовым датчиком, к примеру?

  2. Nikolay

    А какая разница? Дребезг всеравно будет. А для этого делают периодический опрос. Через N положительных событий считают что кнопка нажата. Или же обрабатывать событие ОЧЕНЬ быстро. Например выставлением флага, который уже будет обработан в основной программе.

    • Pavel

      Да, я знаю этот способ. Эффективный. Но тут вопрос в том, что любое прерывание на какой n-й раз вызывает сбой в передаче на дисплей. Т.е как вариант, действительно в прерывании подымать только флаг.

      • Nikolay

        Хотя странно. Я делал устройство на таком дисплейчике и прерывания никак не мешали выводу.

        • Dimmu

          кнопку достаточно опрашывать раз в 200 мс, несколько опросов и принимается решение - нажата кнопка или нет. я вообще делаю обычно два опроса через 250 мс, для длительного нажатия - 4 опроса. проблем с кнопками не было ниразу. прерывания - это для энкодера например, когда нужна мгновенная реакцыя на событие. ну вот зачем на кнопку мгновенная до с точностью до микросекунды (время входа в прерывание) реакцыя?

          • Pavel

            Я кнопки привел в пример. На самом деле, у меня в схиме пару герконовых расходомеров. Ставил кнопки для отладки Собственно, алгоритм такой: пришло прерывание, отключил прерывание на этом порту, в обработчике увеличил переменную, включил прерывание. В основном цикле проверяю, если значение переменной изменилось, то вывожу на экран. Ладно, буду разбираться. Благодарю

Не нашли ответ?

Вам также может быть интересно