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

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

Сб июл 26, 2014 20:16:09

Друзья, добрый день.
Нужна ваша помощь. Пытаюсь собрать осцилограф на Atmega32: http://bezkz.su/publ/shemy/oscillografy/700212-oscillograf-na-mikrokontrollere-atmega32a.html
Устройство вроде бы не сложное, но проблема в том что в оригрнальной схеме используется дисплей WG12864A а у меня есть только 12864ZW с процессором ST7920. У нас во всем городе вообще нет графических дисплеев, а на покупку подходящего к схеме дисплея просто нет средств... семейный бюджет...
Вопрос чем: можете помочь подправить прошивку под дисплей 12864ZW?
Файл с исходниками прилагаю.
Я только начинаю изучать микроконтроллеры. И Си для меня неизвестный язык, я начал изучать ассемблер, и два языка одновременно не потяну...
Очень надеюсь на вашу помощь!
Вложения
osciloskop_atmega32_v3.rar
осцилограф на Atmega32
(502.48 KiB) Скачиваний: 519

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

Сб июл 26, 2014 23:58:00

У этих контроллеров коренным образом различается организация видеопамяти, так что вряд ли кто-то возьмётся за адаптацию прошивки, тем более, написанной, похоже, на ассемблере.

Кстати, на на том же алиэкспрессенужный дисплей можно купить в Китае долларов за 8. Вряд ли это сильно скажется на семейном бюджете

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

Вс июл 27, 2014 16:36:09

WiseLord писал(а):Кстати, на на том же алиэкспрессенужный дисплей можно купить в Китае долларов за 8. Вряд ли это сильно скажется на семейном бюджете
А лучше не заморачиваться, и заказать что-то типа такого http://ru.aliexpress.com/item/ARM-DSO20 ... 02838.html
По моему 2 тр сейчас - не деньги...

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

Вс авг 03, 2014 21:12:53

Добрый день всем.
Подскажите как мне ввести свои символы в CGRAM
RS,RW,(0,1,AC5,AC4,AC3,AC2,AC1,AC0) - Переход в CGRAM, где RS и RW =0, ACn = адрес в CGRAM

Как этот адрес делится по вертикали? и по горизонтали? как туда пихать данные?
А потом по какому адресу в DDRAM считать их?

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

Пн авг 04, 2014 03:02:04

Если я тебя правильно понял, то тебе нужно вывести свой символ в виде картинки. В самом начале темы есть http://avrprog.blogspot.ru/2013/12/lcd- ... 920-8.html статья . В ней подробно расписано, как обращаться к дисплею в граф. режиме. Сразу скажу, что если тебе нужно вывести 1 символ в "место" не кратное 16 пикселям (да-да, когда адресуешь, то там по оси Х можно выбирать положение только со смещением в 16 пикселей), то нужно будет дописать в код еще и "пробелы", (то есть вывести предыдущий символ + новый), т.к. старый будет затераться. Это было к символам меньше 16 пикселей по горизонтале. А вообще просто прочти в последней, выложенной мной, проект. Там в файле LCD12864.h есть эта функция (правда только со шрифтами 8x8)., но поучиться сойдет. Там подробное описание каждой функции, а в одноименном ".c" файле сама функция. Просто внимательно прочти. Если будет что-то не понятно - пиши.
P.S по оси X все не однозначно, ты можешь перемещаться по 16 пикселей, как было сказано ранее. С 0-го по 7-е смещение ты находишься в верхней части экрана, а с 8-е по 15-е в нижней. По оси Y можно перемещаться с 0 до 31. Почему так - описано в статье. Нужно этот факт помнить, много крови попил, когда писал низкоуровневые модули. И еще. Передать только X или Y не получится. Нужно сначала X, потом Y, а только потом уже коды пикселей...

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

Пн авг 04, 2014 07:32:03

Вадиматоричик писал(а):Нужно сначала X, потом Y, а только потом уже коды пикселей...
Вроде наоборот - сначала Y, потом X.

А вообще да, дисплей странноватый по управлению. Но китайцам для выводов иероглифов, наверное, удобно. Там же внутри их дофигища прошито, и даже некитайские символы (кириллица, латиница) уродливого вида 16x16 там есть... можно, если хочется странного, даже и их выводить в режиме 4 строк по 8 символов.

Всё-таки для такого дисплея идеально использовать кадровый буфер на 1кБ (128*64/8). Но нужен контроллер с хотя бы 2кБ ОЗУ.

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

Пн авг 04, 2014 08:34:07

Все спасибо ща почитаю... А насчет CGROM т.е вывод символов которые прошиты в ПЗУ дисплея, я понял как их выводить... а вот не понял как пихать в CGRAM данные... а потом по какому адресу выводить... ща почитаю...

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

Пн авг 04, 2014 10:16:03

Вадиматоричик писал(а):Если я тебя правильно понял, то тебе нужно вывести свой символ в виде картинки. В самом начале темы есть http://avrprog.blogspot.ru/2013/12/lcd- ... 920-8.html статья . В ней подробно расписано, как обращаться к дисплею в граф. режиме. Сразу скажу, что если тебе нужно вывести 1 символ в "место" не кратное 16 пикселям (да-да, когда адресуешь, то там по оси Х можно выбирать положение только со смещением в 16 пикселей), то нужно будет дописать в код еще и "пробелы", (то есть вывести предыдущий символ + новый), т.к. старый будет затераться. Это было к символам меньше 16 пикселей по горизонтале. А вообще просто прочти в последней, выложенной мной, проект. Там в файле LCD12864.h есть эта функция (правда только со шрифтами 8x8)., но поучиться сойдет. Там подробное описание каждой функции, а в одноименном ".c" файле сама функция. Просто внимательно прочти. Если будет что-то не понятно - пиши.
P.S по оси X все не однозначно, ты можешь перемещаться по 16 пикселей, как было сказано ранее. С 0-го по 7-е смещение ты находишься в верхней части экрана, а с 8-е по 15-е в нижней. По оси Y можно перемещаться с 0 до 31. Почему так - описано в статье. Нужно этот факт помнить, много крови попил, когда писал низкоуровневые модули. И еще. Передать только X или Y не получится. Нужно сначала X, потом Y, а только потом уже коды пикселей...



Так, вы мне по ссылке дали помойму, где описан графический режим.
А я про текстовый режим. Здесь - http://habrahabr.ru/post/213459/, описывается инициализация.

1) После инциализации, мы указываем на позицию в DDRAM т.е. адрес на дисплее где будет выводиться, символ, делается это специальной командой установки адреса курсора: 1 AC6 AC5 AC4 AC3 AC2 AC1 AC0
С помощью этой команды можно поставить курсор в нужное место вписав за место AC0-AC6 адрес от 0 до 31.

2) Далее мы передаем данные в DDRAM, тем самым указывает адрес символа, в CGROM, делается это специальной командой Write RAM (см. Даташит ST7920, стр. 16/49): B7 B6 B5 B4 B3 B2 B1 B0.
B7-B4 - адрес по вертикали, B3-B0 - адрес по горизонтали.

3) Проделав эти операции, ориентируясь в таблице CGROM, т.е. из таблицы вшитых символов, я выводил символы.

4) В Даташите написано что есть CGRAM, эта область куда мы можем сами вписывать свои символы или другими словами рисовать. Размер этих символов 16x16x4 т.е. размер одного символа будет 16х16 пикселов, и всего таких символов будет 4.
Есть специальная команда для перехода на CGRAM (см. Даташит ST7920, стр. 16/49), Set CGRAM Address 0 1 AC5 AC4 AC3 AC2 AC1 AC0 - где AC5-AC0 адреса в CGRAM.

5) Вопрос:
а) Как адрес этого CGRAM делится по вертикали и по горизонтали?
б) Как "Впихивать" биты? алгоритм? если, можно словесно, по строчно, как в ссылке выше.
в) Впихав данные, я переключусь на DDRAM (Пункт 1), т.е. укажу поцию на дисплее откуда начать вывод символов, далее нужно будет указать адрес своих "впиханных" символов, по каким адресам будут находиться эти символы? Соответственно я буду делать это используя специальную команду (Пункт 2).

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

Чт авг 07, 2014 18:08:08

Вы меня заинтересовали. Честно сказать 4 символа 16*16 пикселей - это ни о чем. Не советую их использовать. Сам никогда этим не занимался, т.к. не практично, потому что после вывода каждой русской буквы (за исключением тех, которые совпадают с английской раскладкой) вам придется загружать новую букву. Алгоритм будет тогда такой.
1. В "пустую" CGRAM (память, в которой хранятся коды 4-х специальных символов) грузится новое значение, например буква "Ю" с самым первым адресом (у каждого "спец символа" есть свой адрес, например 0x00 или 0x23. Посмотрю даташит позже). Об алгоритме загрузки пока ничего сказать не могу, не пользовался, но подозреваю, что там все так же, как и с загрузкой граф. изображения, только в меньшем объеме.
2. Переключаешься на режим "стандартных шрифтов" и "пишешь" код своего "спецсимвола" (в данном случае "Ю"). И получаешь его на экране. В данном случае навигация по экрану такая же, как и в представленной вами статье. Работаете со своим символом как с обычным.
3. Если вам нужна еще буква, которой нет в стандартном шрифте, то возвращаетесь к 1-му пункту и с начала.
Уточнения:
1. Если вам нужно всего 4 своих символа, то можно сразу их загрузить в память и потом вызывать без постоянной перезаписи. В случае, если больше, то советую чаще всего используемые оставлять, а перезаписывать только редкие на редкие.
Пример: "Мама мыла раму долго!". М, р, у, а, о, ! - совпадают с английским шрифтом, а вот: ы, м, л, д, г - нет. Здесь буква м часто повторяется, так что ее логичнее оставит, а вот остальные встречаются по 1 разу, тут не важно, как часто будете перезаписывать. Все равно после загрузки первых 4-х символов 2-м не хватит места. И их придется переписывать.
Таким образом код 2-го символа (1-й у нас "м") может быть как ы, так и л, д, или г. Не забываем так же и о порядке следования букв в тексте.
2. Стертые из CGRAM (памяти "картинки" необычного символа), но уже написанные на экране символы не пропадают, т.к. их изображения (расположение на экране) находится в памяти "картинок".
Все сводится к такому: грузим в CGRAM (память граф. изображения необычного символа) -> в текст режиме "пишем" код необычного символа -> он сам попадает в область памяти, которая непрерывно выдается на экран в виде картинки размером 128*64.
Насчет всех ваших вопросов. Пока нет возможности, скоро, специально для вас, напишу подробный алгоритм работы в данном режиме + выложу рабочий код.
Последний раз редактировалось Вадиматоричик Пт авг 08, 2014 12:01:44, всего редактировалось 1 раз.

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

Чт авг 07, 2014 18:38:38

Вадиматоричик писал(а):не практично, потому что после вывода каждой русской буквы (за исключением тех, которые совпадают с английской раскладкой) вам придется загружать новую букву.
Интересно, но я именно этот алгоритм применил когда сделал либу печати кириллицей на нерусских 1602 дисплеях...
http://asis-kbr.ru/forum/viewtopic.php?f=13&t=139

Кстати во всю применяю... нерусские индикаторы с алиэкспресса дешевенькие, ок 65 р\шт, пихать можно всюду, а библиотечка при этом выручает :).....

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

Чт авг 07, 2014 18:53:21

Метод не мой, наткнулся на него в интернете, с тех пор применяю. У нас цены упали аш до 90 руб за HD477... Но без русского. Там можно обойтись данным методом :))

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

Чт авг 07, 2014 22:30:42

cas2010 писал(а):2. Стертые из CGRAM (памяти "картинки" необычного символа), но уже написанные на экране символы не пропадают, т.к. их изображения (расположение на экране) находится в памяти "картинок".
Вы в этом уверены? Если так, то хорошо..

Просто в том же контроллере HD44780 (KS0066) это немного не так. Правда, там 8 пользовательских символов, а не 4 (хотя в ST7920 они, по идее "двойные"). И если какой-то из них вывести на экран, в том числе, несколько раз в разных позициях, а потом начать менять код символа в CGRAM, то то, что на экране - не остаётся, а начинает синхронно меняться. Т.е. какого-то "экранного" буфера нет, и любое изменение "наполнения" символа в CGRAM тут же отражается на экране, везде где этот символ выведен.

Правда, этот дисплей как бы графический, и, возможно, тут другая ситуация, и символьный режим является всего лишь своего рода упрощённым "прокси" для графического. И то, что на экран попало, уже не зависит от изменений в CGRAM. Правда, я в этом не уверен.

Но если это всё же так, то тогда, наверное, алгоритмически проще не использовать все 4 пользовательских символа, а всего лишь один. Т.е. генерировать любой нестандартный символ "на лету", тут же выводить его на экран, и забывать про него, используя эту же ячейку для следующего нестандартного.


Но, конечно, для этого контроллера идеально использовать МК пожирнее, с лишним 1кБ ОЗУ для экранного буфера. Тогда, в чисто графическом режиме, вообще любые ограничения на размер и стиль шрифтов отпадают. Ну, за исключением размера flash-памяти для их хранения, естественно.


P.S. Кстати, кто-нибудь обращал внимание, что в текстовом режиме протокол ST7920 подозрительно похож на KS0066?

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

Пт авг 08, 2014 01:29:36

WiseLord писал(а):Кстати, кто-нибудь обращал внимание, что в текстовом режиме протокол ST7920 подозрительно похож на KS0066?

Лично меня, текстовый режим вообще не интересует... если использовать этот дисплей, то только в графическом режиме... именно так как вы упомянули с 1кб буфером...
Я именно об этом тут как то пытался объяснять http://forum.cxem.net/index.php?showtop ... try1787897

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

Пн авг 11, 2014 12:23:49

Вопрос немножко не по теме, но все же. Есть мысль сделать отладочную плату-борд на нашем диспейчике, но не могу определиться с МК. Были вот такие рассуждения:
1. STM32F4... Но без контроллера LCD-TFT (LTDC), т.к. он тут не нужен, но пихать такой камень как-то не очень хочется. Слишком много это 180 мгц, да и с этим дисплеем вполне и 8-ми битки справятся.
2. STM32F103... Сейчас заказал себе модуль на этом мк, по виду, как Arduino Nano, думал сделать плату с местом под эту платку. Или же сразу впаять свой мк со своей обвязкой.
3. Atmega328p. В принципе в ней есть все, что необходимо для нашего дисплея и общения с PC по USART, + дополнительные пины. Его мощности (20 мгц + аппаратный SPI) вполне хватит для работы с дисплеям, + много свободного процессорного времени он будет просто спать. ОЗУ, конечно мало, но зато цена в 120 руб вполне приемлема. На Atmega8 точно делать не буду, т.к. в ней нет отладки, а я рассматриваю варианты именно с отладкой. + нельзя будет держать буфер экрана. Но на этот счет я просто добавлю в библиотеку несколько функций, которые будут работать напрямую, без участия ОЗУ.
Так же включу в борд и всю необходимую обвязку для приятной работы (выходы под программирование и отладку, питание, стабилизаторы, держатель экрана, переменный резистор и т.д.).
Пока неизвестно, куда смогу засунуть этот агрегат, но хочется сделать. Т.к. периодически появляется желание попробовать подключить экран к чему-то, и каждый раз провода - надоели. Прошу дать обоснованный совет. Просто хочется сделать "игрушку" с возможностью потом реального применения. И еще. Если время позволит, все же хотелось бы написать свою API для работы с этим экраном + программу-конструктор интерфейса для компьютера.

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

Пн авг 11, 2014 22:26:40

Вадиматоричик писал(а):Есть мысль сделать отладочную плату-борд на нашем диспейчике
У меня тоже давно веет... правда не отладочную плату, а законченый универсальный модуль, который можно использовать как например панель управления.

Вадиматоричик писал(а):не могу определиться с МК.
Давно определился... хочу использовать с STM32F100C8T6B, уже год лежат 10 штучек, вот только нужен какой то "толчек" :)...
Брал тут http://ru.aliexpress.com/item/Free-ship ... nVersion=1
Штучка по 50р... вроде самэ то, флэша 64кб, оперативки 8кб... Как раз и буфер дисплея прекрасно будет себя чувствовать...

Вадиматоричик писал(а):Были вот такие рассуждения:
1. STM32F4... .... Слишком много это 180 мгц, да и с этим дисплеем вполне и 8-ми битки справятся.
Именно, слишком жирно...

Вадиматоричик писал(а):2. STM32F103...
Тоже жирновато...

Вадиматоричик писал(а):3. Atmega328p.
В принципе можно... если бы не это -
Вадиматоричик писал(а):ОЗУ, конечно мало
и не это
Вадиматоричик писал(а):цена в 120 руб


Вадиматоричик писал(а):На Atmega8 точно делать не буду
Она только для обычного символьного 1602 - самэ то...
Для нашего дисплея - утопия... Графики совсем не поместится...

Вадиматоричик писал(а):Пока неизвестно, куда смогу засунуть этот агрегат, но хочется сделать.
Ну мне проще... у меня есть конкретная цель...
Для начала это будет панель управления умным двором... потом, панель управления бензиновым электрогенератором... ну и на потом есть еще несколько прикидок...
Для всего этого должен использоваться один универсальный модуль с дисплеем ST7920...
У него будет:
6 кнопок управления (esc, left, right, up, down, enter)
Цифровая шина S-Line (моя разработка, типа K-Line, только со своим протоколом, кодирование MANCHESTER на скорости 1кб\с - 16кб\с) можно подключать до 128 сканирующих\коммутирующих устройств.
Шина RS-485 (для связи с компом).
Линия 1wire (для термодатчиков, хотя их можно включать и в модули на линии S-Line)
Шилды расширений и портов.
Ну вроде как то так... если чего не забыл.....

Вадиматоричик писал(а):хотелось бы написать свою API для работы с этим экраном
Я хочу вообще исключить работу с текстовым режимом дисплея. Будет буфер дисплея в RAM контроллера 1кб, вся печать, и текст и графика, будут непосредственно туда (если будет много шрифтов, или графических картинок, можно ARM на 128кб воткнуть).
В фоне, с помощью DMA этот буфер будет рефрешить дисплей, например с частотой 10гц, или чаще.

Таким способом, можно построить очень гибкую библиотеку:
Функции печати разными шрифтами без привязки к знакоместам
Функции вывода диалоговых окон в рамках
Функции вывода упакованных картинок с печатью текстом поверх картинки
В обЧем... аж слюни текут.....

Кстати... графику как таковую (линии, круги и прочие фигурки) думаю не буду реализовывать... все что мне надо - оконный интерфейс и упакованные картинки...

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

Вт авг 12, 2014 05:11:38

1. Попробую реализовать вашу идею от нечего делать, может что и получиться.
2. Под API я и имел ввиду оконный интерфейс. Например написал Button(0, 0, standart, scan) и МК сам рисует кнопку в определенном окне и опрашивает сенсор, а когда будет нажатие, на экране делает ее графическую инверсию (чтобы было понятно, что кнопка нажата) и вызывает нужную функцию.
3. Как я понял, вам нужно USART/UART для связи с компьютером (планирую развести как этот интерфейс в чистом виде, так вставить FT232 c USB выходом) + расширитель портов + развести выводы под различные интерфейсы с удобными держателями. Это и мне самому нужно.
4. Я все же ещё добавлю помимо кнопок сенсорный экран. Так что 4 пина придется потратить. Заказал в 48-ногом корпусе.
5. Насчёт DMA. Забудьте про это! Я это уже прошёл. Весь мозг себе взорвал. 4 дня пытался. Не получилось.
* Во-первых. Вам придётся потратить 4 КБ. ОЗУ. Да-да! Чтобы выводить через дма нужно не менее 4-х КБ. + вам нужно будет в каждой функции библиотеки учитывать организацию памяти, а она будет такая, что и врагу не пожелаешь. Инициализации дисплея мы пока пропускаем, а передача будет таковой: (формулировка: передать 1 байт данных/команды = 1 байт управления + байт со старшей половиной + байт с младшей половиной. И того 1 байт будет занимать 3 в ОЗУ, чтобы передача велась без участия процессора.) передаем команду с адресом x/y (2 цельных байта, в ОЗУ - 6), 16 байт строки (или сразу 32, чтобы сэкономить на указании адреса в каждой строк, но тогда адресация будет убийственная), и так далее до конца передачи всех строк.
* Здесь есть один фокус с задержками. Команды выполняются не мгновенно. А это значит, что после передачи команды нужно обязательно ждать, что уже делает передачу по DMA бесполезной. Был такой вариант "Передаем команду х/у, ждём, передаем из ОЗУ уже переведенные в формат дисплея данные по DMA, переинициализируем DMA на новый адрес ОЗУ. И так каждый раз. Вообщем получилось так что по прерываниями с эти дисплеем работать в 100 раз проще чем с dma. Да и количество потребляемых ресурсов сокращается в разы (в 5!!!). А если потом использовать какую-нибудь ОС, то SPI лучший вариант. Т.к. пока он передает - можем поспать.
P.S. Начал делать борд. Но не нашел форм-фактора данного МК (LQFP48) для Sprint-Layout. Пришлось делать самому:
STM32F100xx value line LQFP48 pinout.rar
(95.59 KiB) Скачиваний: 330

Прошу указывать на ошибки, если они есть. А то был опыт со 100 ногим STM32. Там на долю миллиметра ошибся и ножки поплыли.
Делал по этому материалу, а подписи брал из даташита.
modelLQFP48.rar
(142.31 KiB) Скачиваний: 304

P.S.S. Нашего LCD так же не нашел, а в даташите нет нормального чертежа. Делал по этой картинке:
dimension.jpg
(54.3 KiB) Скачиваний: 593

Вот в .lay для все того же Sprint-Layout-а.
LCD12864.rar
(4.44 KiB) Скачиваний: 385

Вопрос:
1. Стоит ли в модуль добавлять высоковольтное реле? Если да, то сколько штук? (Само собой реле через мосфет транзистор).

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

Вт авг 12, 2014 10:34:20

Вадиматоричик писал(а):Я все же ещё добавлю помимо кнопок сенсорный экран.
Это конечно заманчиво... Но мне пока как то это кажется усложнением, хотя подумаю тоже.
А что есть подходящее для этого дисплея и по чем?

Вадиматоричик писал(а):Насчёт DMA. Забудьте про это! Я это уже прошёл. Весь мозг себе взорвал. 4 дня пытался. Не получилось.
Ну в начале можно конечно и без DMA, но потом думаю все таки лучше разобраться...

Вадиматоричик писал(а):придётся потратить 4 КБ. ОЗУ. Да-да! Чтобы выводить через дма нужно не менее 4-х КБ.
Это что, даже если мне надо отправить 10 байт, придется выделять 4кб ?????

Вадиматоричик писал(а):вам нужно будет в каждой функции библиотеки учитывать организацию памяти, а она будет такая, что и врагу не пожелаешь.
Это вы говорите про расположение переменных в RAM? Так это только на асме должна голова об этом болеть... а на Си - это не актуально... там компилятор все сам учитывает и располагает...
Если же все таки имеете ввиду организацию видеопамяти внутри дисплея то об этом ниже...

Вадиматоричик писал(а):передача будет таковой: (формулировка: передать 1 байт данных/команды = 1 байт управления + байт со старшей половиной + байт с младшей половиной. И того 1 байт будет занимать 3 в ОЗУ, чтобы передача велась без участия процессора.) передаем команду с адресом x/y (2 цельных байта, в ОЗУ - 6), 16 байт строки (или сразу 32, чтобы сэкономить на указании адреса в каждой строк, но тогда адресация будет убийственная), и так далее до конца передачи всех строк.
Сложно вы все представляете...
Я думаю можно передавать в дисплей, весь массив от начала до конца... и в буфере озу сохранить ту же структуру что и внутри дисплея... ничего страшного в такой организации буфера не вижу... вы вспомните как устроен буфер экрана в спектруме, и ничего, все бегало, прыгало :).....
Так что если DMA использовать, то контроллер только в начале по прерыванию задаст параметры передаваемого буфера и все, дальше участия не принимает, буфер сливается аппаратно...

Вадиматоричик писал(а):есть один фокус с задержками. Команды выполняются не мгновенно. А это значит, что после передачи команды нужно обязательно ждать, что уже делает передачу по DMA бесполезной. Был такой вариант "Передаем команду х/у, ждём, передаем из ОЗУ уже переведенные в формат дисплея данные по DMA, переинициализируем DMA на новый адрес ОЗУ. И так каждый раз. Вообщем получилось так что по прерываниями с эти дисплеем работать в 100 раз проще чем с dma. Да и количество потребляемых ресурсов сокращается в разы (в 5!!!).
Это не актуально, если буфер передавать целиком и оставить его структуру как в дисплее...

Вадиматоричик писал(а):Вопрос: Стоит ли в модуль добавлять высоковольтное реле? Если да, то сколько штук? (Само собой реле через мосфет транзистор).
Я не буду добавлять никакие силовые цепи, у меня будет чисто мозг с общением с внешним миром по цифровой линии или по RS485...
Например в варианте с электрогенератором - будет отдельно панель управления (вся моя плата с дисплеем и кнопками управления), и отдельно силовой шкаф с пускателями и силовой схемой (и кстати с еще одним контроллером)... так что панель можно будет прикрепить куда угодно, хоть на дверцу шкафа, хоть на стену...
Но в вашем случае, если это будет больше стенд, чем конечное устройство, то может и можно...

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

Вт авг 12, 2014 12:24:40

1. Сенсор купил самый дешевый от LG GT540 за 80 руб (новый). Но немного прогадал с размером. Он практически 1 в 1 с видимой областью экрана, а по-этому часть пикселей не видно. Но ничего страшного в этом нет. Для домашних опытов сойдет. Но в будущем, если будете искать себе - берите с запасом. Все равно результаты ADC придется переводить в свой формат (эта функция есть в последней выложенной мною библиотеке).
2. По-поводу DMA. Сложно говорить о таких вещах без картинок. По-этому сейчас все поясню наглядно:
http://img.radiokot.ru/files/37453/f149e8bpt.jpg
Надеюсь, что так будет понятнее. С точки зрения DMA, мы просто указываем ему начало буфера и его конец (начало + 3456 байт). И он спокойно выдает все на экран. Такой способ работал у меня, но приходилось понижать скорость SPI, чтобы после передачи 6 байт (2 разложенных) указателя на строку LCD успел перевести указатель.
Последний раз редактировалось Вадиматоричик Вт авг 12, 2014 13:05:36, всего редактировалось 1 раз.

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

Вт авг 12, 2014 13:05:06

Вадиматоричик писал(а):По-поводу DMA. Сложно говорить о таких вещах без картинок. По-этому сейчас все поясню наглядно:
http://img.radiokot.ru/files/37453/f149e8bpt.jpg
Я все равно особо не въехал... ну да ладно, я тоже скоро попробую реализовать первые опыты, там уже легче обсуждение пойдет :)...
И кстати, я хочу подключить дисплей по 8 бит шине, а не по SPI... По крайней мере в моем случае нет смысла экономить на ногах контроллера...
Последний раз редактировалось shads Вт авг 12, 2014 13:07:49, всего редактировалось 2 раз(а).

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

Вт авг 12, 2014 13:07:10

shads писал(а):
Вадиматоричик писал(а):По-поводу DMA. Сложно говорить о таких вещах без картинок. По-этому сейчас все поясню наглядно:
http://img.radiokot.ru/files/37453/f149e8bpt.jpg
Я все равно особо не въехал... ну да ладно, я тоже скоро попробую реализовать первые опыты, там уже легче обсуждение пойдет :)...
И кстати, я хочу подключить дисплей по 8 бит шине, а не по SPI... По крайней мере в моем случае нет смысла экономить на ногах контроллера...

Тогда с DMA все будет элементарно!!! Вам не нужно будет делать преобразование под SPI формат, а так же соблюдать расположение байт. Достаточно будет указать откуда (начало озу), сколько (1024), и куда (адрес порта). НО. Со стробом-то как быть? Как вариант - настроить таймер и шим, пустив вместе с DMA.
Последний раз редактировалось Вадиматоричик Вт авг 12, 2014 13:09:36, всего редактировалось 2 раз(а).
Ответить