UART или нет?
- Войдите на сайт для отправки комментариев
Чт, 30/01/2020 - 04:30
Панель с клавиатурой и контактами RX,TX - скорее всего UART интерфейсом. Нажатия почти всех кнопок отправляют на выход TX правильный фрейм! Кроме кнопки со звездочкой! Она выдает очень-очень короткий отрицательный импульс 1 микросекунду (или меньше)! Могу предположить, что это скорее всего сигнал сброса!
Насколько мне известно, через UART данные передаются только пакетами! Стартовый бит, биты данных, бит четности (если есть) и стоповый бит или биты.
Если это обычный UART, то каким образом посылается этот короткий сигнал? В UART ведь нет такой команды! Верно?
И ещё вопрос, как можно его обработать?
Если я например хочу подключить к панельке дисплей, чтобы на него выводились символы всех клавиш и "*" в том числе. Посоветуйте пожалуйста, что делать?
Если бы не было этого очень короткого сигнала,я бы просто,
if (Serial.available() > 0) // проверил, есть ли данные incomingByte = Serial.read(); //и считал пришедший байт в переменную
Скорее всего, посылается заведомо неверный пакет, чтобы поднялся флаг ошибки. В атмегах есть какие-то регистры на эту тему, и их можно обработать, если хватит сил.
Можно запаралелить выход с клавиатуры на свободный пин и отлавливать импульс "звездочки" там
Спасибо за идею! Насколько я понимаю, этот pin должен реагировать на прерывание по спаду импульса. И тут же запускаться таймер.
То есть алгоритм такой:
1. Проверка с помощью прерывания, не стал ли уровень на входе pin низким
2. Если стал... то запустить таймер
3. Проверить, прошла ли одна микросекунда
4. Если прошла... то
5. Проверить логический уровень на входе Pin
6. Если уровень высокий, то ... это был импульс подходящей длины, и функция проверки возвращает 1,
если же уровень ещё низкий, то это начало стартового бита UART, поэтому вернуть из функции 0.
А дальше уже возвращенное функцией значение можно присвоить какой-то переменной, и в зависимости от неё выводить на дисплей символ "*"! Правильно ли я рассуждаю?
Ну, вроде все верно, но хотелось бы посмотреть на осцилограммы "звездочки" и "нормальных" клавишь
'Это короткий сигнал при нажатии "*"!
Это при нажатии цифры "0"!
Цифры "2"
Цифры "5"
Как видите, всё вроде бы логично! Клеточка по горизонтали это примерно 1 бит! Самый-самый первый бит стартовый! Биты данных ( я не знаю, как правильно их считать с нуля или единицы) тоже выглядят логично. Чтобы получить число 5 нужно к 1 прибавить 4. И как видите, биты имеющие разрядность 1 и 4 подняты, а остальные опущены!
Ну это больше похоже на неисправность, и от звездочки клавиатура перезагружается сама.
Клавиша "*" используется для отмены неправильно введенных данных! На табличке панели написано "При ошибке нажмите * и повторите набор"!
Клавиша "*" используется для отмены неправильно введенных данных! На табличке панели написано "При ошибке нажмите * и повторите набор"!
Cудя по осцилограмме действительно похоже на ресет. А других выходов нет? И зачем нужен RX?
для приема данных с блока управления домофона. Панель вызова не только посылает данные, но и принимает! То есть, насколько я понял, они могут полноценно "общаться" между собой!
Мне интересно, получится ли добавить к панели простенький дисплей, чтобы на нем хорошо были видны символы нажатых клавиш. Как вариант рассматриваю матрицу на базе MAX7219. Но к сожалению в электронике почти не разбираюсь!