| Форум РадиоКот https://radiokot.ru/forum/ |
|
| Плата LED&KEY (TM1638). Чтение кнопок, ассемблер. https://radiokot.ru/forum/viewtopic.php?f=61&t=172752 |
Страница 1 из 2 |
| Автор: | Николай Савельев [ Пн сен 14, 2020 15:01:57 ] |
| Заголовок сообщения: | Плата LED&KEY (TM1638). Чтение кнопок, ассемблер. |
Есть такая плата. Решил с ней разобраться. Плату подключил к микроконтроллеру 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 для индикации )- чего только не делал - не работает никак. Исходный код программы: СпойлерКод: stb_pin bit P1.0 clk_pin bit P1.1 dio_pin bit P1.2 rdata equ 0x20 ldata equ 0x21 reg0 equ 0x22 reg1 equ 0x23 reg2 equ 0x24 reg3 equ 0x25 org 0 main: clr stb_pin mov rdata, #0x44 call tm1638send call pause setb stb_pin call pause clr stb_pin mov rdata, #0x0C call tm1638send mov rdata, #0xFF call tm1638send call pause setb stb_pin call pause clr stb_pin mov rdata, #0x8D call tm1638send call pause setb stb_pin call pause o_loop: clr stb_pin call pause mov rdata, #0x42 call tm1638send call pause ; call read1638 mov reg0, ldata call pause call read1638 mov reg1, ldata call pause call read1638 mov reg2, ldata call pause call read1638 mov reg3, ldata call pause setb stb_pin call memread jmp o_loop memread: push ACC push PSW setb P3.7 mov A, reg0 cpl A mov P2, A clr P3.4 call delay1s setb P3.4 mov A, reg1 cpl A mov P2, A clr P3.5 call delay1s setb P3.5 mov A, reg2 cpl A mov P2, A clr P3.6 call delay1s setb P3.6 mov A, reg3 cpl A mov P2, A clr P3.7 call delay1s pop PSW pop ACC ret tm1638send: push ACC push PSW mov A, rdata rrc A mov R7, #0x08 rdloop: clr clk_pin mov dio_pin, C setb clk_pin rrc A djnz R7, rdloop pop PSW pop ACC ret read1638: push ACC push PSW mov R6, #0x08 setb dio_pin clr clk_pin call pause nextbit: setb clk_pin mov C, dio_pin clr clk_pin rrc A djnz R6, nextbit mov ldata, A pop PSW pop ACC ret pause: push 0x30 mov 0x30, #0x11 next: djnz 0x30, next pop 0x30 ret delay1s: mov 0x30, #0x0A mov 0x31, #0x1F mov 0x32, #0x90 next1s: djnz 0x32, next1s djnz 0x31, next1s djnz 0x30, next1s ret end |
|
| Автор: | Zhuk72 [ Вт сен 15, 2020 10:26:50 ] |
| Заголовок сообщения: | Re: Плата LED&KEY (TM1638). Чтение кнопок, ассемблер. |
Когда такие вещи не работают сходу, самое лучшее средство диагностики - логический анализатор. В работе с МК он даже нужнее, чем осциллограф. Теоретически, если с индикацией проблем нет, значит данные отправляются правильно. У этого МК какие-нибудь средства дебаггинга имеются? Вообще странный выбор МК, совершенно голого, как я понял из его ДШ, и это при наличии однотактовых 8051 клонов от STC или Silabs. |
|
| Автор: | BOB51 [ Вт сен 15, 2020 11:40:01 ] |
| Заголовок сообщения: | Re: Плата LED&KEY (TM1638). Чтение кнопок, ассемблер. |
Там сама микросхема контроллера не такая уж и простая. Вот вариант несколько читабельного даташита: Вложение: Пока с таким "чудом" в собственных конструкциях дела не имел... |
|
| Автор: | Zhuk72 [ Вт сен 15, 2020 12:13:02 ] |
| Заголовок сообщения: | Re: Плата LED&KEY (TM1638). Чтение кнопок, ассемблер. |
Я имел дело с ТМ1637, да и то только с его индикацией. Таких 4-разрядных индикаторов за пару баксов полно на ибей и али. Кстати, подключал его тоже с 51-му в лице C8051F340, но писал на Си и к тому же там протокол обмена отличный от 1638: некое подобие извращенного I2C (присутствует start, stop, ack, но полностью отсутствует адресация слейва). Чтение с кнопок я тоже расписал, но чисто теоретически, т.к. кнопок на индикаторе не предусмотрено, а свои припаивать было неохота. |
|
| Автор: | musor [ Вт сен 15, 2020 13:48:47 ] |
| Заголовок сообщения: | Re: Плата LED&KEY (TM1638). Чтение кнопок, ассемблер. |
подобный комплект но на чипах тм1640 16 разрядоф и 20 кенопок применяется в десятках моделей кетянски весоф на LED на 51мк с внутреней памятью исходник для них открытый есть на сайте производителя |
|
| Автор: | Николай Савельев [ Ср сен 16, 2020 11:03:02 ] |
| Заголовок сообщения: | Re: Плата LED&KEY (TM1638). Чтение кнопок, ассемблер. |
Кажись разобрался. Данные в регистрах микросхемы присутствуют только когда кнопки нажаты, они там не сохраняются. Для того чтоб вычитывать кнопки, нужно постоянно вертеться в цикле. Содержимое регистров обновляется каждый цикл динамической индикации микрухи, частота динамической индикации в районе 300-400 Гц, довольно мало времени чтоб успеть прочитать. |
|
| Автор: | IN19 [ Вт мар 21, 2023 19:14:52 ] |
| Заголовок сообщения: | Re: Плата LED&KEY (TM1638). Чтение кнопок, ассемблер. |
Поэтому для клавиатуры их никто не использует. А для 8-разрядной индикации гораздо удобнее MAX7219 с SPI - готовых платок на Али полно. Там легко работает аппаратный SPI. |
|
| Автор: | Starichok51 [ Ср мар 22, 2023 12:21:16 ] |
| Заголовок сообщения: | Re: Плата LED&KEY (TM1638). Чтение кнопок, ассемблер. |
прекрасно работает чтение кнопок, и спешить никуда не надо. совершенно по фигу, как часто обновляются регистры кнопок. если кнопка нажата, то и чтение покажет, что она нажата. |
|
| Автор: | Shuspano [ Сб мар 25, 2023 07:09:40 ] |
| Заголовок сообщения: | Re: Плата LED&KEY (TM1638). Чтение кнопок, ассемблер. |
А как вы решили этот вопрос? Мне все еще интересно, т.к эти платы никуда не делись |
|
| Автор: | Starichok51 [ Сб мар 25, 2023 10:32:06 ] |
| Заголовок сообщения: | Re: Плата LED&KEY (TM1638). Чтение кнопок, ассемблер. |
а никак специально не решал - просто делаю чтение, когда нужно проверить кнопки. а периодичность запуска чтения прямо связана со скоростью реакции человека. чаще, чем способен человек нажимать кнопки, опрашивать нет смысла. я думаю, достаточно опрашивать кнопки 10-20 раз в секунду. если кнопка нажата, то при следующих опросах нужно сначала определить отпускание этой же кнопки, а уже потом проверять нажатие следующей (или этой же) кнопки. то есть, с чтением (опросом) проблем нет, а дальнейшую логику работы с кнопками каждый определяет сам. |
|
| Автор: | Shuspano [ Сб мар 25, 2023 10:51:44 ] |
| Заголовок сообщения: | Re: Плата LED&KEY (TM1638). Чтение кнопок, ассемблер. |
Просто тут проблема вырисовывается, что программа ничего другого не будет делать, только крутится в цикле на кнопках. Не инта, ничего. |
|
| Автор: | BOB51 [ Сб мар 25, 2023 11:36:29 ] |
| Заголовок сообщения: | Re: Плата LED&KEY (TM1638). Чтение кнопок, ассемблер. |
В принципе это равноценно "независимому контроллеру дисплея/клавиатуры", выполняемому на том же МК при помощи прерываний. Вполне вписывается в ход основной программы и не мешает ее исполнению (ежли конечно там чего высокоскоростного не используется). Только тогда смысл во внешнем контроллере теряется...
|
|
| Автор: | Starichok51 [ Сб мар 25, 2023 15:28:36 ] |
| Заголовок сообщения: | Re: Плата LED&KEY (TM1638). Чтение кнопок, ассемблер. |
Shuspano, я же сказал, что проверять кнопки нужно 10 раз в секунду. а внутри интервала 100 мс программа будет делать всё, что тебе угодно. а прерывание от таймера обязательно должно быть, чтобы отмерять нужные интервалы времени. в том числе и интервал 100 мс для опроса кнопок. |
|
| Автор: | Alex_641 [ Сб мар 25, 2023 16:01:41 ] |
| Заголовок сообщения: | Re: Плата LED&KEY (TM1638). Чтение кнопок, ассемблер. |
Starichok51 писал(а): прерывание от таймера обязательно должно быть, чтобы отмерять нужные интервалы времени Можно и без прерываний. Обнуляем таймер, и через насколько операндов ( пишу на С ), приращиваем счётчики времени чего угодно на значение таймера, обнуляем последний, и до следующего захода. Это в случае если не нужна большая точность. Но для нажатия кнопок вполне покатит. |
|
| Автор: | Starichok51 [ Сб мар 25, 2023 17:07:11 ] |
| Заголовок сообщения: | Re: Плата LED&KEY (TM1638). Чтение кнопок, ассемблер. |
а можно вообще без таймера. программа ходит по кругу и не важно, сколько времени тратится на этот круг. |
|
| Автор: | musor [ Сб мар 25, 2023 17:22:24 ] |
| Заголовок сообщения: | Re: Плата LED&KEY (TM1638). Чтение кнопок, ассемблер. |
для часоф /таймера способ не годный ибо дает погрешность но для серфинга по менюшкам и выбора режима наверно сайдет а вот кнопку пуск /стоп таймера или корекция часоф в хх часоф 00 мин и секунд надо обработать мгновено минуя эти ципки по вазможности но там и клок счета задает внешним RTC который можно и повесить часть функций |
|
| Автор: | Alex_641 [ Сб мар 25, 2023 17:36:40 ] |
| Заголовок сообщения: | Re: Плата LED&KEY (TM1638). Чтение кнопок, ассемблер. |
Да вот есть подозрение , что прерывания от таймера плохо влияют на точность показаний АЦП. |
|
| Автор: | Starichok51 [ Сб мар 25, 2023 17:40:24 ] |
| Заголовок сообщения: | Re: Плата LED&KEY (TM1638). Чтение кнопок, ассемблер. |
musor, а где ты в теме увидел речь про часы? речь была только про работу с кнопками. Добавлено after 2 minutes 18 seconds: Alex_641, а у меня есть подозрение, что плохо понимаешь архитектуру МК. |
|
| Автор: | Jack_A [ Сб мар 25, 2023 17:50:24 ] |
| Заголовок сообщения: | Re: Плата LED&KEY (TM1638). Чтение кнопок, ассемблер. |
Можно и без прерываний. Можно и вообще без МК В программистском форуме встечаю задачки от ленивых студентов: "Выполнить ..., не используя циклы и ветвления" и т.п. Ну если это в учебных целях, то ещё можно как-то понять: развить у стюденей разнообразие приёмов программирования. Для конкретной же работы, считаю, лучше применять самый эффективный и экономный метод. Если прерывания, к примеру, по таймеру имеются в МК - зачем запрещать себе их использовать? Не надо их бояться. Человек, не использующий предоставленные дивайсом возможности, напоминает мне персонажа анекдота: билет купил, но пошёл пешком за трамваем. Насчёт точности АЦП - да, вроде есть рекомендации для уменьшения шумов на время преобразования останавливать всю периферию. Но если точность выбрана на пределе возможностей МК и только "всем молчать!" обеспечивает уменьшение шума в cамом младшем разряде - значит, неверно выбран МК и(или) обрабатывающий софт. Такое моё IMHO |
|
| Автор: | Alex_641 [ Сб мар 25, 2023 17:54:39 ] |
| Заголовок сообщения: | Re: Плата LED&KEY (TM1638). Чтение кнопок, ассемблер. |
Хорошо старичёк ! Давай тогда расскажи как видишь ты ? Я расскажу как думаю я . Работает программа , происходит считывание АЦП, и тут .... прерывание то таймеру ... АЦП идёт накуй , само собой , прерывание же ! Да таймеры времени правильно считают время. НО а что с прерванным АЦП происходит ? Он ( АЦП ) получает неизвестно что !? |
|
| Страница 1 из 2 | Часовой пояс: UTC + 3 часа |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|


