Знакосинтезирующий ЖКИ 1602 и клавиатура: экономим выводы микроконтроллера

derdemons
Offline
Зарегистрирован: 22.09.2018

Привет всем! Мой возраст уже близок к пенсионному, студентом не был, курсовую не писал, другим помогал чем мог. Ради борьбы с систематическим пьянством немного увлекаюсь радиоэлектронными поделками. Читать по русски умею, с гуглом знаком, про этот магазин знаюhttp://arduino.ru/forumy/ishchu-ispolnitelya , но туда не пойду. В тему "Программирование" хожу регулярно и сам посылаю но как и другой новичок туплю порой на ровном месте.

Собственно теперь сам вопрос : 

  Имеется один проект на 328 меге управления чего-то там чем-то там. Есть необходимость для экономии пинов подключить их по вот такой схеме:

Взято отсюда:http://kmpu.ru/other/zhki_obedinenie-s-knopkami/index.html , к сожалению там только теория.

 Ищу образец рабочего кода или его часть или ссылку на пример использования такого подключения кнопок. Гугл молчит либо всё переводит на  ссылку данную выше

nik182
Offline
Зарегистрирован: 04.05.2015

Простите не понимаю какие проблемы? Есть код для кнопок. Есть код для вывода на дисплей. В чем проблема в коде кнопок перед опросом кнопок  перевести ноги на вход  с помощью  pinmode,  а после опроса обратно вернуть на выход? https://doc.arduino.ua/ru/prog/PinMode

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

А чего там особенного - переключили, например, PD7 на вход, считали, переключили на выход. И так далее.

Хотя, ИМХО, проще сэкономить ножки, подключив дисплей по I2C.

sadman41
Offline
Зарегистрирован: 19.10.2016

Я тоже за I2C, а то ить кнопку может и заклинить.

b707
Offline
Зарегистрирован: 26.05.2017

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

 

nik182
Offline
Зарегистрирован: 04.05.2015

Ну заклинит и что? У меня часики с будильником на тиньке25 и семисегментниках тикают уже третий год. Ног мало. Приходится только так - переключением входов кнопки читать. Некоторые сегменты загораются при нажимании кнопок - за одно видно что кнопка нажата. А на 1602 даже такого эффекта не добиться.    

sadman41
Offline
Зарегистрирован: 19.10.2016

b707 пишет:

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

Тут, на форуме, люди пишут, что у них МП39/42 ещё не все истрачены, а ты удивляешься, что на Меге8 клепают штуки-дрюки...

Из квартиры среднестатистического советского радиогубителя менее 100Кг металла ещё никто не выносил.

-NMi-
Offline
Зарегистрирован: 20.08.2018

derdemons пишет:

Собственно теперь сам вопрос : 

Всё это будет работать без проблем. Единственное, необходимо сделать так, чтобы вывод на дисплей НИКОГДА не совпадал с опросом кнопок. Например, через флаговые поля: один раз в секунду вывод на дисплей и ~20 раз в секунду опрос кнопок. Флаги естественно взаимоисключающие. Резисторы на кнопки по одному килоому даже при заедании кнопки(ок) никак не скажутся на выводе в дисплей.

sadman41
Offline
Зарегистрирован: 19.10.2016

nik182 пишет:

Ну заклинит и что? 

А, у него там через резисторы кнопки на граунд. А так бы пыхнул вывод немного и всё ))

Поспешил опять ))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

nik182 пишет:

в коде кнопок перед опросом кнопок  перевести ноги на вход  с помощью  pinmode,  а после опроса обратно вернуть на выход?

А если, не дай Бог, юзер сдуру кнопку жамкать когда попало начнёт? Типа в момент обновления экрана? Не нравится мне такое решение что-то. От выгорания спасут резисторы, а вот от сбоя в работе дисплея не спасёт ничто.

nik182
Offline
Зарегистрирован: 04.05.2015

Какие флаги? Какие битовые поля? Переключил ногу на ввод - считал - переключил на выход. Всё. Весь вывод на 1602 без прерываний. Никогда ввод и вывод не пересекутся. 

b707
Offline
Зарегистрирован: 26.05.2017

sadman41 пишет:

Тут, на форуме, люди пишут, что у них МП39/42 ещё не все истрачены, а ты удивляешься, что на Меге8 клепают штуки-дрюки...

я не про Мегу8 - в статье автор изгаляется. чтоб на чипе без АЦП - ATMega8515 - тоже работало :)

nik182
Offline
Зарегистрирован: 04.05.2015

ЕвгенийП пишет:

А если, не дай Бог, юзер сдуру кнопку жамкать когда попало начнёт? Типа в момент обновления экрана? Не нравится мне такое решение что-то. От выгорания спасут резисторы, а вот от сбоя в работе дисплея не спасёт ничто.

Ничего не произойдёт. Дисплей пишет только по фронту Е. Е к кнопкам не подключен. Код выставленный процессором кнопками не поломать. 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

nik182 пишет:

Никогда ввод и вывод не пересекутся. 

Ну как же не пересекутся? Вы перевели на выход и подали туда HIGH (в процессе вывода на дисплей), а я кнопку нажал. Конечно резистор тут же образует делитель, но с чем - хз. И что реально пойдёт на дисплей, тоже хз.

-NMi-
Offline
Зарегистрирован: 20.08.2018

ЕвгенийП пишет:

а вот от сбоя в работе дисплея не спасёт ничто.

Кто мешает переписать либу шоб нога R/W использовалася??? В таком случае можно "спросить" дисплей, принял он команду или нет??? Чо, не делали так ысчо???

nik182
Offline
Зарегистрирован: 04.05.2015

ЕвгенийП пишет:

Ну как же не пересекутся? Вы перевели на выход и подали туда HIGH (в процессе вывода на дисплей), а я кнопку нажал. Конечно резистор тут же образует делитель, но с чем - хз. И что реально пойдёт на дисплей, тоже хз.

На дисплей пойдет код, который выставил процессор. Как уже сказали 1к резистор никак не может повлиять на выход МС. А кнопка за резистором. Замыкание кнопки, это подключение 1к резистора к выходу МС. А при переводе ноги в режим INPUTPULLUP замыкание 1к резистора на массу даёт уверенный LOW. Но требует задержку микросекунд 100 перед считыванием, иначе из HIGH выхода не успевает емкость ноги отсосать до LOW.  

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Не знаю, nik182, номиналы резисторов на схеме не обозначены ... в общем, некомфортно мне с таким решением :(

nik182
Offline
Зарегистрирован: 04.05.2015

-NMi- пишет:

Кто мешает переписать либу шоб нога R/W использовалася??? В таком случае можно "спросить" дисплей, принял он команду или нет??? Чо, не делали так ысчо???

Не заре общения с 1602 только так и делал. Потом оказалось что только lcdclear задерживается на столько, что цикл опроса успевает крутануться несколько раз, для остальных команд это только лишние задержки. Теперь lcdclear эмулирую  записью пустых строк - намного быстрее. 

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

sadman41 пишет:

Из квартиры среднестатистического советского радиогубителя менее 100Кг металла ещё никто не выносил.

когда затопило в 2002 году, КАМАЗ, ровно КАМАЗ на свалку )))

nik182
Offline
Зарегистрирован: 04.05.2015

ЕвгенийП пишет:

Не знаю, nik182, номиналы резисторов на схеме не обозначены ... в общем, некомфортно мне с таким решением :(

Лично проверено. Работает отлично. Никаких сбоев и проблем не обнаружено. Рекомендую в стеснённых обстоятельствах. Если можно так не не делать - не делаю.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

sadman41 пишет:

Из квартиры среднестатистического советского радиогубителя менее 100Кг металла ещё никто не выносил.

Не, ну, СВХ - святое дело :-)

derdemons
Offline
Зарегистрирован: 22.09.2018

sadman41 пишет:

Я тоже за I2C, а то ить кнопку может и заклинить.

Про  I2C знаю PCF8574 в наличии есть по оъбёму в размере одной пивной кружки.Интересует именно такое подключение  и знаю что это работает https://radiokot.ru/circuit/audio/other/45/  

интересует код в среде ардуины

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

derdemons пишет:

sadman41 пишет:

Я тоже за I2C, а то ить кнопку может и заклинить.

Про  I2C знаю PCF8574 в наличии есть по оъбёму в размере одной пивной кружки.Интересует именно такое подключение  и знаю что это работает https://radiokot.ru/circuit/audio/other/45/  

интересует код в среде ардуины

а как EEPROM в протеусе подгрузить?

Green
Offline
Зарегистрирован: 01.10.2015

В advanced properties указываете имя bin файла.

Green
Offline
Зарегистрирован: 01.10.2015

ЕвгенийП пишет:

 ... в общем, некомфортно мне с таким решением :(


Да ладно! Тут ничего не выходит за рамки. Толи дело, когда за счёт задержек на RC цепочках экономия выводов происходит. Или же экономия на резисторах при LED индикации.)

derdemons
Offline
Зарегистрирован: 22.09.2018

Пообщался с автором статьи он мне скинул свою библиотеку, но она написана на ассемблере. Причем всё на русском языке  есть ли возможность написать библиотеку на Ардуино?

https://cloud.mail.ru/public/3vei/39mzFz7LQ

kalapanga
Offline
Зарегистрирован: 23.10.2016

derdemons пишет:

Пообщался с автором статьи он мне скинул свою библиотеку, но она написана на ассемблере. Причем всё на русском языке  есть ли возможность написать библиотеку на Ардуино?

Так и эта библиотека только для работы с дисплеем и ничего не знает про кнопки. С кнопками всё равно самому работать надо как выше описали. И зачем её переписывать, когда есть стандартная LiquidCrystal? Она чем не угодила?

Green
Offline
Зарегистрирован: 01.10.2015

Странный подход у "библиотекаря"... Вот нафига МНЕ заботиться о том что вдруг кто то ещё (ВОЗМОЖНО!) будет использовать моё железо? Ну вот тот, кто захочет использовать, пусть и заботится о совместной работе с LCD! А нет - значит нет, зачем об этом париться! Не понимаю.)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

derdemons пишет:

есть ли возможность написать библиотеку на Ардуино?

А что мешает использовать эту библиотеку на ардуино? Заменяете расширения .asm на .S и объявляете нужные функции глобальными - должна работать, если аккуратно всё проделать.

Green
Offline
Зарегистрирован: 01.10.2015

Немножко другой ассемблер только.)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Да? Не авр что ли?

Green
Offline
Зарегистрирован: 01.10.2015

А что, у АВР не может быть несколько ассемблеров?) И каждый со своим синтаксисом, со своими директивами и пр.? В данном случае у человека ассемблер Атмел. Тогда как в Ардуино гнутый.)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Может, почему не может. 

Green
Offline
Зарегистрирован: 01.10.2015

У каждой солидной конторы должен быть свой С(С++) компилятор и свой ассемблер.)
Широко известные в узких кругах: imagecraf, mikroe, hpinfotech, iar...