Когда мне понадобился МЭЛТ 1602 со SPI интерфейсом, а адаптера у меня не было, я сделал его на PIC16F1829. Попутно согласовав 3 вольтовое питание с 5 вольтовым (для чего потребовалось 12 транзисторов). В зависимости от прошивки PIC может работать с шиной SPI или I2C. Что удобно, это организация буфера в ОЗУ микроконтроллера. Можно не теряя времени по быстрому загнать в него то, что требует отображения, а потом не спеша вывести на дисплей с HD44780, который не очень то шустрый.
подскажи пожалуйста почему дисплей подключенный по i2c и модуль часов реального времени ds1307 параллельно подключенные часы выводятся на дисплей но они стоят.Без дисплея в порт идут.i2c адреса разные.Уже отпаял резисторы с модуля i2c дисплея и от модуля часов и подтянул к + 10Ком все равно стоят.Как их запустить по i2c?
Руслан, подскажи можно ли используя твою библиотеку hd44780 через pcf8574 задействовать другие возможности дисплея как например моргающий курсор, сдвиг курсора и тд. А ещё как можно опрашивать дисплей где находится в данный момент курсор чтоб в программе реализовать какое-то меню "если... то...". А так в принципе твоя библиотека отлично работает на STM32F103C8T6 конфигурированная через CubeMX, даже обмен по I2C реализовал через DMA, дисплей стал быстрее работать, спасибо!
+Alexander Becker Спасибо за отзыв! Функцию чтения положения курсора я, к сожалению, не реализовывал. Отображение курсора и запись кастомных символов - тоже. Их можно доделать в принципе, это не сложно. И я, вероятно, доделаю их когда появится время. Но для меню чтение курсора и не нужно. Вы же сами устанавливаете курсор дисплея из программы микроконтроллера, соответственно всегда знаете, где он находится, на сколько позиций смещается. Либо можете установить его в новую позицию в соответствии с алгоритмом отрисовки меню. Ну либо я не до конца понял Вашу задумку. По поводу DMA не совсем понял. У меня он не использовался. По началу я даже думал, что его нет смысла использовать вообще, т.к. обмен с pcf8574 идёт всегда по 1 байту. А сейчас задумался, что можно было бы готовить заранее массив на выдачу в pcf8574 и засылать его с помощью DMA. Правда это не ускорило бы работу с дисплеем, но позволило бы разгрузить ядро микроконтрллера. Или Вы уже переделали обмен на DMA? Если да, то интересно было бы взглянуть.
+Электроника в объективе -По поводу DMA: я использую находящийся на отладочной плате часовой кварц и вывожу актуальное время на дисплей. Так вот раньше секунды явно отставали от реального времени, теперь я переделал лишь одну строку как показано ниже и секунды затикали правильно. Не знаю может я что-нибудь не понимаю но факт на лицо. uint8_t pcf8574_write(I2C_TypeDef* I2Cx, uint8_t slave_addr, uint8_t value) { int8_t err; err=HAL_I2C_Master_Transmit_DMA(&hi2c1, HD44780_pcf8574_addr, (uint8_t*)&value, 1); if (err) { return err; } return I2C_ERR_Ok; } -Теперь к курсору: я хочу реализовать один проект где в меню можно было бы с помощью энкодера прыгать от строки к строке и в зависимости от положения курсора либо показывать актуальную температуру, задавать нужную температуру, включать вентилятор или задавать автоматический режим всё это на двух строчках 16х2. Я думаю это возможно нужно только подумать как адаптировать библиотеку. Ещё раз большое спасибо за поддержку и интересные обзоры.
+Alexander Becker По поводу DMA - понял, прикольно! Ваше меню вполне можно сделать на базе этой библиотеки. Надо просто продумать и написать логику формирования и заполнения строк при отрисовке меню. Это процесс творческий)
Очень часто, при подаче питания, этот МАХ уходит в глюк, в следствии чего он "зажигает" все сегменты, которые были подключены в тот момент. Это состояние сбрасывается только снятием питания с МАХ, и на программные команды в этом состоянии он уже не реагирует.
А может лучше через сдвиговый регистр подключать (74CH595)? Портов можно сэкономить. Или сдвиговый тоже много процессорного времени на обновление экрана занимать будет?
кстати, интересно, почему бывает так, что на дисплее искажаются символы, пока не перерисуешь изображение полностью. может там кондеры вешать нужно дополнительно?
Электроника в объективе ну вот заполняю индикатор, далее к индикатору обращений нет вообще, через час-два при каком-нить импульсе или ещё хз от чего может исказиться инфа, а может неделю показывать без проблем. если перерисовать экран - то снова все нормально.
+Румата Эсторский ааа, ну так я не пробовал, честно говоря. У меня индикатор обновлялся хотя бы раз в секунду. Собственно, содержимое ОЗУ контроллера дисплея могло попортиться не только по интерфейсу, тут можно гадать долго. Надо пробовать: менять дисплей, менять БП, добавлять емкости и т.п. Перепроверить, не мог ли МК всё-таки выдавать что-то на интерфейс. Он у тебя что делает несколько часов? спит?
Очень хороший обзор. Но первая попытка вывести на дисплей что то ,лично у меня провалилась. И не представляю как в этой программе например сделать часы, термометр, или вывод с датчиков. Все эти формулы для меня лес, темный и большой. Но l2c нравится тем что управление по 2 проводам.
здравствуйте.возникла проблема.мониторчик с платой i2c перестал показывать информацию(атм.давление,температуру.)только всё установил всё показывало. но вытащил usb кабель из ардуинки во время работы и подключил к кроне .после теперь ничего не показывает(никакой информации.только пустые клетки как при покупки((( )можете подсказать что могло случится??
а как 9в могло попасть на дисплей? у меня уже так было. я загрузил скетч повторно и дисплей снова стал показывать.потом снова вытащил шнур usb и опять всё пропало а скетч заного не загружается. выдаёт вот такую ошибку:Arduino: 1.8.5 (Windows 8.1), Плата:"Arduino/Genuino Uno" C:\Users\Вадим\Documents\Arduino\libraries\jm_LiquidCrystal_I2C\I2CIO.cpp:29:26: fatal error: jm_Scheduler.h: No such file or directory #include ^ compilation terminated. Несколько библиотек найдено для "LiquidCrystal_I2C.h" Используется: C:\Users\Вадим\Documents\Arduino\libraries\jm_LiquidCrystal_I2C Не используется: C:\Users\Вадим\Desktop\arduino-1.8.5\libraries\Arduino-LiquidCrystal-I2C-library-master exit status 1 Ошибка компиляции для платы Arduino/Genuino Uno.
Переходник на микросхеме PCF8574AT пытался запустить с 1602 экраном, так и не смог определить его адрес I2C. Сканер I2C ничего не нашел. ((( И библиотеки перебирал разные ничего не помогло.
Обыкновенные бескорпусные микросхемы. В данном случае - драйверы ЖК. Очень частая практика, с целью снижения себестоимости. Микросхема разрабатывается на этапе проектирования всего устройства, и в итоге снижается количество технологических операций - нет ненужного корпуса, выводов и припоя, используется сварка. Даже в СССР применялись - к примеру, в калькуляторах МК-52
Спасибо за уроки, полезные вещи снимаешь! Если честно, удивлен что так мало просмотров у тебя.
+Ivan Fedulov всему своё время. Москва не сразу строилась ;)
Когда мне понадобился МЭЛТ 1602 со SPI интерфейсом, а адаптера у меня не было, я сделал его на PIC16F1829. Попутно согласовав 3 вольтовое питание с 5 вольтовым (для чего потребовалось 12 транзисторов). В зависимости от прошивки PIC может работать с шиной SPI или I2C. Что удобно, это организация буфера в ОЗУ микроконтроллера. Можно не теряя времени по быстрому загнать в него то, что требует отображения, а потом не спеша вывести на дисплей с HD44780, который не очень то шустрый.
подскажи пожалуйста почему дисплей подключенный по i2c и модуль часов реального времени ds1307 параллельно подключенные часы выводятся на дисплей но они стоят.Без дисплея в порт идут.i2c адреса разные.Уже отпаял резисторы с модуля i2c дисплея и от модуля часов и подтянул к + 10Ком все равно стоят.Как их запустить по i2c?
Понятия не имею, надо отлаживать. Возможно часы нужно запустить отдельной командой, попадались мне такие. Копайте
Да уже неделю мучаюсь с ними.Спасибо.
Руслан, подскажи можно ли используя твою библиотеку hd44780 через pcf8574 задействовать другие возможности дисплея как например моргающий курсор, сдвиг курсора и тд. А ещё как можно опрашивать дисплей где находится в данный момент курсор чтоб в программе реализовать какое-то меню "если... то...".
А так в принципе твоя библиотека отлично работает на STM32F103C8T6 конфигурированная через CubeMX, даже обмен по I2C реализовал через DMA, дисплей стал быстрее работать, спасибо!
+Alexander Becker Спасибо за отзыв!
Функцию чтения положения курсора я, к сожалению, не реализовывал. Отображение курсора и запись кастомных символов - тоже. Их можно доделать в принципе, это не сложно. И я, вероятно, доделаю их когда появится время.
Но для меню чтение курсора и не нужно. Вы же сами устанавливаете курсор дисплея из программы микроконтроллера, соответственно всегда знаете, где он находится, на сколько позиций смещается. Либо можете установить его в новую позицию в соответствии с алгоритмом отрисовки меню. Ну либо я не до конца понял Вашу задумку.
По поводу DMA не совсем понял. У меня он не использовался. По началу я даже думал, что его нет смысла использовать вообще, т.к. обмен с pcf8574 идёт всегда по 1 байту. А сейчас задумался, что можно было бы готовить заранее массив на выдачу в pcf8574 и засылать его с помощью DMA. Правда это не ускорило бы работу с дисплеем, но позволило бы разгрузить ядро микроконтрллера.
Или Вы уже переделали обмен на DMA? Если да, то интересно было бы взглянуть.
+Электроника в объективе
-По поводу DMA: я использую находящийся на отладочной плате часовой кварц и вывожу актуальное время на дисплей. Так вот раньше секунды явно отставали от реального времени, теперь я переделал лишь одну строку как показано ниже и секунды затикали правильно. Не знаю может я что-нибудь не понимаю но факт на лицо.
uint8_t pcf8574_write(I2C_TypeDef* I2Cx, uint8_t slave_addr, uint8_t value)
{
int8_t err;
err=HAL_I2C_Master_Transmit_DMA(&hi2c1, HD44780_pcf8574_addr, (uint8_t*)&value, 1);
if (err)
{
return err;
}
return I2C_ERR_Ok;
}
-Теперь к курсору: я хочу реализовать один проект где в меню можно было бы с помощью энкодера прыгать от строки к строке и в зависимости от положения курсора либо показывать актуальную температуру, задавать нужную температуру, включать вентилятор или задавать автоматический режим всё это на двух строчках 16х2. Я думаю это возможно нужно только подумать как адаптировать библиотеку.
Ещё раз большое спасибо за поддержку и интересные обзоры.
+Alexander Becker По поводу DMA - понял, прикольно!
Ваше меню вполне можно сделать на базе этой библиотеки. Надо просто продумать и написать логику формирования и заполнения строк при отрисовке меню. Это процесс творческий)
Расскажите пожалуйста про MAX7219 откуда берутся помехи, после чего приходится сбрасывать.
+Stanislav S поподробнее пожалуйста
Очень часто, при подаче питания, этот МАХ уходит в глюк, в следствии чего он "зажигает" все сегменты, которые были подключены в тот момент. Это состояние сбрасывается только снятием питания с МАХ, и на программные команды в этом состоянии он уже не реагирует.
Какой скейч нужен для того чтобы экран 2004 отображал некоторые параметры по usb с программы smartie5.3 Заранее спасибо!
не знаю, smartie запускал лет 7-8 назад, подключая дисплей к LPT-порту без всяких скетчей. Но гугл должен знать
А может лучше через сдвиговый регистр подключать (74CH595)? Портов можно сэкономить. Или сдвиговый тоже много процессорного времени на обновление экрана занимать будет?
Вполне можно, если нужны только выходы без возможности работать как входы
Электроника в объективе Я именно про работу с дисплеем (2-4 строки). Много ли занимает процессорного времени сдвиговый регистр 74CH595?
А еще можно использовать PIC16F88 и общаться как по аппаратному UART.
Почему не программируете через USB?
+Stanislav S потому что я не использую bootloader, шью программатором
кстати, интересно, почему бывает так, что на дисплее искажаются символы, пока не перерисуешь изображение полностью. может там кондеры вешать нужно дополнительно?
+Румата Эсторский Скорее всего ошибка в заполнении индикатора
Кондёры я не вешал, всё стабильно и так
Электроника в объективе
ну вот заполняю индикатор, далее к индикатору обращений нет вообще, через час-два при каком-нить импульсе или ещё хз от чего может исказиться инфа, а может неделю показывать без проблем. если перерисовать экран - то снова все нормально.
+Румата Эсторский ааа, ну так я не пробовал, честно говоря. У меня индикатор обновлялся хотя бы раз в секунду. Собственно, содержимое ОЗУ контроллера дисплея могло попортиться не только по интерфейсу, тут можно гадать долго. Надо пробовать: менять дисплей, менять БП, добавлять емкости и т.п. Перепроверить, не мог ли МК всё-таки выдавать что-то на интерфейс. Он у тебя что делает несколько часов? спит?
Очень хороший обзор. Но первая попытка вывести на дисплей что то ,лично у меня провалилась. И не представляю как в этой программе например сделать часы, термометр, или вывод с датчиков. Все эти формулы для меня лес, темный и большой. Но l2c нравится тем что управление по 2 проводам.
Если есть желание разобраться почему не заработало сразу, пиши в почту. Разберемся
Хорошо. Как только закажу такой же дисплей.
+infocentrist на ардуино всё проще ;)
👍
Подробный пример подключения LCD 1602 по I2C интерфесу radiolaba.ru/microcotrollers/podklyuchenie-lcd-1602-po-i2c-interfeysu.html
Классно, провтыкал по началу, что ж за интерфейс такой,"идваси"?)))
ай ту си
Уж по инерции хотел было комментить, что, мол, так дорого-то? Ан-нет, недорого!
здравствуйте.возникла проблема.мониторчик с платой i2c перестал показывать информацию(атм.давление,температуру.)только всё установил всё показывало. но вытащил usb кабель из ардуинки во время работы и подключил к кроне .после теперь ничего не показывает(никакой информации.только пустые клетки как при покупки((( )можете подсказать что могло случится??
Если 9 В попало на дисплей, то скорее всего умер контроллер дисплея
а как 9в могло попасть на дисплей? у меня уже так было. я загрузил скетч повторно и дисплей снова стал показывать.потом снова вытащил шнур usb и опять всё пропало а скетч заного не загружается. выдаёт вот такую ошибку:Arduino: 1.8.5 (Windows 8.1), Плата:"Arduino/Genuino Uno"
C:\Users\Вадим\Documents\Arduino\libraries\jm_LiquidCrystal_I2C\I2CIO.cpp:29:26: fatal error: jm_Scheduler.h: No such file or directory
#include
^
compilation terminated.
Несколько библиотек найдено для "LiquidCrystal_I2C.h"
Используется: C:\Users\Вадим\Documents\Arduino\libraries\jm_LiquidCrystal_I2C
Не используется: C:\Users\Вадим\Desktop\arduino-1.8.5\libraries\Arduino-LiquidCrystal-I2C-library-master
exit status 1
Ошибка компиляции для платы Arduino/Genuino Uno.
можете что нибудь посоветовать?
Судя по тексту ошибки, проблема программная, конфликтуют библиотеки
В Arduino IDE я не разбираюсь
как понять чтение на дисплей, давно немогу понять?
Почему не hal stm32?
Изначально не использовал HAL в проектах, а теперь уже лениво переносить их на HAL
Переходник на микросхеме PCF8574AT пытался запустить с 1602 экраном, так и не смог определить его адрес I2C. Сканер I2C ничего не нашел. ((( И библиотеки перебирал разные ничего не помогло.
Если сканер не нашёл, значит PCF8574 не ответил. Неисправен или неправильно подключен по i2c
видимо неисправен, т.к. модуль часов определяется сканером нормально.
1 земля должна быть общая, 2 в библиотеке нужно поменять значение на "1" смотри видео на 17:50
Купил такой же модуль, определился нормально, Видимо первый оказался бракованный.
Вот и здорово :)
блин... это если еще такой корпус для клавы, значит еще минус 90мс
... зато можно использовать один корпус, и для клавы и для дисплея :)
Непонятно, но интересно)
т е её можно использовать в т ч для матрицы клавиатуры...
это я удачно зашел (с)
мне одному интересно что за микрухт под этими черными хренями?)
Обыкновенные бескорпусные микросхемы. В данном случае - драйверы ЖК. Очень частая практика, с целью снижения себестоимости. Микросхема разрабатывается на этапе проектирования всего устройства, и в итоге снижается количество технологических операций - нет ненужного корпуса, выводов и припоя, используется сварка. Даже в СССР применялись - к примеру, в калькуляторах МК-52