syoma 1 14 марта, 2008 Опубликовано 14 марта, 2008 · Жалоба Народ подскажите пожалуйста, кто сталкивался с реализацией интерфейса от процессора к таким LCD. То есть есть видеобуффер с 18-битным цветом. И я делаю на FPGA реализацию низкоуровнего интерфейса, который бы с определнным Фреймрейтом(60FPS) запихивал его в LCD. Прикол в том, что есть два последних дисплея из вышеупомянутого списка и спецификация от Шарпа на такой же дисплей. Все дисплеи имеют абсолютно одинаковую распиновку, разрешение 320х240, по 6 бит на цвет и одинаковые и как я понял стандартные сигналы VSYNC, HSYNC, DATA_ENABLE, CLK, R/L, U/D. С двумя последними вроде все понятно - они определяют направление развертки и по идее просто цепляются к соответсвующим напряжениям питания. Но со всеми остальными полная фигня. Во первых я так и не понял - в двух моделях описано два возможных режима работы FIXED и DE. Второй вроде как упрощенный - только DE, но почему-то в одном дисплее используется сигнал VSYNC, а в другом просто DE должен быть длинней и это вроде как начало кадра. Во вторых у всех FIXED Mode вроде как одинаковый, но у каждого свои тайминги для VSYNC и HSYNC и свои количества холостых линий и пикселей - у одного 50 линий после VSYNC, у другого 37, у трeтьего 74, то есть при всей своей одинаковости - заменить один дисплей на другой без изменения программы нельзя - картинка просто будет сдвинута. Также в этом режиме одному нужен DE, другой только без DE работает а в третьем можно и так и так - DE определяет начало рабочих данных. Ну и что вообще меня убило, что у них разная полярность сигнала DE и что самое прикольное фазировка CLK! У одного синхрoнизация по спаду у другого по фронту! В общем я офигел, причем все пишут что базируются на одной спецификации от Sharpa. В итоге 2 дня мудохаюсь, на одном дисплее всякие полоски мигают. Другой просто черный. Помогите разобраться плиз - все таки надо этот FIXED режим реализовывать или как то еще их можно запустить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ledmaster 0 16 марта, 2008 Опубликовано 16 марта, 2008 · Жалоба Во первых я так и не понял - в двух моделях описано два возможных режима работы FIXED и DE. Второй вроде как упрощенный - только DE, но почему-то в одном дисплее используется сигнал VSYNC, а в другом просто DE должен быть длинней и это вроде как начало кадра. Все сигналы действительно стандартные, активный уровень сигнала DataEnable всегда соответствует активной части строк в активной части кадра, это инверсия сигнала BLANK - гашения информации. Частенько в документации на панели встечается примечание, что если DE имеет постоянный (высокий или низкий) уровень, дисплей будет черным, с некоторым мерцанием. Стандартно, импульсы строчной и кадровой синхронизации должны находится внутри интервалов гашения, не суть важно где именно, какое-то изображение, пусть со сдвигом, Вы все равно должны получить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Linker 6 16 марта, 2008 Опубликовано 16 марта, 2008 · Жалоба на одном дисплее всякие полоски мигают. Другой просто черный. Тот у которого хоть что-то есть на экране - перспективен для дальнейшей отладки. Скорее всего там надо упорядочить частоты. А лучше, если бы Вы написали какой конкретно дисплей мучаете, схему и алгоритм (прогу). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
syoma 1 16 марта, 2008 Опубликовано 16 марта, 2008 · Жалоба Тот, что черный - NEC3224BC35-22. 5.5" QVGA дисплей. Как раз мне он кажется более многообещающим с точки зрения отладки, так как он работал на демонстрационной плате. Второй - я считаю noname, так как фирма непонятная - U.R.T и даташит непонятный. К сожалению посмотреть осциллограмы рабочей платы я не могу, так как демо-прогу просто стерли и теперь не знают где искать. Но насколько я понял моя ошибка в том, что я понадеялся на режим DE, а его не надо испльзовать, а нужны все сигналы и горизонтальной и вертикальной синхронизации. Если так, то моя прога в System Generatore однозначно неправильная. Просто могу описать как она работает, если получится. За оптимизацию прошу не пинать Счетчик Counter_CLK считает с частотой 12Мгц до 800, т.к самый младший бит счетчика используется как клок CLK, то получается, что CLK имеет частоту 6Мгц и счетчик как раз отсчитывает 400 клоков, что составляет длину одной линии (320+холостые клоки). Дальше стоит компаратор, который выдает 1 если значение счетчика менее 320. Это генерация сигнала DE. Логика И после этого служит для блокирования сигнала DE, во время импульса вертикальной синхронизации и чтобы количество DE импульсов соответствовало 240. Для єтого стоит счетчик Counter_DE, который считает с частотой 1/(CLK*400), т.е. с частотой вертикальной развертки. Если значение счетчика менее 240 строк, сигнал DE генерируется, иначе запускается Counter2, который считает с такой же частотой как и предыдущий счетчик(нахрена тогда этот счетчик нужен? Вопрос самому себе). Выход этого счетчика с помощью компараторов генерирует сигнал VSYNC, который начинается за 5 строк после окончания генерации DE, длится 5 строк, и еще 5 строк ничего не происходит. Затем он сбрасывает счетчик строк. Т.о. длительность вертикальной развертки составляет 240+5+5+5=255строк. Счетчик Counter_Adr, используется как счетчик адреса в видеобуфере, и инкрементируется с частотой клока. Он инкрементируется, только если DE активный, то есть, когда выводятся правильные данные. Дальше должен быть сам буффер, но я просто подал выход счетчика на выход данных. Т.о я ожидал увидеть стабильные цветные полосы, или что-то похожее на это. Всякие Delays служат для синхронизации клока, данных и DE по фронтам. Инвертированный сигнал - Vsync - это уже следствие экспериментов. Я так понял, что проблема в Vsync - то что его просто нема. Еще вопрос. Осцик показывает фронты по 30-40 нс - это очень плохо? Просто линии связи сейчас порядка 50см. Дисплей с такой длинной проводов будет работать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ledmaster 0 16 марта, 2008 Опубликовано 16 марта, 2008 · Жалоба Я с Xilinx’ом не работал, приведу очень простой пример дизайна для Altera. Девятиразрядный счетчик по модулю 400 формирует строчный интервал ( 320 тактов активной части строки + 80 тактов гасящий интервал). Строчный гасящий импульс формируется компаратором по условию H[8..0] больше или равно 320. Совершенно аналогично формируется кадровый интервал. Сигнал DATA_ENABLE формируется элементом ИЛИ-НЕ из строчного и кадрового гасящих импульсов ( выведены на внешние контакты для наглядности). В качестве сигнала CLC для LCD панели используется прямой или инвертированый системный CLC ( учитываем, что смена адреса H[8..0], V[8..0] происходит синхронно по фронту CLC). Если панели действительно нужны сигналы HS и VS, каждый из них можно сформировать одинаковой схемой из двух компараторов, сравнивающих значение счетчика с константами начального и конечного положения импульса, и RS-триггера, включаемого первым компаратором и выключаемого вторым. Замечу, что в общем случае, адрес для экранной памяти формируется отдельным счетчиком, счет которого приостанавливается на время гасящих интервалов, что позволяет использовать ровно столько памяти, сколько занимает активная часть изображения. В данном случае, это было бы актуально для изображения 320 х 200 = 64000 ( 64К памяти) против 512 х 256 ( 128К ), а для 320 х 240 = 76800 все равно придется использовать память длиной 128К, так что можно формировать адрес прямо из H[8..0], V[7..0]. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
syoma 1 16 марта, 2008 Опубликовано 16 марта, 2008 · Жалоба Спасибо. Но эта схема с работающего дизайна или просто пример? Действительно можно обойтись без H_SYNC и V_SYNC? Я у себя заметил еще, что H_SYNC всегда имел низкий уровень, что похоже наверняка свело с ума контроллер LCD. А по памяти - у меня будет использоваться Xilinxовская встроенная BRAM. а цветов будет всего 64, и тут получится ровно 76800*6 бит. Именно столько синтезатор и возъмет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ledmaster 0 16 марта, 2008 Опубликовано 16 марта, 2008 · Жалоба Спасибо. Но эта схема с работающего дизайна или просто пример? Действительно можно обойтись без H_SYNC и V_SYNC? Я у себя заметил еще, что H_SYNC всегда имел низкий уровень, что похоже наверняка свело с ума контроллер LCD. А по памяти - у меня будет использоваться Xilinxовская встроенная BRAM. а цветов будет всего 64, и тут получится ровно 76800*6 бит. Именно столько синтезатор и возъмет. Да, это рабочая схема для Toshiba LTM210 (640х480), только значения подставлены другие, под Ваш пример. Там входов HS и VS нет вообще, а обойдется ли без них Ваша панель... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
syoma 1 17 марта, 2008 Опубликовано 17 марта, 2008 · Жалоба То есть я так понял, что вы работаете в DE режиме. К сожалению, у меня из 4-х документаций этот режим описан только в 2-х и то - в одной панели нужен VSYNC, а в другой - нет - как у вас. Поэтому я на него рассчитывать не могу, а буду делать обычный FIXED режим. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ledmaster 0 17 марта, 2008 Опубликовано 17 марта, 2008 · Жалоба То есть я так понял, что вы работаете в DE режиме. К сожалению, у меня из 4-х документаций этот режим описан только в 2-х и то - в одной панели нужен VSYNC, а в другой - нет - как у вас. Поэтому я на него рассчитывать не могу, а буду делать обычный FIXED режим. Я работаю в разных режимах, в частности, проекционные матрицы требуют формирования существенно более сложного набора сигналов, но тем не менее, все решаемо. А насчет HS и VS, как я уже говорил, требуется очень простое дополнение к приведенной схеме: Если панели действительно нужны сигналы HS и VS, каждый из них можно сформировать одинаковой схемой из двух компараторов, сравнивающих значение счетчика с константами начального и конечного положения импульса, и RS-триггера, включаемого первым компаратором и выключаемого вторым. Или требуется это нарисовать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
syoma 1 17 марта, 2008 Опубликовано 17 марта, 2008 · Жалоба Не надо, заработало. Но почему-то на моих длинных проводах один дисплей показывает картинку с конкретными искажениями - то есть наложения текста или копии текста в разных цветах, все конкретно сдвинуто и т.д. А второй показывает нормально. И есть у меня демонстрационная плата, куда можно дисплей прямо втыкнуть коротким шлейфом - там оба дисплея показывают нормально. Похоже проблема с длиной проводов была. Осцик показывает конкретно заваленые фронты, но я знаю что он брешет, потому что щуп только до 10Мгц и то же самое показывал, когда дисплеи напрямую к плате присоединялись. Схема получилась обычная - с двумя счетчиками и компараторами на H_SYNC, V_SYNC и внутренний DE. Внешний, как оказалось никому не нужен. Только при этом пришлось точно подогнать длину строки 404 клока и длину фрейма - 262 строки. Это почему-то точно задано. Нафига тогда H_SYNC?. Ну и естественно сдвиг картинки подогнать. Теперь дело за Линухом и Microwindows. Интересно, хватит ли производительности Microblaze на 50МГц это все отрисовывать? Может что хорошее посоветуете для GUI? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vladimir_orl 0 13 апреля, 2018 Опубликовано 13 апреля, 2018 · Жалоба Позвольте продолжить тему. Сейчас только начинаю осваивать и верилог и подключение таких дисплеев. OSD057VA01CT_V0.4__With_Touch_.pdf Имею плату DE2-115 от альтеры (точнее терасик). Пишу на верилоге. Имею дисплей OSD057VA (даташит во вложении) Подскажите, сигналы vsync и hsync когда в 1, а когда в 0 ? И то же самое про сигнал DE. Как я понял, лучше перевести дисплей в режим sync ( не de-оnly). Правильно? Код модуля на верилоге: module osdDisplaySimple (input clkPin, input adjVal, output reg pixPin, output reg HYNC_PIN, output reg VSYNC_PIN, output reg dePin, output reg ledAdjPin, output refOutPin); integer pixCnt; integer lineCnt; integer frameCnt; integer ledAdjCnt; integer deLogic; assign refOutPin = clkPin; initial begin ledAdjCnt = 0; pixCnt = 0; lineCnt = 0; frameCnt = 0; HYNC_PIN = 0; VSYNC_PIN = 0; dePin = 0; ledAdjPin = 0; end always @(posedge clkPin) begin ledAdjCnt = ledAdjCnt + 1; if(ledAdjCnt > 1250) begin ledAdjCnt = 0; ledAdjPin = ~ledAdjPin; end pixPin = ~pixPin; // Pixels block pixCnt = pixCnt + 1; if(pixCnt < 640*2) HYNC_PIN = 1; else if(pixCnt < 800*2) HYNC_PIN = 0; else begin HYNC_PIN = 0; pixCnt = 0; lineCnt = lineCnt + 1; if (lineCnt < 480) VSYNC_PIN = 1; else if(lineCnt < 525) VSYNC_PIN = 0; else begin VSYNC_PIN = 0; lineCnt = 0; end end dePin = HYNC_PIN & VSYNC_PIN; end endmodule топ-модуль: module top( input wire [17:0] SW, input wire [3:0] KEY, input wire OSC_50, output wire [7:0] LED_GREEN, output wire [6:0] HEX0, output wire [6:0] HEX1, output wire [6:0] HEX2, output wire [6:0] HEX3, output wire [35:0] GPIO, output wire UART_TXD, output wire [17:0] LED_RED ); integer samples[1024]; integer sampCnt1; integer sampCnt2; integer cnt; integer cntClk; integer trig; integer unitCnt; //module osdDisplaySimple (clkPin, adjVal, pixPin, HYNC_PIN, VSYNC_PIN, dePin, ledAdjPin, refOutPin); osdDisplaySimple Simple (OSC_50, SW[3], GPIO[33], GPIO[1],GPIO[2], GPIO[3], GPIO[4], GPIO[11]); // RED color assign GPIO[32] = SW[0]; // GREEN color assign GPIO[6] = SW[1]; // BLUE color assign GPIO[5] = SW[2]; // DMS assign GPIO[0] = SW[4]; endmodule всё равно не работает.... В какой полярности д.б. сигналы, подскажите пожалуйста. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 22 апреля, 2018 Опубликовано 22 апреля, 2018 · Жалоба Подскажите, сигналы vsync и hsync когда в 1, а когда в 0 ? И то же самое про сигнал DE. Смотрите внимательно описание на дисплей. Если верить ему - активный уровень сигналов H_sync и V_sync - лог. 0. DE - активный уровень - лог.1 Как я понял, лучше перевести дисплей в режим sync ( не de-оnly). Правильно? Как Вам удобнее так и работайте. Код модуля на верилоге: Ужас :rolleyes: всё равно не работает.... И не должно... Ибо код с ошибками. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться