Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить

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

Ср июн 11, 2014 13:41:00

хм
я иной алгоритм надумал,как получу ЖКИ - опробую
мне надо крупные шрифты, от 16 точек

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

Ср июн 11, 2014 23:25:18

aleksandr-zh писал(а):хм
я иной алгоритм надумал,как получу ЖКИ - опробую
мне надо крупные шрифты, от 16 точек

Если нужно выводить шрифт с шириной кратной 8-ми тачкам (8,16,24,32), то буфер не нужен... можно выводить прям в дисплей...
Но если будут шрифты с шириной не кратной 8-ми, то придется через буфер.....

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

Вт июн 17, 2014 19:10:44

Вадиматоричик писал(а):Рад, что этот дисплей приобрел такую популярность. Есть даже статья на хабре http://habrahabr.ru/post/213459/. Попытался по ней написать нормальную библиотеку для работы по SPI. Но столкнулся с проблемой. Если подать "0" (-) на SPB (Для разрешения приема данных) вся цепь замыкается. У меня питается от программатора, так что гаснет все. Программатор в том числе. У кого-нибудь еще такое было? И еще. На дисплее по ссылке GND и VCC, по сравнению с мои дисплеем, на разных местах. Я об этом узнал уже после того, как подключил и цепь замкнулась. Даже и не подумал, что пины могут отличаться по назначению. Видимо, не судьба с SPI мне поработать... Спасибо за примеры. Буду стараться написать еще более компактный код :))

У меня такая-же беда. Купил дисплеи в Китае специально под Serial режим... :(
Удалось победить?

Все, разобрался. На плате уже установлена перемычка...
Вложения
2014-06-18 06.52.33 (640x480).jpg
(137.4 KiB) Скачиваний: 2151

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

Чт июн 19, 2014 19:28:03

shads писал(а):
aleksandr-zh писал(а):хм
я иной алгоритм надумал,как получу ЖКИ - опробую
мне надо крупные шрифты, от 16 точек

Если нужно выводить шрифт с шириной кратной 8-ми тачкам (8,16,24,32), то буфер не нужен... можно выводить прям в дисплей...
Но если будут шрифты с шириной не кратной 8-ми, то придется через буфер.....


сел делать, ан фиг вам, товарищи :(

во-первых, идиотская адресация. Победил: сделал по Х 0-7 блоков, и по Y 0-7 - строк
дело в том, что выгрузить просто 8*8 в любое место не получится простыми способами. По горизонтали запись ведётся * + 8 бит. Т.е., можно вывести только в левую часть блока. Или два символа сразу. А вывести по-простому в правую -никак
Это пол беды, в памяти небольшой буфер + анализ соседнего символа и сразу два выводить. Сносно

но меня в тупик поставило вот что:

есть в памяти программ массив с данными шрифтов. Как обратиться к началу нужного символа? как адресоваться туда?

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

Вт июн 24, 2014 11:21:22

aleksandr-zh писал(а):есть в памяти программ массив с данными шрифтов. Как обратиться к началу нужного символа? как адресоваться туда?
Создается указатель, указывающий на начало массива, потом к нему нужно прибавить (порядковый номер нужного символа в массиве, умноженный на значение размерности символов в массиве), вот вам и начало нужного символа...

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

Вт июн 24, 2014 11:34:38

shads писал(а):
aleksandr-zh писал(а):есть в памяти программ массив с данными шрифтов. Как обратиться к началу нужного символа? как адресоваться туда?
Создается указатель, указывающий на начало массива, потом к нему нужно прибавить (порядковый номер нужного символа в массиве, умноженный на значение размерности символов в массиве), вот вам и начало нужного символа...

Уже давно сделал ))
И шрифты, и эффект bold...

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

Вт июн 24, 2014 11:44:20

aleksandr-zh писал(а):Уже давно сделал ))
Ждем фоток, с примерчиками сообщений на дисплее :)...

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

Вт июн 24, 2014 18:52:47

вот:
шрифты сам рисовал, в свободных сделал пару десятков ходовых символов: батарея заряжена, половина, разряжена, всякие пиктограмки: вход\выход в меню, стрелочки,....
на одной из фотографий пиктограмка вилки :) мол, питание от сети 220в
можно всё сделать, была бы фантазия!

эффект Bold сделан программно из обычного шрифта: смещаю на 1 позицию всю строку

Изображение

Изображение

Изображение

Изображение

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

Вт июн 24, 2014 23:18:42

На верхней картинке - где коровка - текст явно вместе с картинкой выводится, графически? Т.к. видно, что он не по знакоместам расположен...

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

Ср июн 25, 2014 05:23:46

shads писал(а):На верхней картинке - где коровка - текст явно вместе с картинкой выводится, графически? Т.к. видно, что он не по знакоместам расположен...

да-да!
там картинка, просто для проверки скорости выгрузки

ЖКИ подключен по SPI, картинка хранится во внешней EEPROM (24lc64 - что было под рукой)

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

Чт июн 26, 2014 00:07:53

aleksandr-zh писал(а):ЖКИ подключен по SPI
За какое время картинка выводится по SPI? Не смотрели?
10 раз\сек получится обновлять весь экран?

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

Чт июн 26, 2014 07:24:20

у меня тест плохой: я же беру из внешней EEPROM - очень медленно! секунда ГРУБО

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

Чт июл 03, 2014 15:34:20

Здравствуйте все :)) . Ну вот, я снова вернулся в эту тему. Мне нужно было время, чтобы немного в себе разобраться, переосмыслить многие вещи, подтянуть свои знания в СИ и разобраться с STM8 и 32.
Предыстория:

Т.к. в интернете я не нашел ни одного упоминания подключения нашего LCD по SPI к STM8, то я решил написать библиотеку сам. И, забыв про все грабли, начал писать. В конце этого сообщения есть файл проекта с моей библиотекой и примером. Библиотека сейчас активно дорабатывается и в будущем будет прикреплена к какой-нибудь RTOS.
Связь STM8 и LCD по SPI:

Библиотечная реализация соединения (низкий уровень).

Использование стандартного шрифта.

Использование собственных символов 8x8.

Работа с графикой: (Рисование линий).

Работа с графикой: (Рисование прямоугольников).

Все, что функции пишут в буфер - происходит наложением. Так что если буква занимает ни все отведенное ей пространство 8x8, то там спокойно можно провести линию.
Вот собственно и библиотека. Код написан на C, под IAR для контроллера stm8s105c4, но код не имеет ассемблерных вставок, так что перенос будет легкий
LCD128_64.rar
(253.45 KiB) Скачиваний: 907

Глюки библиотеки:

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

Сб июл 05, 2014 13:35:43

Немного поработал над библиотекой и добавил несколько новых функций:

Пример работы с библиотекой.
Допустим нам нужно нарисовать "рыбку" размером 8 на 16 пикселей, для этого:
1. Подготовка картинки:

2. Настроить функцию.

Вот так выглядит мой пример в жизни:

А вот картинка рыбки, если кто захочет свериться.
Изображение
Вот проект примера работы библиотеки:
1.1.rar
Проект.
(281.26 KiB) Скачиваний: 528

А вот и сама библиотека
inc.rar
Либа
(12.28 KiB) Скачиваний: 562

Буду вводить уже им версии. Т.к. слишком уж большой функционал планируется.
Так вот, это версия 1.1 :)

А вот и видио работы кода. :music:

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

Сб июл 05, 2014 16:21:11

Новая версия: 1.2 :))
Новое: Добавлена возможность рисования закрашенных прямоугольников. За это отвечает функция void OUT_Graf_PrmZK (char X1, char Y1, char X2, char Y2);. Работа с ней ведется точно так же, как и с не закрашенным прямоугольником.
Обновления: теперь свой текст (8x8) может быть 4-х видов.
Код:
//Режимы вывода символов.
#define   FonOFF_InversOFF 0              //Рисует на пустом месте белым по синему, фон не тронут.
#define   FonOFF_InversON  1              //Рисует пустым по закрашенному, фон не тронут.
#define   FonON_InversOFF  2              //Буква использует весь фон. Рисует по пустому.
#define   FonON_InversON   3              //Весь фон, рисует по закрашенному пустотой.

Данное изменение коснулось функции LCD_Graf_Out_char и OUT_Graf_String. Теперь помимо всех предыдущих входных параметров - нужно еще дописать формат вывода.
Для демонстрации был написан небольшой примерчик. Здесь нижняя часть экрана закрашена прямоугольником и на обеих частях по 4 строчки текста, каждая из которых демонстрирует режим.
Код:
int main(void)
{
  SPI_Init(); 
  LCD_Graf_Init();
  OUT_Graf_PrmZK(0, 32, 128, 64);
  OUT_Graf_String ("FonOFF_InversOFF", 0, 0, FonOFF_InversOFF);
  OUT_Graf_String ("FonOFF_InversON",  0, 1, FonOFF_InversON);
  OUT_Graf_String ("FonON_InversOFF",  0, 2, FonON_InversOFF);
  OUT_Graf_String ("FonON_InversON",   0, 3, FonON_InversON);
  OUT_Graf_String ("FonOFF_InversOFF", 0, 4, FonOFF_InversOFF);
  OUT_Graf_String ("FonOFF_InversON",  0, 5, FonOFF_InversON);
  OUT_Graf_String ("FonON_InversOFF",  0, 6, FonON_InversOFF);
  OUT_Graf_String ("FonON_InversON",   0, 7, FonON_InversON);
  OUT_Graf_BUFFER();
  while (1)
  {
   
  }


Вот фото :lol:

Вот библиотека:
inc 1.2.rar
(13.83 KiB) Скачиваний: 519

А вот пример, описанный выше:
LCD128_64 (1.2).rar
(275.98 KiB) Скачиваний: 549

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

Пн июл 07, 2014 18:30:09

А я все не уймусь...

Небольшой рассказ, поясняющий изложенное в посте.

Итак, библиотека под STM32. Скажу сразу, пока что это лишь сырой порт, который, убив 2 дня жизни, мне удалось сделать. Функционал такой же, как и в версии 1.2. Но вот в использовании есть небольшие изменения.

От себя: был приятно удивлен, когда включил свой пример "рыбки" при той же скорости кварца, а код работал быстрее. Только потом вспомнил, что у STM8 и STM32 производительность 0.9 против 1.32 (Может чуть напутал в цифрах, лень лезть читать). Приятным плюсом так же оказалась совместимость уровней 3.3 и 5V (Но дисплей питается от 5!). Так что подключение прямое. Кстати о подключении:
Код:
  //Используем SPI4.
   //PE2 - SPI4_SCK.
   //PE3 - CS (ногодрыг).
   //PE6 - SPI4_MOSI.

Думаю, если что, изменить настройки нижнего уровня не составит труда.
Вот файл проекта для Keil5. Буду выкладывать целыми проектами, т.к. только на согласование .c и .h файлов у меня ушел день.
Ну вот и фото (На нем можно увидеть светодиоды справа, так, выставляя гигантские задержки я отлаживал SPI). Теперь о скорости вывода. Она ОЧЕНЬ высокая. Если смотреть на мой пример, то видно, что при перемещении, между 2-мя изменениями еще видны "не остывшие" пиксели. Делать скорость еще выше я не вижу смысла, т.к. экран не успевает измениться между новыми порциями данных. Скоростью SPI - доволен.
Фото

P.S. Пока ST не напишет нормальную IDE для STM8 - я буду работать над библиотекой под STM32, а учитывая тенденцию на снижение цен 32-х битных мк, возвращяться к 8 мне уже не придется.

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

Пт июл 11, 2014 14:18:14

Смог соединить наш экран с тачскрином (ранее не работал с ним). Так вышло, что по ширине он на 1-2 пикселя меньше, а в высоту на 3 мм больше с каждой стороны. Так что пришлось писать библиотеку с учетом этого. Из-за SPL конечно опрос происходит ОЧЕНЬ медленно (Всего 2-3 обновления экрана в секунду), но пока что хватит.
Вот фото:
Изображение
Библиотеку пока не выкладываю, ее ждет огромная оптимизация. 8)

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

Пт июл 11, 2014 19:01:54

Пока ST не напишет нормальную IDE для STM8 - я буду работать над библиотекой под STM32, а учитывая тенденцию на снижение цен 32-х битных мк, возвращяться к 8 мне уже не придется.

ST никогда не напишет... она вообще ни пишет ИДЕ... :)))
А так... ИАР вполне хватает...
И по поводу восьмёрок... S003 для простых поделок очень даже ничего...

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

Чт июл 24, 2014 17:25:45

Вашего (нашего) полку прибыло!

Неделю назад тоже получил из китая пару таких дисплеев. Написал свою библиотеку под AVR. Пока только под параллельный 8-битный режим, но добавить 4-битный или последовательный вроде как несложно - протоколы там простые.

Основное моё требование к библиотеке было - совместимость со своей же KS0108-библиотекой. Это, в основном, использование пропорциональных (!) шрифтов с "вертикальными" байтами. Ограничение проистекает из необходимости добавить поддержку дисплея в свой проект спектроанализатора, где подобные шрифты уже используются с дисплеями на базе KS0108 и дисплеем LS020.

Ввиду использования ATmega16 полного экранного буфера (1кБайт) сделать не получалось, так что буфер немного упрощённый - 128 байт (8 строк длинной 128 пикселов), в который легко вписывается нужный шрифт. Буфер вычитывается из экранной памяти (GDRAM) при переходе на очередную "строку" из восьми.

Собственно, вот картинки с текущим результатом:

Изображение Изображение

А исходники под avr-gcc, если кому интересно, можно глянуть на гитхабе.

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

Пт июл 25, 2014 14:25:01

WiseLord писал(а):Ввиду использования ATmega16 полного экранного буфера (1кБайт) сделать не получалось, так что буфер немного упрощённый - 128 байт (8 строк длинной 128 пикселов), в который легко вписывается нужный шрифт. Буфер вычитывается из экранной памяти (GDRAM) при переходе на очередную "строку" из восьми.
Тоже вариант, но к сожалению так полноценную ИДЕ (с окошками рамочками и прочими приколами) не сварганить...
Хотя может и вариант, но значительно увеличится нагрузка на контроллер...
Ответить