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

Навеяно 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
Да, действительно древний чип. Я бы выбрал STM8S за 30-35 центов, если уж цена так важна, или еще лучше Cortex-M0 за 70-80. Нет смысла тратить время на умирающие технологии.
- coredumped
- 15 августа 2015, 18:46
- ↑
- ↓
Это 51-ая архитектура-то умирающая? Например, в ВПК она применяется оооочень как широко, начиная от мин и заканчивая подлодками.
Да, но… мы что, тут мины что-ли делаем или подлодки выпускаем?
Наверно не стоит принимать исключение за правило.
Правило — это узкий сектор на рынке (в жизни) у архитектуры i51.
Исключение — это применение i51 в очень узком секторе.
Извините, что хочу дать совет.
Найдите время и силы, для прочтения Платона «Избранные диалоги». Эта книга совсем не программистская и не для электронщиков. Она учит логике, учит правильно мыслить, учит правильно понимать природу вещей. Учит мыслить чисто, прозрачно, легко, гладко. В результате освоения этой науки у человека факты и явления не будут противоречить друг другу. Прочитавший будет понимать — что есть главное, а что второстепенное. Что есть правило, а что есть исключение. Текст книги для чтения и восприятия довольно-таки тяжелый, и вообще на какие-то отвлеченные темы. Но, тем не менее, после прочтения книги мозги будут работать чётко и — самое главное — правильно. Крайне рекомендую!
Еще раз мои извинения за совет!
Наверно не стоит принимать исключение за правило.
Правило — это узкий сектор на рынке (в жизни) у архитектуры i51.
Исключение — это применение i51 в очень узком секторе.
Извините, что хочу дать совет.
Найдите время и силы, для прочтения Платона «Избранные диалоги». Эта книга совсем не программистская и не для электронщиков. Она учит логике, учит правильно мыслить, учит правильно понимать природу вещей. Учит мыслить чисто, прозрачно, легко, гладко. В результате освоения этой науки у человека факты и явления не будут противоречить друг другу. Прочитавший будет понимать — что есть главное, а что второстепенное. Что есть правило, а что есть исключение. Текст книги для чтения и восприятия довольно-таки тяжелый, и вообще на какие-то отвлеченные темы. Но, тем не менее, после прочтения книги мозги будут работать чётко и — самое главное — правильно. Крайне рекомендую!
Еще раз мои извинения за совет!
У меня 70% датчиков на архитектуре i51. Всего тысячи две, поставщики Германия и Голландия. Это похоже на узкий сектор?
Ну зачем же Вы так! На Вашей «колокольне» — да, это не узкий сектор. И я так думаю, что в мире найдётся не одна «колокольня», которые выпускают свои изделия исключительно только на i51.
Но дело в том, что в мире таких «колоколен» не так уж и много. О чём, собственно, народ Вам и говорит. А судить о мире со своей колокольни… Ну, не знаю.
Но дело в том, что в мире таких «колоколен» не так уж и много. О чём, собственно, народ Вам и говорит. А судить о мире со своей колокольни… Ну, не знаю.
По моей информации, MCS51 до сих пор остается одним из самых распространенных контроллеров и умирать не собирается (впрочем, уж если 8048, как я слышал, до сих пор широко используется...).
Скорее из-за изобилия легаси. Ну и наличия готовых инструментальных средств (компиляторы, IDE, etc), что делает это ядро выгодным в качестве основы для своего МК (примерно как сейчас с ARM'ами дело обстоит).
Еще один любопытный вопрос — как все это обстоит с точки зрения всяких патентов и лицензий. Ядро ARM, например, можно лицензировать, но нельзя создать свое совместимое ядро (точнее, можно, но лицензировав право на это). Видимо, или 8051 лицензируется, или вообще не закрыто лицензиями и иже с ними… (да, мне лень гуглить и я надеюсь, что кто-то уже знакомый с ситуацией ее осветит)
Еще один любопытный вопрос — как все это обстоит с точки зрения всяких патентов и лицензий. Ядро ARM, например, можно лицензировать, но нельзя создать свое совместимое ядро (точнее, можно, но лицензировав право на это). Видимо, или 8051 лицензируется, или вообще не закрыто лицензиями и иже с ними… (да, мне лень гуглить и я надеюсь, что кто-то уже знакомый с ситуацией ее осветит)
Положи исходник и схему в zip и зааттачь к топику.
Последнее время, решил притормозить с изучением AVR-ов, и переключился на MCS-51. Потому что интересная архитектура, с очень удобным ассемблером. Писать стало реально удобнее, чем на ассемблере для AVR-ок.А нафига, собственно, писать на ассемблере?
Все задержки циклами, никаких чтений состояния флага шины (BF).Почему? Лишних ножек — до жопы, можно не только RW подключить, но и восьмибитную шину. Можно даже подключить его как внешнее ОЗУ.
Его в скором времени перепишу, как в 4 томе ФрунзеА зачем?
>> Лишних ножек — до жопы, можно не только RW подключить, но и восьмибитную шину. Можно даже подключить его как внешнее ОЗУ.
Это да, использовать архитектуру i8051 и подключать HD44780 как на AVR, это неизящно.
Это да, использовать архитектуру i8051 и подключать HD44780 как на AVR, это неизящно.
AVR-ки тоже бывают с интерфейсом для срама, только редко (ну и 8051-е бывают без него, те же AT89C2051, весьма популярные у китайцев).
P.S. Для цитирования кнопочка есть (и тег <blockquote>).
P.S. Для цитирования кнопочка есть (и тег <blockquote>).
Писал оь этом:
<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...
<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...
А зачем?Потому что там оптимальнее написано.
Почему? Лишних ножек — до жопыЭто сейчас их до жопы, а в будущем там будет еще 8 светодиодов состояния (охраняемых зон), а потом еще чего-нибудь захочу добавить… Вот изначально определил для себя, что из дисплея читать ничего не буду, поэтому RW на землю. Дисплей физически на одной плате с клавиатурой будет, поэтому 4-бит шины хватит, глюков не словлю. Короче везде старался здоровый минимализм проявлять при планировке.
А нафига, собственно, писать на ассемблере?Мне это просто нравиться, и еще, для Си я пока слишком туп))
Все уже придумано до нас:
<a href=«Типовая схема подключения LCD-модуля к микроконтроллерам MCS-51»«www.gaw.ru/html.cgi/txt/app/lcd/51to_lcd.htm»>Your text to link...
<a href=«Типовая схема подключения LCD-модуля к микроконтроллерам MCS-51»«www.gaw.ru/html.cgi/txt/app/lcd/51to_lcd.htm»>Your text to link...
>> Нет смысла тратить время на умирающие технологии.
Еще один гробовщик неунывающей архитектуры. Вся Европа и Китай ее используют и не знают что она умирает.
>> А нафига, собственно, писать на ассемблере?
А нафига, собственно, не писать на нем?
Еще один гробовщик неунывающей архитектуры. Вся Европа и Китай ее используют и не знают что она умирает.
>> А нафига, собственно, писать на ассемблере?
А нафига, собственно, не писать на нем?
А нафига, собственно, писать на нем кроме как для ознакомления с ядром процессора и оптимизации тех мест, где это действительно необходимо (что бывает крайне редко)?
Не соглашусь. Иногда просто поглядев ассемблерный листинг после ЯВО, просто изумляешься. А бывают случаи поддержки «чужого» оборудования без документации. Жизнь как всегда не вписывается в жесткие рамки, знать (а лучше хорошо знать) и уметь применять ассемблер всегда полезно. ИМХО. Кроме того его знание дисциплинирует при написании на ЯВО.
Я разве выступал против знания асма? Оно категорически полезно. Я только не понимаю, зачем на нем писать — за исключением пары случаев. Но переход на другой проц (против которого тоже ничего не имею, кстати — прикольная архитектура) «потому что у него асм удобнее» — КМК, уже выходит за рамки этих случаев.
P.S. Что такое ЯВО? ЯВУ — знаю.
P.S. Что такое ЯВО? ЯВУ — знаю.
>> Я только не понимаю, зачем на нем писать…
Потому что так многим проще. Периодически всплывают топики от начинающих сишников. Что прописать, как подключить и т.д.
Я неплохо писал на DELPHI, «С» понимаю в пределах перевода на Паскаль, изучать его не лежит душа. Мне проще на ассемблере, или применительно к CPLD в схемном редакторе…
Потому что так многим проще. Периодически всплывают топики от начинающих сишников. Что прописать, как подключить и т.д.
Я неплохо писал на DELPHI, «С» понимаю в пределах перевода на Паскаль, изучать его не лежит душа. Мне проще на ассемблере, или применительно к CPLD в схемном редакторе…
Красивая работа в ретро-стиле. Просто и со вкусом. Как «Нива-классика».
- count_enable
- 16 августа 2015, 01:18
- ↓
Фото получившегося макета:Ты издеваешься? Воткни их в топик (не аттачами, а картинками, как схему).
ifolder.com.ua/2j3ojb6t26h7.html
ifolder.com.ua/bmanjhj71pcc.html
ifolder.com.ua/xb4e114k5ooz.html
Нет, я просто никак не могу найти нормальный хостинг картинок. Прикрепил как и просили, но пришлось ужать качество.
Да не аттачами, а картинками воткни… Правда, тогда их до 720рх по ширине ужмет, но можешь оставить в аттачах увеличенные версии и сделать на них ссылку по клику на картинке.
Чтобы разместить как схему, на основной станице, требует ужать меньше 90 кБ, и оно при таком качестве становиться УГ. Ужимаю прогой XnView. Изначальный размер почти 1 мБ.
Так уже лучше. Но качество отвратительное. Возьми оригинальные фотографии, откадрируй их, отресайзи и сохрани с нормальным качеством (75-85).
Это USB-UART преобразователь на базу CH340G. Я ее люблю, потому что она в паябельном корпусе (SO-16), не то что FT232, ну и цена, дешевле не бывает. Я под нее купил переходничек (http://e-voron.dp.ua/catalog/021789), распаял на нем всю обвязку (кварц и 3 конденсатора) и теперь тыкаю во все свои макетки.
Быть может буду боянистом, но мне больше понравилась такая реализация: www.getchip.net/posts/060-drajjver-sensornojj-klaviatury-touch-me-na-attiny2313/
Тут всякие «украшательства»: www.getchip.net/posts/061-prostaya-sensornaya-panel-keypad/
Найдите что-нибудь подобное под MCS-51. Только не на Силабсах с интергированным драйвером сенсороной клавиатуры. А именно написаное ручками под любой контроллер. И точно не будете боянистом.
А в чем проблема? Делаешь точно так же и все. Правда, под кнопки подойдут только те пины, где нет встроенной подтяжки (на клонах 8051, вроде AT89C51, их восемь, на AT89Cx051 — два, но 8 линий вполне достаточно для матрицы 4х4). И может не хватить быстродействия.
Если же взять вариант с более быстрым ядром и нормальным GPIO — вообще без вопросов.
Если же взять вариант с более быстрым ядром и нормальным GPIO — вообще без вопросов.
Да я уже задавался этим вопросом. forum.easyelectronics.ru/viewtopic.php?f=6&t=21620
Просто пока руки не дошли.
Просто пока руки не дошли.
Комментарии (63)
RSS свернуть / развернуть