реклама на сайте
подробности

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> EP9307, настройка видеоадаптера
aaarrr
сообщение Oct 9 2006, 22:00
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



V- и H- тайминги исправьте, для 640x480 получается примерно такой расклад:
Код
VLinesTotal     = 0x0000020C
VSyncStrtStop   = 0x02000202
VActiveStrtStop = 0x020C01DF
VBlankStrtStop  = 0x020C01DF
VClkStrtStop    = 0x020C020C

HClkTotal       = 0x0000031F
HSyncStrtStop   = 0x02BF031F
HBlankStrtStop  = 0x000F028F
HActiveStrtStop = 0x000F028F
HClkStrtStop    = 0x031F031F

VideoAttribs    = 0x0000C00F

VCLK лучше поднять до 25MHz, с текущими параметрами кадровая низковата будет - 54Hz.
Go to the top of the page
 
+Quote Post
metalkain
сообщение Oct 17 2006, 12:59
Сообщение #17


Участник
*

Группа: Новичок
Сообщений: 42
Регистрация: 14-09-06
Из: Москва
Пользователь №: 20 373



aaarrr, большое спастбо за ценные советы.
Судя по всему задачу выполнил.
Выяснился не очень ожидаемый факт. Информация выводится на экран не непрерывно, а сначала нечетные строки, затем, с некоторым (причем, нелогичным) смещением в памяти, четные.
Проблема неотображения концовок строк вроде как стала не актуальной, так как необходимо использовать не весь экран.


--------------------
Мне триста лет - я выполз из тьмы...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 17 2006, 20:04
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(metalkain @ Oct 17 2006, 16:59) *
Выяснился не очень ожидаемый факт. Информация выводится на экран не непрерывно, а сначала нечетные строки, затем, с некоторым (причем, нелогичным) смещением в памяти, четные.

blink.gif Однако. Пока даже не могу придумать, как такое вообще может получиться.
Какие у Вас сейчас значения регистров, и каким образом проверяется четность строк?
Go to the top of the page
 
+Quote Post
metalkain
сообщение Oct 18 2006, 15:27
Сообщение #19


Участник
*

Группа: Новичок
Сообщений: 42
Регистрация: 14-09-06
Из: Москва
Пользователь №: 20 373



Код
VidClkDiv=      0x0000C105;     //0000 0000 0000 0000 1100 0001 0000 0100

      RasterSWLock=   0xAA;
    VideoAttribs=   0x0060006F;     //0000 0000 0 11 0 0000 1100 0 000 0110 1111

    VidScrnPage=(unsigned long)&VideoPage[0];
    ScrnLines=      479;          
    LineLength=     0x4F;          
    VLineStep=      0x50;          

      RasterSWLock=   0xAA;
    VSyncStrtStop=  0x01F301F2;
      RasterSWLock=   0xAA;
    VActiveStrtStop=0x000101E1;    
      RasterSWLock=   0xAA;
    VBlankStrtStop= 0x000101E1;    
      RasterSWLock=   0xAA;
    VClkStrtStop=   0x000101E1;    

      RasterSWLock=   0xAA;
    HSyncStrtStop=  0x02930289;
      RasterSWLock=   0xAA;
    HActiveStrtStop=0x00050285;
      RasterSWLock=   0xAA;
    HBlankStrtStop= 0x00050285;
      RasterSWLock=   0xAA;
    HClkStrtStop=   0x00000280;
      RasterSWLock=   0xAA;
    VLinesTotal=    499;          
      RasterSWLock=   0xAA;
    HClkTotal=      0x00000293;

    Pixelmode=      0x00000001;            //0000 0000 0000 0000 00 00 00 00 00 000 001


Память и делители частоты настраивал не я. Не имею даже кода. Загрузку LUT'ов скатал из RasterEUsing.

Четность строк проверяю так:
Код
int ModifyAdr(int i)
{
  if(fmod(i,2*words_per_str)<words_per_str){
    return beg_of_0+(i/words_per_str)*(words_per_lstr/2)+fmod(i,words_per_str);
  }
  else{
    return beg_of_1+(i/words_per_str-1)*(words_per_lstr/2)+fmod(i,words_per_str);
  }
}

где words_per_str - число слов на строку (в моем случае использования части экрана это 30), word_per_lstr - реальное число слов на строку (80),
beg_of_0 - адрес начала первой нечетной строки,
beg_of_1 - фдрес начала первой четной строки.
Функция ModifyAdr преобразует линейный адрес необходимой мне части экрана в адрес SDRAM.


--------------------
Мне триста лет - я выполз из тьмы...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 19 2006, 12:18
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



По поводу таймингов и отображения концов строк:
- Обратный ход по строкам занимает обычно 20% от времени строки, а не 3%.
- Кадры тоже слишком "ужаты".
- Счетчики строк и кадров у EP93xx считают сверху вниз.

Погуглите что-нибудь вроде "vesa 640x480 timings".

Цитата(metalkain @ Oct 18 2006, 19:27) *
Четность строк проверяю так:
Код
int ModifyAdr(int i)
{
  if(fmod(i,2*words_per_str)<words_per_str){
    return beg_of_0+(i/words_per_str)*(words_per_lstr/2)+fmod(i,words_per_str);
  }
  else{
    return beg_of_1+(i/words_per_str-1)*(words_per_lstr/2)+fmod(i,words_per_str);
  }
}

где words_per_str - число слов на строку (в моем случае использования части экрана это 30), word_per_lstr - реальное число слов на строку (80),
beg_of_0 - адрес начала первой нечетной строки,
beg_of_1 - фдрес начала первой четной строки.
Функция ModifyAdr преобразует линейный адрес необходимой мне части экрана в адрес SDRAM.


Честно попытался разобрать этот код.
- Почему "words_per_lstr/2", а не просто "words_per_lstr"?
- Зачем во второй части написано "i/words_per_str-1", если адреса четных и нечетных строк уже учтены?
- Зачем использовать fmod для целых чисел?

ИМХО, лучше так не делать.
Go to the top of the page
 
+Quote Post
metalkain
сообщение Oct 23 2006, 15:42
Сообщение #21


Участник
*

Группа: Новичок
Сообщений: 42
Регистрация: 14-09-06
Из: Москва
Пользователь №: 20 373



Цитата
Почему "words_per_lstr/2", а не просто "words_per_lstr"?

Ибо реально строка располагается на экране на вдвое большем месте. Так, 0-я четная расположится на 0-м, а на 1-м месте будет 0-я нечетная. Может, слегка напутал, но мысль такова. Словом, деление на 2 относится не к words_per_lstr, а к номеру строки в целом.
Цитата
Зачем во второй части написано "i/words_per_str-1", если адреса четных и нечетных строк уже учтены?

) Да, признаться, уже не помню, почему так написал. И вправду не логично. Судя по всему, это может быть связано с п.1. Возможно, я сдуру решил, что сначала будут выводится четные, а потом нечетные.
Цитата
Зачем использовать fmod для целых чисел?

Не считаю себя прогером с громадным опытом, потому лучшего второпях не нашел). Буду признателен, если подскажете, как проще.

ЗЫ. Существует ли алгоритм (без использования стека и рекурсии) для заливки произвольной замкнутой области?

Сообщение отредактировал metalkain - Oct 23 2006, 15:43


--------------------
Мне триста лет - я выполз из тьмы...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 23 2006, 16:00
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(metalkain @ Oct 23 2006, 19:42) *
Ибо реально строка располагается на экране на вдвое большем месте. Так, 0-я четная расположится на 0-м, а на 1-м месте будет 0-я нечетная. Может, слегка напутал, но мысль такова. Словом, деление на 2 относится не к words_per_lstr, а к номеру строки в целом.

Совсем запутался, если честно wacko.gif
То есть процедура ModifyAdr должна из адреса для уменьшенного виртуального экрана сделать адрес для нормального экрана, на котором якобы перепутаны строки? Или я что-то не так понимаю?

По-моему, сначала нужно разобраться с отображением на полном экране.

Цитата(metalkain @ Oct 23 2006, 19:42) *
Буду признателен, если подскажете, как проще.

Для целых чисел есть оператор %.
Go to the top of the page
 
+Quote Post
sff
сообщение Oct 23 2006, 20:04
Сообщение #23


Частый гость
**

Группа: Свой
Сообщений: 172
Регистрация: 23-04-06
Пользователь №: 16 404



Цитата(aaarrr @ Oct 19 2006, 16:18) *
Погуглите что-нибудь вроде "vesa 640x480 timings".

Можно и в исходниках Cirrus посмотреть (videosetup.cpp), там картина на все случаи жизни для CRT
Код
// Here is the video setup for standard CRT monitiors.  Remember that the
// horizontal sync must be at least 33Mhz and the refresh rate must be
// 60 Hz.
//
//                                                       VSync---------+
//                                                                     |
//  |                                                                  V |
//  |                                                                |< >|
//  |            |                                         |             |
//  |<  VBlank  >|<---------- Screen Height--------------->|<  VBlank   >|
//  |    Start   |                                         |     End     |
//  |                                                                    |
//  |<----------------------- VLines Total ----------------------------->|
//
//
//                                                                      
//  |                   |                                                |
//  |<--HBlank Start--->|                                                |
//  |                   |                                  |             |
//  |           |       |                                  |             |
//  |<  HSync  >|       |<---------- Screen Width--------->|<  HBlank   >|
//  |           |       |                                  |     End     |
//  |                                                                    |
//  |<----------------------- HClocks Total ---------------------------->|
//
//
//  VBlankStart = 6.04  % of Screen Height
//  VBlankEnd   = 3.54 % of Screen Height
//  VSync       = .41 % of Screen Height
//
//  HBlankEnd   = 4.00 % of Screen Width
//  HBlankStart = 40.1 % of Screen Width
//  HSyncStart  = 20 % of Screen Width


Цитата(aaarrr @ Oct 10 2006, 02:00) *
V- и H- тайминги исправьте, для 640x480 получается примерно такой расклад:
Код
...
VSyncStrtStop   = 0x02000202
...

Только зачем синхронизацию куда-то ближе к началу пихать? может подразумевалось просто VSyncStrtStop = 0x00000002 ?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 23 2006, 20:29
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(sff @ Oct 24 2006, 00:04) *
Можно и в исходниках Cirrus посмотреть (videosetup.cpp), там картина на все случаи жизни для CRT

Симпатично. Это из WinCE?

Цитата(sff @ Oct 24 2006, 00:04) *
Только зачем синхронизацию куда-то ближе к началу пихать? может подразумевалось просто VSyncStrtStop = 0x00000002 ?

Нет, подразумевалось именно то, что написано. Более того, оно в точности соответствует приведенной Вами картинке smile.gif
И какая разница, в начале кадра находится синхроимпульс, или в конце?
Go to the top of the page
 
+Quote Post
sff
сообщение Oct 23 2006, 20:54
Сообщение #25


Частый гость
**

Группа: Свой
Сообщений: 172
Регистрация: 23-04-06
Пользователь №: 16 404



Цитата(aaarrr @ Oct 24 2006, 00:29) *
Симпатично. Это из WinCE?

да
Цитата(aaarrr @ Oct 24 2006, 00:29) *
Нет, подразумевалось именно то, что написано. Более того, оно в точности соответствует приведенной Вами картинке smile.gif
И какая разница, в начале кадра находится синхроимпульс, или в конце?


Тут не совсем и начало smile.gif , если быть точным:
Код
VLinesTotal     = 0x0000020C
VSyncStrtStop   = 0x02000202


Для CRT точно никакой разницы, а вот для LCD будет сложнее расчитывать всё остальное, когда синхронизация не в начале и не в конце, но по большому счёту, конечно, без разницы smile.gif
PS: Я свой LCD уговорил работать как надо только с 5 итерации
Go to the top of the page
 
+Quote Post
metalkain
сообщение Oct 27 2006, 14:33
Сообщение #26


Участник
*

Группа: Новичок
Сообщений: 42
Регистрация: 14-09-06
Из: Москва
Пользователь №: 20 373



Судя по всему все придется делать по новой. Принесли ЖКИ (TD023SHEB1), ради которого это все в общем и затевалось. Надо замутить разрешение 240*320.
Код
      RasterSWLock=   0xAA;
    VSyncStrtStop=  0x01450147;     //-Vertical sync (2)
      RasterSWLock=   0xAA;
    VActiveStrtStop=0x00010141;     //Vertical front porch (2), Vertical data start (VS+VBP) (6)
      RasterSWLock=   0xAA;
    VBlankStrtStop= 0x00010141;     //-||-
      RasterSWLock=   0xAA;
    VClkStrtStop=   0x01470147;     //always clocks

      RasterSWLock=   0xAA;
    HSyncStrtStop=  0x01170121;   //10 clocks
      RasterSWLock=   0xAA;
    HActiveStrtStop=0x000900F9;   //Horizontal front porch (10), Horizontal data start (HS+HBP) (40)
      RasterSWLock=   0xAA;
    HBlankStrtStop= 0x000900F9;
      RasterSWLock=   0xAA;
    HClkStrtStop=   0x01210121;   //

      RasterSWLock=   0xAA;
    VLinesTotal=    0x147;          //Vertical Cycle (328d)
      RasterSWLock=   0xAA;
    HClkTotal=      0x121;          //Horizontal Cycle (290d)

Вопрос следующий. Почему на ЖКИ может не быть изображения, если на CRT оно есть?
В чем может быть принципиальная разница?
Параметры строго подобраны по мануалу.

Вот описалово к ЖКИ. Открывается, к сожалению, не у всех
Прикрепленные файлы
Прикрепленный файл  TD029SHEB1.rar ( 456.23 килобайт ) Кол-во скачиваний: 161
 


--------------------
Мне триста лет - я выполз из тьмы...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 27 2006, 15:06
Сообщение #27


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Навскидку: полярности HSYNC и VSYNC не перепутаны?
Что наблюдается на экране?

P.S. Описание не открылось - потом попробую на другой машине.
Go to the top of the page
 
+Quote Post
Gvozdidir
сообщение Oct 31 2006, 07:59
Сообщение #28


Участник
*

Группа: Участник
Сообщений: 70
Регистрация: 13-01-06
Пользователь №: 13 126



Чтобы прочитать pdf нужны китайские шрифты, если трафика не жалко можно скачать адоб предложит....
Вобщем выставили мы metalkain все тайминги и полярности как в мануале, по идее все должно работать, но... правда есть на стр.16 параграф Power On/Off Sequence, и в нем указано, что надо похитрому включать (Gate Off Voltage, -5.5~-4.5V, Typ. -5V) и (Gate On Voltage, 9.5V ~ 10.5V, Typ. 10V) выдерживать 0,1-10 мс между их включениями, надо это делать или можно обойти? мне просто придется тогда на коленке собирать хитрую схему включения, -5.5 я еще могу управлять, кину с порта EGPIO на DC-DC преобразовательесть функция вкл-выкл. преобразователем, а вот у 10В такой функции нет...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 31 2006, 09:26
Сообщение #29


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Gvozdidir @ Oct 31 2006, 10:59) *
Вобщем выставили мы metalkain все тайминги и полярности как в мануале, по идее все должно работать, но...

Не работает? Напишите все же, что наблюдается на экране (столбцы разноцветные, медленно тающая картинка, или что еще).

Цитата(Gvozdidir @ Oct 31 2006, 10:59) *
правда есть на стр.16 параграф Power On/Off Sequence, и в нем указано, что надо похитрому включать (Gate Off Voltage, -5.5~-4.5V, Typ. -5V) и (Gate On Voltage, 9.5V ~ 10.5V, Typ. 10V) выдерживать 0,1-10 мс между их включениями, надо это делать или можно обойти?

Неправильная последовательность подачи питания может отрицательно сказаться на сроке службы индикатора, но на работоспособность влиять не должна.

Цитата(Gvozdidir @ Oct 31 2006, 10:59) *
мне просто придется тогда на коленке собирать хитрую схему включения, -5.5 я еще могу управлять, кину с порта EGPIO на DC-DC преобразовательесть функция вкл-выкл. преобразователем, а вот у 10В такой функции нет...

Дык что там хитрого - два транзистора.
Go to the top of the page
 
+Quote Post
metalkain
сообщение Oct 31 2006, 13:21
Сообщение #30


Участник
*

Группа: Новичок
Сообщений: 42
Регистрация: 14-09-06
Из: Москва
Пользователь №: 20 373



Ситуацией обладаем следующей.
1. На CRT видим катринку с полным отсутствием синхронизации. Очевидно, из-за того, что тайминги стоят под LCD. Цвета выводятся желаемые.
2. На LCD не видно ничего, кроме подстветки. Никакой реакции на запуск программы не наблюдается.

HSync и VSync верных полярностей (низкого уровня), их соотношение по фазе не выходит за границы, описанные мануалом.

В описании к LCD довольно навязчиво написано:
Цитата
Power on sequence:
Input signal & VCOM_I DC Voltage & DVDD & AVDD -> RESET -> VVEE -> VGH


Вопросы:
1. Что такое Input signal? Если это информационные сигналы (RGB), то почему на временной диаграмме он (Input signal) нарисован одной линией, а не шиной (т.е. однозначно указана его полярность).
2. RESET во включенном состоянии (на диграмме) определен высоким уровнем. Мне казалось, RESET есть сигнал сброса, стало быть, во время работы должен быть неактивным. Нет ли здесь нарушения логики?
3. Какой физический смысл несут сигналы VVEE (-5V, Gate Off Voltage) и VGH (10V, Gate On Voltage) и почему рекомендуется вышеописанная их последовательность?

Заметим в скобках, что указаны как начальное время их активизации, так и конечное, что наводит на мысли об обязательности выполнения этой последовательности.

Привожу требования к таймингам (1m, 2m, 3m) и последовательности запуска (4m).

Сообщение отредактировал metalkain - Oct 31 2006, 13:26
Прикрепленные файлы
Прикрепленный файл  printscreen.rar ( 36.61 килобайт ) Кол-во скачиваний: 44
 


--------------------
Мне триста лет - я выполз из тьмы...
Go to the top of the page
 
+Quote Post

4 страниц V  < 1 2 3 4 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th June 2025 - 17:00
Рейтинг@Mail.ru


Страница сгенерированна за 0.01522 секунд с 7
ELECTRONIX ©2004-2016