Два Arduino управляют ЖК-дисплеем

Я создаю систему с двумя Arduino (как на изображении внизу), связанными через ICSP. «Программист» программирует второй, называемый «Рабочий» (с файлом .hex на SD-карте программатора).

Рабочий управляет ЖК-дисплеем 16x4 и отображает сообщения пользователю.

Что я пытаюсь сделать, так это то, что когда программатор программирует Worker, он также отображает сообщение типа «Программирование, подождите» на ЖК-дисплее Worker. Но в коде, просто сообщая рабочему экрану, что сообщение не произойдет, потому что, когда оно было запрограммировано, оно отображает мусор на ЖК-дисплее.

В Так возможно ли, чтобы программатор взял на себя управление ЖК-дисплеем до того, как он начнет программировать рабочего и отобразит его сообщение?

ЖК-дисплей работает с обычным 4-битным режимом связи, и я бы не стал преобразовывать его в I2C, если это возможно.

, 👍0

Обсуждение

4-битный режим @jsotola, @Dale queiroz

хозяин/раб?, @tony gil

На ICSP — главный контроллер, подчиненный рабочий. На LCD подключение осуществляется исключительно рабочим (через аппаратное обеспечение). @тони гил, @Dale queiroz

Вы думали об использовании I2C и для Arduino? Это работает очень хорошо для меня и, по-видимому, будет работать и для вас в этом приложении. Если хотите, я могу опубликовать ответ, расширяющий это. Пожалуйста, сообщите, иначе ПОЛИЦИЯ СОДЕРЖАНИЯ перекричит меня., @tony gil

_ «Рабочий управляет ЖК-дисплеем 16x4 и отображает сообщения пользователю. Что я пытаюсь сделать, так это то, что когда программист программирует рабочего, он также отображает сообщение типа «Программирование, подождите» на ЖК-дисплее рабочего, но в коде, просто сказать рабочему дисплею сообщение не произойдет, потому что, когда оно запрограммировано, отображает мусор на ЖК-дисплее "_ -> это предложение немного сложно разобрать. Не могли бы вы разбить его на более мелкие предложения, которые легче понять?, @Duck Dodgers

@tony gil, да, но для программирования лучше использовать ISCP, @Dale queiroz

Спасибо за помощь @DuckDodgers, @Dale queiroz

Честно говоря, зачем заставлять себя разрабатывать решение для мультиплексирования, когда ЖК-дисплеи недороги. Я предлагаю сохранить простоту и просто использовать 2 ЖК-дисплея. Боль от попытки отладить ситуацию, когда «работник» может или не может разговаривать с одним ЖК-дисплеем, просто ужасна. Если вы настаиваете на использовании одного ЖК-дисплея, я рекомендую вручную переключать ЖК-дисплей между платами Arduino. Таким образом, вы можете быть уверены, какой Arduino управляет ЖК-дисплеем., @st2000

Может быть другое решение. Некоторые ЖК-дисплеи больше, чем позволяет стандартная парадигма Hitachi. Такие ЖК-дисплеи в некотором смысле выглядят как два независимых дисплея. Но используйте тот же интерфейс. Так вот что. Дайте мне знать, если вам нужна дополнительная информация (то есть, если вы хотите, чтобы я опубликовал ответ). В противном случае это немного «не по теме» и может быть отклонено. Так что я воздержусь, если не будет интереса., @st2000


1 ответ


Лучший ответ:

2

Мне приходят в голову два решения: одно основано на аппаратном обеспечении, а другое — на программном обеспечении.

Решение 1

Аппаратное решение состоит в том, чтобы позволить программисту управлять ЖК-дисплеем через мультиплексор(ы) 2:1. Вам нужно будет подключить выводы ЖК-дисплея к общему выводу мультиплексора, выводы программатора к одному из двух входов, а выводы рабочего — к другому. Затем программист может выбрать, кто управляет ЖК-дисплеем через дополнительный контакт. Примером мультиплексора, который вы можете выбрать, является 74LS157, но существует практически бесконечное количество артикулов. Недостатком этого подхода является то, что вам нужно писать весь стек управления ЖК-дисплеем в программаторе.

Решение 2

Альтернативный вариант, в большей степени зависящий от ПО, заключается в реализации способа сообщить ведомому устройству, что вы хотите его запрограммировать. Например, когда требуется программирование, программист поднимает контакт; Worker записывает строку на LCD, затем прекращает работу, поднимает другой пин и ждет очистки. Затем программатор начинает мигать Worker, и сообщение остается на ЖК-дисплее. Может случиться так, что мусор выйдет из пинов Worker'а при программировании. Если это так, измените контакт включения или найдите способ временно отсоединить его от Worker, чтобы избежать попадания сигналов на ЖК-дисплей. Эта схема иллюстрирует эту концепцию:

схема

Когда программатор хочет запрограммировать устройство, он устанавливает вывод DL_Req в высокий уровень. Работник видит это и действует соответственно. Я думаю, что в этом случае контакты не перемещаются, но если, например, в сигналах во время программирования появляется какой-то шум (и на ЖК-дисплее этот шум отображается в виде странных символов), попробуйте изменить контакт, связанный с контактами включения (LCD2 в приведенном выше примере) или поставить что-то, чтобы предотвратить шум только на этом проводе, чтобы содержимое ЖК-дисплея не изменялось.

Лично я бы выбрал второе решение, но это зависит от того, насколько сильно вы можете изменить поведение воркера и программиста

,

Мне очень понравился второй подход, но не вызовет ли он конфликт между платами? Потому что воркеру также нужен доступ к пину включения, или пин включен все время, пока воркер отправляет информацию? что я понимаю, так это оставить контакт включения контроллера и шины данных, а контакт RS - общим для обеих плат, верно?, @Dale queiroz

@Dalequeiroz нет, во втором подходе программист не имеет доступа к включению или любому другому контакту ЖК-дисплея. Я не уверен, что на этапе программирования контакты Arduino перемещаются (я думаю, что во время программирования изменяется только контакт 13, подключенный к встроенному светодиоду). Я добавлю своего рода блок-схему к ответу для второго решения, чтобы лучше объяснить, @frarugi87

Мне понравился этот подход, таким образом, я могу контролировать, когда отображать сообщение о том, что и когда активировать контроллер, я попытаюсь дать ему обратную связь, но я думаю, что это сработает хорошо., @Dale queiroz

Если вы позволите рабочему подтянуть штифт включения только с помощью его внутреннего подтягивающего резистора (а не активного высокого уровня), программатор сможет опустить его, не причинив никакого вреда, отключив ЖК-дисплей. Если логика обратная (LOW для включения), вы можете сделать это с помощью внешнего подтягивающего резистора., @chrisl

@chrisl это хорошее решение, если все контакты рабочего двигаются случайным образом во время программирования. Или даже использовать последовательный резистор, чтобы позволить программисту решить, управлять выводом EN или нет. В любом случае думаю не понадобится, так как обычно пины остаются в стабильном состоянии при программировании, @frarugi87