Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить

Плата LED&KEY (TM1638). Чтение кнопок, ассемблер.

Пн сен 14, 2020 15:01:57

Есть такая плата. Решил с ней разобраться. Плату подключил к микроконтроллеру SM8952AC, это с очень небольшими отличиями 8051- совместимый МК. С индикацией разобрался быстро и без проблем, а вот прочитать кнопки ну никак не удается.
Для начала написал подпрограмму чтения:
1. выводы DIO, CLK в высоком состоянии (входы, активный уровень МК - лог.0).
2. опускаю сигнал CLK
3. Жду 5 мкс.
4. Поднимаю сигнал CLK
5. Копирую состояние DIO в бит переноса МК.
6. Сдвигаю вправо регистр-аккумулятор вместе с битом переноса.
9. делаю так 8 раз, возвращаясь к пункту 2.
10. сдвигаю аккумулятор еще раз вправо.
11. копирую аккумулятор в ячейку памяти, выхожу из подпрограммы.

В даташите указано, чтоб прочитать кнопки, надо опустить STB, отправить микрухе команду 0x42, после чего, не поднимая сигнал STB, 4 раза произвести чтение. Так и делаю:

1. Опускаю STB.
2. выдерживаю паузу
3. Передаю код 0x42.
4. Выдерживаю паузу
5. Вызываю подпрограмму чтения, описанную выше.
6. Возвращаемое значение ложу в первую ячейку памяти.
7. И так 4 раза, пока заполнятся 4 ячейки памяти.
8. Поднимаю сигнал STB
9. Вызываю подпрограмму отображения принятых данных. Так как я не знаю в какой из 4-х ячеек данные, то по очереди с секундной задержкой отображаю их все, а еще 4-мя светодиодами отображаю номер ячейки. Принятые данные отображаются 8-разрядной светодиодной полоской на порте 2.
10. возвращаюсь к п.1 и так циклически. Пробовал возвращатся к п.4, но разницы никакой.

И ничего не работает. Хотя некое шевеление присутствует, при нажатии кнопок загорается 5-й и 0-й разряд индикатора на P2. Хотя в даташите все достаточно просто.
Пробовал по всякому - менял фазу, менял полярность тактовых импульсов в подпрограмме чтения, пробовал менять момент фиксации состояния вывода DIO - по фронту, по полке, по спаду, сдвигал влево, сдвигал вправо, менял команду чтения - 0x41 вместо 0x42, пробовал стробировать отправку команды 0x42 (так отправляется инструкция 0x44 для индикации )- чего только не делал - не работает никак.


Исходный код программы:

Re: Плата LED&KEY (TM1638). Чтение кнопок, ассемблер.

Вт сен 15, 2020 10:26:50

Когда такие вещи не работают сходу, самое лучшее средство диагностики - логический анализатор.
В работе с МК он даже нужнее, чем осциллограф.

Теоретически, если с индикацией проблем нет, значит данные отправляются правильно.
У этого МК какие-нибудь средства дебаггинга имеются?
Вообще странный выбор МК, совершенно голого, как я понял из его ДШ, и это при наличии однотактовых 8051 клонов от STC или Silabs.

Re: Плата LED&KEY (TM1638). Чтение кнопок, ассемблер.

Вт сен 15, 2020 11:40:01

Там сама микросхема контроллера не такая уж и простая.
Вот вариант несколько читабельного даташита:
tm1638_v1.3_en.pdf
(1.59 MiB) Скачиваний: 278

Пока с таким "чудом" в собственных конструкциях дела не имел...
8)

Re: Плата LED&KEY (TM1638). Чтение кнопок, ассемблер.

Вт сен 15, 2020 12:13:02

Я имел дело с ТМ1637, да и то только с его индикацией.
Таких 4-разрядных индикаторов за пару баксов полно на ибей и али.
Кстати, подключал его тоже с 51-му в лице C8051F340, но писал на Си и к тому же там протокол обмена отличный от 1638: некое подобие извращенного I2C (присутствует start, stop, ack, но полностью отсутствует адресация слейва).
Чтение с кнопок я тоже расписал, но чисто теоретически, т.к. кнопок на индикаторе не предусмотрено, а свои припаивать было неохота.

Re: Плата LED&KEY (TM1638). Чтение кнопок, ассемблер.

Вт сен 15, 2020 13:48:47

подобный комплект но на чипах тм1640 16 разрядоф и 20 кенопок применяется в десятках моделей кетянски весоф на LED на 51мк с внутреней памятью исходник для них открытый есть на сайте производителя

Re: Плата LED&KEY (TM1638). Чтение кнопок, ассемблер.

Ср сен 16, 2020 11:03:02

Кажись разобрался. Данные в регистрах микросхемы присутствуют только когда кнопки нажаты, они там не сохраняются. Для того чтоб вычитывать кнопки, нужно постоянно вертеться в цикле. Содержимое регистров обновляется каждый цикл динамической индикации микрухи, частота динамической индикации в районе 300-400 Гц, довольно мало времени чтоб успеть прочитать.

Re: Плата LED&KEY (TM1638). Чтение кнопок, ассемблер.

Вт мар 21, 2023 19:14:52

Поэтому для клавиатуры их никто не использует. А для 8-разрядной индикации гораздо удобнее MAX7219 с SPI - готовых платок на Али полно. Там легко работает аппаратный SPI.

Re: Плата LED&KEY (TM1638). Чтение кнопок, ассемблер.

Ср мар 22, 2023 12:21:16

прекрасно работает чтение кнопок, и спешить никуда не надо.
совершенно по фигу, как часто обновляются регистры кнопок. если кнопка нажата, то и чтение покажет, что она нажата.

Re: Плата LED&KEY (TM1638). Чтение кнопок, ассемблер.

Сб мар 25, 2023 07:09:40

А как вы решили этот вопрос? Мне все еще интересно, т.к эти платы никуда не делись

Re: Плата LED&KEY (TM1638). Чтение кнопок, ассемблер.

Сб мар 25, 2023 10:32:06

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

Re: Плата LED&KEY (TM1638). Чтение кнопок, ассемблер.

Сб мар 25, 2023 10:51:44

Просто тут проблема вырисовывается, что программа ничего другого не будет делать, только крутится в цикле на кнопках. Не инта, ничего.

Re: Плата LED&KEY (TM1638). Чтение кнопок, ассемблер.

Сб мар 25, 2023 11:36:29

В принципе это равноценно "независимому контроллеру дисплея/клавиатуры", выполняемому на том же МК при помощи прерываний.
Вполне вписывается в ход основной программы и не мешает ее исполнению (ежли конечно там чего высокоскоростного не используется).
8)
Только тогда смысл во внешнем контроллере теряется...
:dont_know:

Re: Плата LED&KEY (TM1638). Чтение кнопок, ассемблер.

Сб мар 25, 2023 15:28:36

Shuspano, я же сказал, что проверять кнопки нужно 10 раз в секунду. а внутри интервала 100 мс программа будет делать всё, что тебе угодно.
а прерывание от таймера обязательно должно быть, чтобы отмерять нужные интервалы времени. в том числе и интервал 100 мс для опроса кнопок.

Re: Плата LED&KEY (TM1638). Чтение кнопок, ассемблер.

Сб мар 25, 2023 16:01:41

Starichok51 писал(а):прерывание от таймера обязательно должно быть, чтобы отмерять нужные интервалы времени

Можно и без прерываний. Обнуляем таймер, и через насколько операндов ( пишу на С ), приращиваем счётчики времени чего угодно на значение таймера, обнуляем последний, и до следующего захода. Это в случае если не нужна большая точность. Но для нажатия кнопок вполне покатит.

Re: Плата LED&KEY (TM1638). Чтение кнопок, ассемблер.

Сб мар 25, 2023 17:07:11

а можно вообще без таймера.
программа ходит по кругу и не важно, сколько времени тратится на этот круг.

Re: Плата LED&KEY (TM1638). Чтение кнопок, ассемблер.

Сб мар 25, 2023 17:22:24

для часоф /таймера способ не годный ибо дает погрешность но для серфинга по менюшкам и выбора режима наверно сайдет а вот кнопку пуск /стоп таймера или корекция часоф в хх часоф 00 мин и секунд надо обработать мгновено минуя эти ципки по вазможности но там и клок счета задает внешним RTC который можно и повесить часть функций

Re: Плата LED&KEY (TM1638). Чтение кнопок, ассемблер.

Сб мар 25, 2023 17:36:40

Да вот есть подозрение , что прерывания от таймера плохо влияют на точность показаний АЦП.

Re: Плата LED&KEY (TM1638). Чтение кнопок, ассемблер.

Сб мар 25, 2023 17:40:24

musor, а где ты в теме увидел речь про часы? речь была только про работу с кнопками.

Добавлено after 2 minutes 18 seconds:
Alex_641, а у меня есть подозрение, что плохо понимаешь архитектуру МК.

Re: Плата LED&KEY (TM1638). Чтение кнопок, ассемблер.

Сб мар 25, 2023 17:50:24

Можно и без прерываний.

Можно и вообще без МК :o
В программистском форуме встечаю задачки от ленивых студентов: "Выполнить ..., не используя циклы и ветвления" и т.п.
Ну если это в учебных целях, то ещё можно как-то понять: развить у стюденей разнообразие приёмов программирования. Для конкретной же работы, считаю, лучше применять самый эффективный и экономный метод. Если прерывания, к примеру, по таймеру имеются в МК - зачем запрещать себе их использовать? Не надо их бояться.
Человек, не использующий предоставленные дивайсом возможности, напоминает мне персонажа анекдота: билет купил, но пошёл пешком за трамваем.
Насчёт точности АЦП - да, вроде есть рекомендации для уменьшения шумов на время преобразования останавливать всю периферию. Но если точность выбрана на пределе возможностей МК и только "всем молчать!" обеспечивает уменьшение шума в cамом младшем разряде - значит, неверно выбран МК и(или) обрабатывающий софт. Такое моё IMHO :(
Последний раз редактировалось Jack_A Сб мар 25, 2023 17:58:34, всего редактировалось 2 раз(а).

Re: Плата LED&KEY (TM1638). Чтение кнопок, ассемблер.

Сб мар 25, 2023 17:54:39

Хорошо старичёк ! Давай тогда расскажи как видишь ты ? Я расскажу как думаю я .
Работает программа , происходит считывание АЦП, и тут .... прерывание то таймеру ... АЦП идёт накуй , само собой , прерывание же ! Да таймеры времени правильно считают время. НО а что с прерванным АЦП происходит ? Он ( АЦП ) получает неизвестно что !?
Ответить