Графический дисплей LCD 12864 (128x64 пикселя) на ST7920

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Аватара пользователя
GoldenAndy
Поставщик валерьянки для Кота
Сообщения: 1925
Зарегистрирован: Чт июл 28, 2016 07:58:37
Откуда: Kyiv, UA
Контактная информация:

Re: Графический дисплей LCD 12864 (128x64 пикселя) на ST7920

Сообщение GoldenAndy »

Записи - то я для себя больше делал. Принцип адресации и организации дисплея был мне понятен.
Я описал именно физическое подключение и инициализацию.

Если у вас памяти мало - то вам просто нужно знать, что и где у вас на экране.
И выводить через минибуффер только туда, куда надо.
Если нужно погасить весь экран - то у вас же есть код вывода картинки....
Его переделать чуток и очистка экрана готова

Код: Выделить всё

 for(i=0;i<32;i++)              //
    {
      TransferData((0x80 + i),0); //SET   VERTICAL ADDRESS
      TransferData(0x80,0);       //SET   HORIZONTAL ADDRESS
      for(j=0;j<32;j++)
       {
         TransferData(0,1);
       }
    }
Если что то нужно стереть в области экнрана - ну заполните минибуфер нулями и плюньте в ту область.
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]
Аватара пользователя
Pretender
Открыл глаза
Сообщения: 40
Зарегистрирован: Чт сен 01, 2016 10:54:55
Откуда: Южное Котово

Re: Графический дисплей LCD 12864 (128x64 пикселя) на ST7920

Сообщение Pretender »

Ну я и гасил как вы написали :) Т.е. как правильно - сначала гашу весь экран, затем заполняю минибуфер и вывожу его на экран?
Аватара пользователя
GoldenAndy
Поставщик валерьянки для Кота
Сообщения: 1925
Зарегистрирован: Чт июл 28, 2016 07:58:37
Откуда: Kyiv, UA
Контактная информация:

Re: Графический дисплей LCD 12864 (128x64 пикселя) на ST7920

Сообщение GoldenAndy »

Pretender, так это вы уже по своей задаче должны смотреть.
Сначала, на старте, да, надо погасить дисплей. Ибо на нём мусор.
А потом - если надо очистка, чистите.
Если вам нужно обновлять какие то небольшие области - то зачем всё чистить и заново выводить?

Кстати, с этим дисплеем интересная штука. Текстовый и графический режимы у него независимы. И память у каждого - своя.
Т.е. при включении нужно сначала дать команду очистки текстового дисплея, потом переключиться в графику и очистить видеопамять нулями.
Иначе можно увидеть интересные артефакты - символы из текстового режима будут складываться по XOR с картинкой из граф. режима :)
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]
Аватара пользователя
lizard66
Первый раз сказал Мяу!
Сообщения: 35
Зарегистрирован: Чт май 14, 2015 16:58:00
Откуда: Kharkiv

Re: Графический дисплей LCD 12864 (128x64 пикселя) на ST7920

Сообщение lizard66 »

[uquote="GoldenAndy",url="/forum/viewtopic.php?p=4016399#p4016399"]lizard66, в последовательном тоже можно читать вроде бы. Во всяком случае, бит чтения-записи там есть.
Каждый байт команды/данных в последовательном режиме отправляется тремя байтами. И первый байт как раз и содержит биты-указатели, команда или данные идут и чтение или запись производится : 1 1 1 1 1 RW DC 0[/uquote]

Зачем в стартовом байте оставили RW великая загадка. Конечно, само по себе отсутствие MISO еще не говорит о том, что обмен односторонний, DS1302 со своим специфичным SPI обходится и без него. Однако сам производитель не оставляет сомнения …
Serial interface:
ST7920 is in serial interface mode when pulling down PSB pin. Two pins (SCLK and SID) are used to complete the data transfer. Only write data is available in the serial interface mode.

[uquote="GoldenAndy",url="/forum/viewtopic.php?p=4016399#p4016399"]Но читать, а потом писать - это геморно. При том, что еще и дисплей тормозной, одну команду или байт данных пережевывает минимум 70 (а то и все 80-90) микросекунд. Если по последовательному протоколу слать, то тактовую выше 1.666 МГц вроде нельзя подавать.
Я тестировал - 1.75 МГц он еще проглотил, а на 2 МГц уже пошли артефакты.
Если в применении к АВРкам, то тут грустно. Аппаратный СПИ при тактовой 8 МГц - это или 1, или 2 МГц. Нам подходит только 1 МГц.
Либо ставить на АВР кварц 12 МГц. Тогда СПИ можно на 1.5 МГц раскочегарить.
В результате эти циклы чтения-записи будут отбирать на ожидания вагон времени. И для основной программы останется ресурсов всего ничего.[/uquote]

Был один смешной проектик на Мега8, я применил ЛЦД на KS0108. Экран тоже не слишком быстрый, буфер выделять было не из чего. Позже проект разростался, был портирован сперва на М32 потом на М644, но драйвер ЛЦД переделывать не стал. В какой-то момент прикрутил компас и вот как это выглядит на М32 16МГц, вполне себе живенько -

Тут уже выведенные данные считываются с индикатора, сливаются с новыми данными и обновленное отправляется в индикатор. Т.ч. «тормозной дисплей» это все относительно.

Когда руки дошли до ST7920, уже экспериментировал с STM. Тот же проект, только на F407 с ST7920 в режиме SPI…
Вложения
STN32-C5.jpg
(187.34 КБ) 279 скачиваний
Аватара пользователя
GoldenAndy
Поставщик валерьянки для Кота
Сообщения: 1925
Зарегистрирован: Чт июл 28, 2016 07:58:37
Откуда: Kyiv, UA
Контактная информация:

Re: Графический дисплей LCD 12864 (128x64 пикселя) на ST7920

Сообщение GoldenAndy »

lizard66, ну на самом деле один мой знакомый сказал, что в 2021 году делать изделия на контроллерах 15летней давности - моветон.
Ну в чем то я с ним согласен.
Но что поделать, если у меня в коробочке лежит порядка 70 штук Атмега8, десяток атмег 32, несколько 128х и пучок тинек?
Вот и приходится иногда страдать некрофилией.
С другой стороны - какую то приблуду на 2-3-4 кнопки, 5 светодиодов и два реле можно делать и на атмеге 8.
--
Но для монохромных дисплеев я не хочу полагаться на чтение из дисплея и т.д. Мне проще взять камушек, у которого больше килобайта ОЗУ, что б выделить 1024 байта под видеобуфер.
Это удобно. Графическая библиотека рисует все примитивы в этом буфере - ей пофиг, где рисовать.
А драйвер выгружает буфер в дисплей. Либо по таймеру, либо по событию.
с ОЛЕДками - мне проще буфер выплюнуть вручную, по вызову update. Тем более, я в драйвере предусмотрел возможность выгрузки только измененных областей.
А геморнутость и тормознутость 7920 (обработка одной команды - от 70 мкс) вынудили замутить таймерное обновление. На СТМ еще и ДМА заюзал, что б вручную не ждать отправки 3 или 6 байт по СПИ.
Делал БП себе (фото показывал) - там СТМка успевает и дисплей обслужить, и кнопки опросить, и 1000 раз в секунду прочитать значение тока и напряжения по и2ц, и буфер на 20 000 измерений обработать и картинку нарисовать.
Так что все же для монохромников - проще буфер и не извращаться.
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]
Аватара пользователя
lizard66
Первый раз сказал Мяу!
Сообщения: 35
Зарегистрирован: Чт май 14, 2015 16:58:00
Откуда: Kharkiv

Re: Графический дисплей LCD 12864 (128x64 пикселя) на ST7920

Сообщение lizard66 »

[uquote="GoldenAndy",url="/forum/viewtopic.php?p=4017118#p4017118"]lizard66, ну на самом деле один мой знакомый сказал, что в 2021 году делать изделия на контроллерах 15летней давности - моветон.
Ну в чем то я с ним согласен.
Но что поделать, если у меня в коробочке лежит порядка 70 штук Атмега8, десяток атмег 32, несколько 128х и пучок тинек?
Вот и приходится иногда страдать некрофилией.
С другой стороны - какую то приблуду на 2-3-4 кнопки, 5 светодиодов и два реле можно делать и на атмеге 8.
--[/uquote]

Я такой же некро… (в лучшем смысле этого слова) ,как и Вы. Приходиться заниматься ремонтом строительных нивелиров, а там в основном STC или холтеки, сдуваю оригинальный проц, ставлю тиньку ( приходиться подрезать слегонца дорожки) и туда свою прошиву. Уже есть свой отлаженный шаблон, только правлю под конкретный случай и вперед.

[uquote="GoldenAndy",url="/forum/viewtopic.php?p=4017118#p4017118"]Но для монохромных дисплеев я не хочу полагаться на чтение из дисплея и т.д. Мне проще взять камушек, у которого больше килобайта ОЗУ, что б выделить 1024 байта под видеобуфер....
....Так что все же для монохромников - проще буфер и не извращаться.[/uquote]

Не стал конкретизировать, но раз ST7920 работает по SPI, то естественно выделен буфер. И да, я тоже обновляю только ту часть экрана, которая подверглась изменению.
Аватара пользователя
GoldenAndy
Поставщик валерьянки для Кота
Сообщения: 1925
Зарегистрирован: Чт июл 28, 2016 07:58:37
Откуда: Kyiv, UA
Контактная информация:

Re: Графический дисплей LCD 12864 (128x64 пикселя) на ST7920

Сообщение GoldenAndy »

Ну, обмен по SPI - это транспорт только. А так - юзать буфер или не юзать - это уже вопрос алгоритма. Может на дисплей надо инфографику в виде спрайтов 16*16 выводить и всё....
Тогда можно и без буфера.
Я "Часы на TFT" сделал без буфера и без чтения с экрана. Рассчитал области, что б они не перекрывались и рисовал в каждой прямо в дисплей.
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]
Аватара пользователя
lizard66
Первый раз сказал Мяу!
Сообщения: 35
Зарегистрирован: Чт май 14, 2015 16:58:00
Откуда: Kharkiv

Re: Графический дисплей LCD 12864 (128x64 пикселя) на ST7920

Сообщение lizard66 »

[uquote="GoldenAndy",url="/forum/viewtopic.php?p=4017213#p4017213"]Ну, обмен по SPI - это транспорт только. А так - юзать буфер или не юзать - это уже вопрос алгоритма. Может на дисплей надо инфографику в виде спрайтов 16*16 выводить и всё....
Тогда можно и без буфера.
Я "Часы на TFT" сделал без буфера и без чтения с экрана. Рассчитал области, что б они не перекрывались и рисовал в каждой прямо в дисплей.[/uquote]

Согласен полностью, тот же принцип ;) - https://www.radiokot.ru/forum/viewtopic ... 7&t=171493
Аватара пользователя
slav0n
Опытный кот
Сообщения: 882
Зарегистрирован: Ср дек 01, 2010 00:38:15
Откуда: Харьков
Контактная информация:

Re: Графический дисплей LCD 12864 (128x64 пикселя) на ST7920

Сообщение slav0n »

не, без буфера это не жизнь...
Благодаря буферу безбуферный проект под KS0107 легко портируется на ST7920 с минимумом переделок.

Демонстрация "живости":



Добавлено after 2 hours 23 minutes 42 seconds:
GoldenAndy писал(а):С другой стороны - какую то приблуду на 2-3-4 кнопки, 5 светодиодов и два реле можно делать и на атмеге 8
на меге8 можно сделать и такое: http://primuss3.com/forum/index.php?topic=314.0
и такое:
ohmycode!
primuss3.com
Аватара пользователя
GoldenAndy
Поставщик валерьянки для Кота
Сообщения: 1925
Зарегистрирован: Чт июл 28, 2016 07:58:37
Откуда: Kyiv, UA
Контактная информация:

Re: Графический дисплей LCD 12864 (128x64 пикселя) на ST7920

Сообщение GoldenAndy »

slav0n, проблематика использования дисплеев на мелких МК в том, что если не используется процедурная графика, то требуется вагон памяти под графические ресурсы.
Тот же шрифт 5*8 - долой килобайт памяти. И т.д.
Вон у меня сейчас проблема. Есть задача сделать некий контроллер на ТФТ-дисплее 240*240 пикселей.
если б не такой дисплей - контроллер уместился бы, наверное, в мегу-16. А так - придется взять стм32 с 256 кб флеша. Ибо полноцветный дисплей требует и цветные картинки (2 байта на пиксель). А они весят много. Да и шрифт тоже покрупнее нужен. Я экспериментировал - 12*20 с трудом.
СпойлерКартинка 160*160 пикселей - 51 килобайт.
Изображение
Вложения
160160.jpg
(60.27 КБ) 645 скачиваний
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]
Аватара пользователя
slav0n
Опытный кот
Сообщения: 882
Зарегистрирован: Ср дек 01, 2010 00:38:15
Откуда: Харьков
Контактная информация:

Re: Графический дисплей LCD 12864 (128x64 пикселя) на ST7920

Сообщение slav0n »

вот, чел тоже экспериментировал:

ohmycode!
primuss3.com
Аватара пользователя
afz
Опытный кот
Сообщения: 744
Зарегистрирован: Сб дек 22, 2012 08:17:42
Откуда: Караганда, Казахстан

Re: Графический дисплей LCD 12864 (128x64 пикселя) на ST7920

Сообщение afz »

Коллеги, я попытался крутануть потенциометр нв своем QC12864B - там под 3-й "кляксой" рядок резисторов R1-R7, а слева и чуть выше - крохотка-потенциометр VR, вот, его я и крутнул. И, похоже, свернул. Что там стоит, и чем бы его заменить?
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Аватара пользователя
GoldenAndy
Поставщик валерьянки для Кота
Сообщения: 1925
Зарегистрирован: Чт июл 28, 2016 07:58:37
Откуда: Kyiv, UA
Контактная информация:

Re: Графический дисплей LCD 12864 (128x64 пикселя) на ST7920

Сообщение GoldenAndy »

afz, У меня тестер говорит 4.88 кОм
Т.е. ищите 4.7- 5кОм

Добавлено after 1 hour 18 minutes 15 seconds:
afz, вот только я на своих дисплеях так и не увидел влияния этого потенциометра. Контраст регулировался через вывод VD.
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]
Аватара пользователя
slav0n
Опытный кот
Сообщения: 882
Зарегистрирован: Ср дек 01, 2010 00:38:15
Откуда: Харьков
Контактная информация:

Re: Графический дисплей LCD 12864 (128x64 пикселя) на ST7920

Сообщение slav0n »

GoldenAndy писал(а):так и не увидел влияния этого потенциометра. Контраст регулировался через вывод VD
а R6 там не соединяет движок с V0?
ohmycode!
primuss3.com
Аватара пользователя
afz
Опытный кот
Сообщения: 744
Зарегистрирован: Сб дек 22, 2012 08:17:42
Откуда: Караганда, Казахстан

Re: Графический дисплей LCD 12864 (128x64 пикселя) на ST7920

Сообщение afz »

GoldenAndy писал(а):вот только я на своих дисплеях так и не увидел влияния этого потенциометра. Контраст регулировался через вывод VD.
Купил, наконец, батарейку в свой мультиметр, вооружился хорошей лупой и таки разобрался. На моём дисплее потенциометр напрямую подключен подковой к VDD и VSS, а движок - к V0. То есть, этот дисплей строго 5-вольтовый, при питании от 3 В контрастности не добьешься. И контрастность регулируется именно этим потенциометром. Он у меня, кстати, 2.2 кОм. Еще на этом дисплее в подтяжке PSB к +5В стоял R9=0 (перемычка), для переключения на SPI пришлось выпаять эту перемычку.

Осталось найти в кладовке китайскую пробную платку с 8-й Мегой и собрать тестовый стенд.
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Аватара пользователя
slav0n
Опытный кот
Сообщения: 882
Зарегистрирован: Ср дек 01, 2010 00:38:15
Откуда: Харьков
Контактная информация:

Re: Графический дисплей LCD 12864 (128x64 пикселя) на ST7920

Сообщение slav0n »

где картинки
картинки где
писанина вообще не показательна
ohmycode!
primuss3.com
Аватара пользователя
afz
Опытный кот
Сообщения: 744
Зарегистрирован: Сб дек 22, 2012 08:17:42
Откуда: Караганда, Казахстан

Re: Графический дисплей LCD 12864 (128x64 пикселя) на ST7920

Сообщение afz »

Какие картинки? С фото возиться не хочу, дорожки там, частично, идут по второй стороне. И что неясного в том, что концы подковы потенциометра коротко звонятся на VDD и VSS, а лвижок, не менее коротко, на V0?
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Аватара пользователя
GoldenAndy
Поставщик валерьянки для Кота
Сообщения: 1925
Зарегистрирован: Чт июл 28, 2016 07:58:37
Откуда: Kyiv, UA
Контактная информация:

Re: Графический дисплей LCD 12864 (128x64 пикселя) на ST7920

Сообщение GoldenAndy »

afz, попробуйте снять резистор. тогда, возможно, получится запитать логику дисплея от 3 вольт, а на контраст подать более высокое.... (если мне память не изменяет - там надо порядка 4.5 вольт для черного-на-зеленом и 4 вольт для белого-на-синем...)
Без резистора, возможно ,там будет мелкий ток и повышенное можно получить будет какой то повышайкой.... Накачкой на дросселе или умножителем....
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]
Аватара пользователя
afz
Опытный кот
Сообщения: 744
Зарегистрирован: Сб дек 22, 2012 08:17:42
Откуда: Караганда, Казахстан

Re: Графический дисплей LCD 12864 (128x64 пикселя) на ST7920

Сообщение afz »

GoldenAndy писал(а):Без резистора, возможно ,там будет мелкий ток
Это у меня будет вторым этапом. Сначала, по-простому, подам 5В и подключу к АВР-ке. 8-ю Мегу не нашел, зато нашел аардуинку-нано, на 328-й Меге. Попробую на ней, а там вдно будет
GoldenAndy писал(а):и повышенное можно получить будет какой то повышайкой.... Накачкой на дросселе или умножителем....
Вот здесь, в таблице с распиновкой, утверждают, что на выводе VOUT та самая 7920 генерит удвоенное напряжение VDD. Еще не проверял, соберу стенд - обязательно проверю.
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Аватара пользователя
GoldenAndy
Поставщик валерьянки для Кота
Сообщения: 1925
Зарегистрирован: Чт июл 28, 2016 07:58:37
Откуда: Kyiv, UA
Контактная информация:

Re: Графический дисплей LCD 12864 (128x64 пикселя) на ST7920

Сообщение GoldenAndy »

afz, чего-то я проморгал про VOut в свое время.
Просто все устройства на этом дисплее у меня с не-батарейным питанием. И процы там - бибо СТМ, тоглда дисплей 3.3 вольта жрёт, либо атмелы.
На СТМках я ШИМил контраст от 5 вольт, на мегах - напрямую от МК.
--
Кстати, если "в лоб", с промежуточным видеобуффером в памяти МК - то на Меге8 не заведется. Видеобуфер - 128*64/8 = 1024 байта. А в Меге 8 - всего 1 кб ОЗУ.
Так что абдуринка - ваше всё. Там уже 2 кб памяти.
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]
Ответить

Вернуться в «Периферия»