Наброски клавиатурного контроллера

Я, как и в прошлый раз, многословен и не лаконичен.
Навеяно 2 темами с главной страницы сайта easyelectronics.ru/soprocessor-vvoda-vyvoda.html
и easyelectronics.ru/otladochnyj-pult.html
Решил я себе забацать этакий клавиатурный контроллер. Основная его задача, это опрос матрицы кнопок, отображение набраного на экране (HD44780), и отсылка по какому-нибудь простому протоколу (пока взял UART). Есть планы по его применению (блок ввода пароля простой сигнализация для дома).


Последнее время, решил притормозить с изучением AVR-ов, и переключился на MCS-51. Потому что интересная архитектура, с очень удобным ассемблером. Писать стало реально удобнее, чем на ассемблере для AVR-ок. Когда изучал AVR, то частенько прибегал к Algorithm Builder, чтобы составить нужный алгоритм, и иногда потом даже не переписывал на чистом асме, ибо было влом, а так и оставлял проект на Билдере.
Устройство реализовано на микроконтроллере AT89S52. Потому что недорогой (я нашел по 0,4 бакса у себя по боком, а не в Китае), много ножек, и программируется USBASP-ом (последнее особенно доставило). Из недостатков – нет I2C (незначительно, реализуется програмно), обязателен кварц с конденсаторами (а если используеться UART, то это все равно неизбежно), и отсутствие EEPROM (а вот это западло, внешню сейчас цеплять просто не рентабельно, проще купить AVR, потому что MCS-51 с EEPROM (та же AT89S8252) стоит в 2 раза дороже AtMega8 – пошли нафиг). Так что мои устройства на базе MCS-51 не будут иметь изменяемых пользовательских настроек (эх…).
По алгоритму. Старался делать все просто и без заморочек. Инициализация HD44780 по стандартному алгоритму из интерентов. Все задержки циклами, никаких чтений состояния флага шины (BF). По Timer0 организован опрос матричной клавиатуры. Его в скором времени перепишу, как в 4 томе Фрунзе, сперва проверка всего порта, потом, если его состояние отличается (нажата кнопка), перебор всех комбинаций. У меня же пока проверка постолбцово, а уже потом покнопочно. UART реализован вообще без использования прерываний, просто анализирую флаги TI/RI.
На данный момент устройство умеет отображать коды нажатых клавиш (ACSII) на дисплей (1,2,3,4,5,6,7,8,9,0,*,#, А, В, С,D), и отсылать их по UART на скорости 9600 б/с, а также принимать по UART на той же скорости любые символы, введенные с клавиатуры в строке терминала, и отображать их на дисплее.
Устройство имеет пищалку с генератором (и для меня это таки фича, а не баг), которая озвучивает каждое нажатие кнопки.
Все писалось и мозговалось самостоятельно, поэтому неоптимально и кривовато. Зато написано полностью самостоятельно, и поэтому если я вдруг потеряю исходник, снова смогу написать.
Программа написана в среде MCStudio. Потому что русскоязычная, бесплатная, и с незначительными для меня ограничениями (<2 кБ кода), которые я к тому же, с посторонней помощью, сумел преодолеть.
Впервые для себя постарался разделить проект на отдельные модули, для удобства последующего использования, поэтому каждая функция (инициализация и отображение на HD44780, инициализация Timer0 и опрос матрицы кнопок, инициализация и работа с UART) выделены в отдельные ассемблерные файлы. Так как ассемблер в MCStudio однопроходной, пришлось немного поиграться с компоновкой всего этого в 1 компилируемый проект. Вроде получилось, хотя и не совсем изящно, инклудники (include *.asm) всех самописаных модулей пришлось объявлять не в самом начале главного файла проекта.
Матрица кнопок не имеет подтяжек и защитных диодов (ограничительных резисторов), поэтому в таком виде ее не стоит применять с микроконтроллерами AVR, можно повредить порт при одновременном нажатии нескольких кнопок. В MCS-51 порты устроены проще, Pull-up всегда включен, и замыкания на землю или между собой порты абсолютно не бояться. Единственное, что для них страшно – замыкание на VCC, но этого схемой не предусмотрено.
Дисплей применён двухстрочный, по 16 символов.
Схема устройства рисовалась в формате Splan 7.0, но так как этот формат загрузить нельзя, то прикладываю просто изображением.

Разводку платы пока не делал, так как макетировал на плате CRS-K050, но в будущем планирую развести плату под AT89S52-AU (QFP44).
Фото макета:


Исходник в MCStudio, схема в Splan 7.0, и в виде картинки в прикрепленных файлах.
  • +6
  • 15 августа 2015, 17:30
  • Gnusmas
  • 1

Комментарии (63)

RSS свернуть / развернуть
Статья, я думаю, где-то очень долго лежала.
+4
Да, действительно древний чип. Я бы выбрал STM8S за 30-35 центов, если уж цена так важна, или еще лучше Cortex-M0 за 70-80. Нет смысла тратить время на умирающие технологии.
0
Это 51-ая архитектура-то умирающая? Например, в ВПК она применяется оооочень как широко, начиная от мин и заканчивая подлодками.
+1
Да любят ради красного словца… Про умирающие архитектуры, про мертвые языки…
+1
Да, но… мы что, тут мины что-ли делаем или подлодки выпускаем?

Наверно не стоит принимать исключение за правило.
Правило — это узкий сектор на рынке (в жизни) у архитектуры i51.
Исключение — это применение i51 в очень узком секторе.

Извините, что хочу дать совет.
Найдите время и силы, для прочтения Платона «Избранные диалоги». Эта книга совсем не программистская и не для электронщиков. Она учит логике, учит правильно мыслить, учит правильно понимать природу вещей. Учит мыслить чисто, прозрачно, легко, гладко. В результате освоения этой науки у человека факты и явления не будут противоречить друг другу. Прочитавший будет понимать — что есть главное, а что второстепенное. Что есть правило, а что есть исключение. Текст книги для чтения и восприятия довольно-таки тяжелый, и вообще на какие-то отвлеченные темы. Но, тем не менее, после прочтения книги мозги будут работать чётко и — самое главное — правильно. Крайне рекомендую!
Еще раз мои извинения за совет!
0
У меня 70% датчиков на архитектуре i51. Всего тысячи две, поставщики Германия и Голландия. Это похоже на узкий сектор?
+3
Ну зачем же Вы так! На Вашей «колокольне» — да, это не узкий сектор. И я так думаю, что в мире найдётся не одна «колокольня», которые выпускают свои изделия исключительно только на i51.

Но дело в том, что в мире таких «колоколен» не так уж и много. О чём, собственно, народ Вам и говорит. А судить о мире со своей колокольни… Ну, не знаю.
0
По моей информации, MCS51 до сих пор остается одним из самых распространенных контроллеров и умирать не собирается (впрочем, уж если 8048, как я слышал, до сих пор широко используется...).
+1
да я ведь не возражаю! Пусть живет и приносит пользу!

Да, Вы полистайте хотя бы этот сайт — ведь в основном-то люди про i51 толкуют, а не про AVR и Cortex-ы. Или что?
0
Тем более — пусть толкует про MCS51, а то про него почти ничего нет. В отличие от.
Ну а по причинам понятно — любители менее инерционная и повязанная на легаси масса.
+1
я так понял что распространены 51 из-за того что можно дешево внедрить в свой камень (а встречаются они как раз таки в составе чьих то решений).
0
Скорее из-за изобилия легаси. Ну и наличия готовых инструментальных средств (компиляторы, IDE, etc), что делает это ядро выгодным в качестве основы для своего МК (примерно как сейчас с ARM'ами дело обстоит).

Еще один любопытный вопрос — как все это обстоит с точки зрения всяких патентов и лицензий. Ядро ARM, например, можно лицензировать, но нельзя создать свое совместимое ядро (точнее, можно, но лицензировав право на это). Видимо, или 8051 лицензируется, или вообще не закрыто лицензиями и иже с ними… (да, мне лень гуглить и я надеюсь, что кто-то уже знакомый с ситуацией ее осветит)
0
ну я собственно о том же. почему именно дешево вариантов может быть много. просто самая очевидная причина использования морально устарелых во всех отношениях ядер.
0
Например EFM8 от Silab на ядре 8051.
0
да много чего на 51ядре. вопрос в том, есть ли что то у ядра примечательного помимо распространенности и древности?
0
А есть ли вообще у какого-то ядра что-то по настоящему примечательное? Все они по большому счету одно и то же.
+1
Да!
Совсем забыл спросить — а минус-то мне за что поставили? А плюсик Вам — за что?
-1
А что с вашим блогом случилось?
0
Да-а, прикрыл за ненадобностью. Что-то перестал ощущать необходимость писать. Считайте, что приключился депресняк. Может выйду, может нет. Может выйду в каком-нибудь другом обличии. А может всё умерло. Не знаю, обещать ничего не буду.
0
Что-то перестал ощущать необходимость писать.
Но это же не означает, что он перестал быть нужен тем, кто его читает…
0
0
Да, но… мы что, тут мины что-ли делаем или подлодки выпускаем?
А почему бы не использовать то что успешно работает в серьёзных вундервафлях?
Наверно не стоит принимать исключение за правило.
ВПК — не исключение, а пример. Причём пример хороший и далеко не единственный.
+2
ТС просто открыл для себя систему команнд CISC, которая явно удобнее для ассемблера чем RISC.
0
Положи исходник и схему в zip и зааттачь к топику.
Последнее время, решил притормозить с изучением AVR-ов, и переключился на MCS-51. Потому что интересная архитектура, с очень удобным ассемблером. Писать стало реально удобнее, чем на ассемблере для AVR-ок.
А нафига, собственно, писать на ассемблере?
Все задержки циклами, никаких чтений состояния флага шины (BF).
Почему? Лишних ножек — до жопы, можно не только RW подключить, но и восьмибитную шину. Можно даже подключить его как внешнее ОЗУ.
Его в скором времени перепишу, как в 4 томе Фрунзе
А зачем?
+1
  • avatar
  • Vga
  • 15 августа 2015, 18:40
>> Лишних ножек — до жопы, можно не только RW подключить, но и восьмибитную шину. Можно даже подключить его как внешнее ОЗУ.
Это да, использовать архитектуру i8051 и подключать HD44780 как на AVR, это неизящно.
0
AVR-ки тоже бывают с интерфейсом для срама, только редко (ну и 8051-е бывают без него, те же AT89C2051, весьма популярные у китайцев).
P.S. Для цитирования кнопочка есть (и тег <blockquote>).
0
Писал оь этом:
<a href=Модуль AT89C51ED2 для Pinboard II«we.easyelectronics.ru/pinboard2/modul-at89c51ed2-dlya-pinboard-ii.html»>I -
<a href=Модуль AVR ATmega162 для Pinboard II«we.easyelectronics.ru/pinboard2/modul-avr-atmega162-dlya-pinboard-ii.html»>Your text to link...
0
А зачем?
Потому что там оптимальнее написано.
Почему? Лишних ножек — до жопы
Это сейчас их до жопы, а в будущем там будет еще 8 светодиодов состояния (охраняемых зон), а потом еще чего-нибудь захочу добавить… Вот изначально определил для себя, что из дисплея читать ничего не буду, поэтому RW на землю. Дисплей физически на одной плате с клавиатурой будет, поэтому 4-бит шины хватит, глюков не словлю. Короче везде старался здоровый минимализм проявлять при планировке.
А нафига, собственно, писать на ассемблере?
Мне это просто нравиться, и еще, для Си я пока слишком туп))
0
Все уже придумано до нас:
<a href=«Типовая схема подключения LCD-модуля к микроконтроллерам MCS-51»«www.gaw.ru/html.cgi/txt/app/lcd/51to_lcd.htm»>Your text to link...
0
Я читал эту тему, но мне порт 0 нужен для светодиодов на будущее, он тянет аж 26 мА, тогда как остальные только 15 мА. Это позволяет подключать к нему светодиоды напрямую, без усиливающих транзисторов. Но вообще идея классная, у меня эта статья в закладках есть))
0
15мА для СИДов за глаза. SWG жаловался, что с современными СИДами и 2мА бывает слишком много.
0
Порт 0 у i51 квазидвунаправленный, хорошо тащить он будет только вниз, т.е. индикатор с ОА. Вверх зависит от нагрузочных резисторов, которые вы сами и спроектируете…
0
Короче везде старался здоровый минимализм проявлять при планировке.
ИМХО, это уже нездоровый.
для Си я пока слишком туп))
Так исправляться надо. Практикой :)
0
>> Нет смысла тратить время на умирающие технологии.
Еще один гробовщик неунывающей архитектуры. Вся Европа и Китай ее используют и не знают что она умирает.
>> А нафига, собственно, писать на ассемблере?
А нафига, собственно, не писать на нем?
+4
А нафига, собственно, писать на нем кроме как для ознакомления с ядром процессора и оптимизации тех мест, где это действительно необходимо (что бывает крайне редко)?
+1
Не соглашусь. Иногда просто поглядев ассемблерный листинг после ЯВО, просто изумляешься. А бывают случаи поддержки «чужого» оборудования без документации. Жизнь как всегда не вписывается в жесткие рамки, знать (а лучше хорошо знать) и уметь применять ассемблер всегда полезно. ИМХО. Кроме того его знание дисциплинирует при написании на ЯВО.
0
Я разве выступал против знания асма? Оно категорически полезно. Я только не понимаю, зачем на нем писать — за исключением пары случаев. Но переход на другой проц (против которого тоже ничего не имею, кстати — прикольная архитектура) «потому что у него асм удобнее» — КМК, уже выходит за рамки этих случаев.
P.S. Что такое ЯВО? ЯВУ — знаю.
+1
Что такое ЯВО? ЯВУ — знаю.
Тоже самое, перед этим питал новости из Ямало-Ненецкого автономнго округа, отсюда и О.
0
>> Я только не понимаю, зачем на нем писать…
Потому что так многим проще. Периодически всплывают топики от начинающих сишников. Что прописать, как подключить и т.д.
Я неплохо писал на DELPHI, «С» понимаю в пределах перевода на Паскаль, изучать его не лежит душа. Мне проще на ассемблере, или применительно к CPLD в схемном редакторе…
0
Потому что так многим проще.
Это да. Асм действительно простой язык. Но С все же более эффективный инструмент, хотя и более сложный.
+1
«Нужно программировать в машинных кодах, чтобы потом кайфовать от ассемблера.
Нужно писать на ассемблере, чтобы потом кайфовать от Си.
Нужно писать на Си, чтобы потом кайфовать от Питона.
Нужно писать на Питоне, чтобы просто кайфовать.»
+3
Откуда это?)
0
В каком-то из хабросрачей видел)
0
Хоть камень и старый, но всёравно автору зачёт за статью. Кому-нибудь пригодится.
0
Красивая работа в ретро-стиле. Просто и со вкусом. Как «Нива-классика».
+1
Фото получившегося макета:
ifolder.com.ua/2j3ojb6t26h7.html
ifolder.com.ua/bmanjhj71pcc.html
ifolder.com.ua/xb4e114k5ooz.html
Ты издеваешься? Воткни их в топик (не аттачами, а картинками, как схему).
+1
  • avatar
  • Vga
  • 16 августа 2015, 13:22
Нет, я просто никак не могу найти нормальный хостинг картинок. Прикрепил как и просили, но пришлось ужать качество.
0
Да не аттачами, а картинками воткни… Правда, тогда их до 720рх по ширине ужмет, но можешь оставить в аттачах увеличенные версии и сделать на них ссылку по клику на картинке.
0
Чтобы разместить как схему, на основной станице, требует ужать меньше 90 кБ, и оно при таком качестве становиться УГ. Ужимаю прогой XnView. Изначальный размер почти 1 мБ.
0
Не ужать требуется, а отресайзить до 720рх по ширине. А ты там похоже JPEG Quality крутишь.
0
Да, я с качеством игрался. Вроде сделал, но без ссылок пока.
0
Так уже лучше. Но качество отвратительное. Возьми оригинальные фотографии, откадрируй их, отресайзи и сохрани с нормальным качеством (75-85).
0
Вроде справился, спасибо за подсказки.
0
Куда лучще.

А чего это за сопля платка рядом с USB-разъемом?
0
Это USB-UART преобразователь на базу CH340G. Я ее люблю, потому что она в паябельном корпусе (SO-16), не то что FT232, ну и цена, дешевле не бывает. Я под нее купил переходничек (http://e-voron.dp.ua/catalog/021789), распаял на нем всю обвязку (кварц и 3 конденсатора) и теперь тыкаю во все свои макетки.
0
Ага, это объясняет, почему плата так выглядит :) Хотя я и не понимаю, что мешало разместить чип прямо на основной плате.
0
Помешало отсутствие посадочного места под него, На плате только дырки с шагом 2,54 мм, а преобразователь в SO-16.
0
А, это макетка такая… Мне было показалось, что это ЛУТ.
0
Быть может буду боянистом, но мне больше понравилась такая реализация: www.getchip.net/posts/060-drajjver-sensornojj-klaviatury-touch-me-na-attiny2313/
0
Тут всякие «украшательства»: www.getchip.net/posts/061-prostaya-sensornaya-panel-keypad/
0
Найдите что-нибудь подобное под MCS-51. Только не на Силабсах с интергированным драйвером сенсороной клавиатуры. А именно написаное ручками под любой контроллер. И точно не будете боянистом.
0
А в чем проблема? Делаешь точно так же и все. Правда, под кнопки подойдут только те пины, где нет встроенной подтяжки (на клонах 8051, вроде AT89C51, их восемь, на AT89Cx051 — два, но 8 линий вполне достаточно для матрицы 4х4). И может не хватить быстродействия.
Если же взять вариант с более быстрым ядром и нормальным GPIO — вообще без вопросов.
0
Да я уже задавался этим вопросом. forum.easyelectronics.ru/viewtopic.php?f=6&t=21620
Просто пока руки не дошли.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.