Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: EP9307, настройка видеоадаптера
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
metalkain
Здравствуйте!

Не могу достичь вывода информации на монитор.
Измеряю сигналы на контактах с помощью осциллографа - все статичны (на мой взгляд, никакой информации на монитор не поступает).
Настраиваю следующие регистры всевозможными образами, но эффекта никакого:
VidClkDiv
VLinesTotal
VSynStrtStop
VActiveStrtStop
VBlankStrtStop
VClkStrtStop
HClkTotal
HSynStrtStop
HActiveStrtStop
HBlankStrtStop
HClkStrtStop
VideoAttribs
VidScrnPage
ScrnLines
LineLenght
VLineStep
PixelMode
Нужно ли настраивать регистры ClkSet1 и ClkSet2 для получения хоть каких-нибудь сигналов на разъеме?
Наверняка упустил какую-то тривиальную, но важную вещь...
aaarrr
Цитата(metalkain @ Sep 14 2006, 11:36) *
Нужно ли настраивать регистры ClkSet1 и ClkSet2 для получения хоть каких-нибудь сигналов на разъеме?

Если в качестве источника клока используется PLL1 или PLL2, очевидно, да.

Цитата(metalkain @ Sep 14 2006, 11:36) *
Не могу достичь вывода информации на монитор.

Проверьте, есть ли запись SysSWLock и RasterSWLock там, где это необходимо; сброшены ли биты RAS и EXVC в DeviceCfg.

Наверное, стоит опубликовать код инициализации.
metalkain
Благодарю, aaarrr. Именно в SysSWLock и RasterSWLock, похоже, и было дело, хоть и допер до этого независимо. Верно, телепатияsmile.gif
metalkain
Похоже, погорячился, сказав, что разобрался, в чем дело(
Задача прежняя: вывести хоть что-нибудь на монитор.
Какие системы необходимо настроить?
Надо ли настраивать SDRAM?

ClkSet1= 0x00039A67; //0000 0000 0000 0011 10011 010011 00111

for(int i=0;i<0xFFFF;i++){ asm("nop;");}
printf("Hello, Man!\n\n");

SysSWLock= 0xAA;
VidClkDiv= 0x0000C102; //0000 0000 0000 0000 1100 0001 0000 0010

//Setting up SDRAM
SDRAMDevCfg0= 0x01220008; //00000001 0010 0010 00000000 0000 10 00

for(int i=0;i<0xFFFF;i++){ asm("nop;");}//waiting for 200mks
GIConfig= 0x00000001; //00 00000000000000 00000000 000 000 01
RefrshTimr= 0x00000190; //400d - 16ms with 92,16MHz clock
GIConfig= 0x00000000; //00 00000000000000 00000000 000 000 00

/*640*480 4bpp video mode*/
RasterSWLock= 0xAA;
VideoAttribs= 0x0000C0AF; //0000 0000 0 00 0 0000 1100 0 000 1000 1111

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

RasterSWLock= 0xAA;
VSyncStrtStop= 0x01DF01DC;
RasterSWLock= 0xAA;
VActiveStrtStop=0x01DA0006;
RasterSWLock= 0xAA;
VBlankStrtStop= 0x01DA0006;
RasterSWLock= 0xAA;
VClkStrtStop= 0x01D5000B;

RasterSWLock= 0xAA;
HSyncStrtStop= 0x02930290;
RasterSWLock= 0xAA;
HActiveStrtStop=0x029E0006;
RasterSWLock= 0xAA;
HBlankStrtStop= 0x029E0006;
RasterSWLock= 0xAA;
HClkStrtStop= 0x0299000B;

RasterSWLock= 0xAA;
VLinesTotal= 479;
RasterSWLock= 0xAA;
HClkTotal= 659;

Pixelmode= 0x1;
aaarrr
Цитата(metalkain @ Sep 21 2006, 18:47) *
Похоже, погорячился, сказав, что разобрался, в чем дело(
Задача прежняя: вывести хоть что-нибудь на монитор.
Какие системы необходимо настроить?
Надо ли настраивать SDRAM?

SDRAM настраивать нужно. У Вас это делается не совсем корректно, но работать должно.
Также после записи ClkSet1 нужно добавить 5 nop'ов.

Регистр VLineStep должен иметь значение 0x50, а не 0x4F.

Для вывода в режиме 4 бита на точку должна быть загружена палитра в LUT.

Что сейчас происходит с сигналами синхронизации?
metalkain
Цитата
Для вывода в режиме 4 бита на точку должна быть загружена палитра в LUT.

Как это сделать?
1. Подозреваю, нужно в PixelMode установить бит C3 (Grayscale Palettes Enabled). Так ли это?
2. Нужно ли настраивать ColorLUT и GrySclLUTx регистры?
aaarrr
Цитата(metalkain @ Sep 25 2006, 11:57) *
Цитата

Для вывода в режиме 4 бита на точку должна быть загружена палитра в LUT.

Как это сделать?
1. Подозреваю, нужно в PixelMode установить бит C3 (Grayscale Palettes Enabled). Так ли это?
2. Нужно ли настраивать ColorLUT и GrySclLUTx регистры?

1. Нет. У Вас ведь TFT экран?
2. ColorLUT настраивать нужно.
metalkain
Цитата
1. Нет. У Вас ведь TFT экран?
2. ColorLUT настраивать нужно.

Благодарю, aaarrr. Но появляются новые вопросы
1. В том-то и дело, что CRT (Philips 105B). Потом вероятен переход на портативное индикаторное устройство, но на данный момент необходимо добиться результата на этом мониторе.
2. Как я понял, имеется по одному регистру GrySclLUTx для каждого цвета, которые названы в User's Guide'е "Grayscale Look-Up-Tables". Вопрос такой: как заполнять эти таблицы, если регистров всего лишь 3 (хотя написано, что их по 32 каждого)? Надо ли это делать вручную? Они (эти таблицы) уже существуют, или их надо создавать, основываясь на характеристиках монитора?
3. На чем основывается выбор между FRAME_CNT3 и FRAME_CNT4 и тд?
4. Зачем вообще нужен регистр (регистры? - я теперь совсем запутался: их тоже вроде 256) ColorLUT?
metalkain
Загрузил LUTы. После этого обнаружил на выводах сигналы HSync (~310KHz), VSync (~74Hz). Монитор даже отреагировал на это, вспыхнув светодиодом другого цвета. Теперь недоумеваю, почему не видно информационных сигналов. Может это быть связано с установкой регистров развертки, регистра Brightness, неверной записью информации в память?
aaarrr
Цитата(metalkain @ Sep 25 2006, 20:03) *
1. В том-то и дело, что CRT (Philips 105B).

CRT с точки зрения контроллера - почти то же самое, что и TFT LCD.

Цитата(metalkain @ Sep 25 2006, 20:03) *
2. Как я понял, имеется по одному регистру GrySclLUTx для каждого цвета, которые названы в User's Guide'е "Grayscale Look-Up-Tables". Вопрос такой: как заполнять эти таблицы, если регистров всего лишь 3 (хотя написано, что их по 32 каждого)? Надо ли это делать вручную? Они (эти таблицы) уже существуют, или их надо создавать, основываясь на характеристиках монитора?

3. На чем основывается выбор между FRAME_CNT3 и FRAME_CNT4 и тд?

Grayscale LUTs нужны для STN и CSTN экранов, для формирования полутонов при помощи FRC (своеобразный ШИМ). У Вас, как я понимаю, на выходе стоит нормальный ЦАП.

Цитата(metalkain @ Sep 25 2006, 20:03) *
4. Зачем вообще нужен регистр (регистры? - я теперь совсем запутался: их тоже вроде 256) ColorLUT?

Для формирования на выходе 15-, 16- или 24-бит цвета из данных размерностью 8 и менее бит.

Цитата(metalkain @ Sep 28 2006, 19:14) *
Загрузил LUTы. После этого обнаружил на выводах сигналы HSync (~310KHz), VSync (~74Hz). Монитор даже отреагировал на это, вспыхнув светодиодом другого цвета. Теперь недоумеваю, почему не видно информационных сигналов. Может это быть связано с установкой регистров развертки, регистра Brightness, неверной записью информации в память?

Очень странно. Никакой взаимосвязи между LUT и синхронизацией нет. Разве что монитор начал синхронизироваться по каналу зеленого.

HSync 310KHz - это далеко за рабочими пределами монитора. Опечатка?

Регистр Brightness управляет ШИМ'ом на соответствующем пине для регулировки яркости подсветки.



Настоятельно рекомендую внимательно почитать мануал на процессор и AN269 Using the EP93xx's Raster Engine.
metalkain
Вы правы, aaarrr, связи между синхронизацией и LUTами не оказалось. Я ошибся.
Частоты подправил. Теперь 77Hz, 37KHz.
Информационных сигналов нет по-прежнему.
Допустимо ли определение:
unsigned long VideoPage[38400];
VidScrnPage=(unsigned long)&VideoPage[0];?
Если предположить, что SDRAM настроена верно, как можно объяснить отсутствие сигналов RGB?
aaarrr
Цитата(metalkain @ Sep 29 2006, 19:23) *
Допустимо ли определение:
unsigned long VideoPage[38400];
VidScrnPage=(unsigned long)&VideoPage[0];?

Допустимо. У меня еще маскировались старшие 4 бита, но
не уверен, что это необходимо.

Цитата(metalkain @ Sep 29 2006, 19:23) *
Если предположить, что SDRAM настроена верно, как можно объяснить отсутствие сигналов RGB?

Вы не забыли после загрузки переключить SWTCH в LUTSwCtrl?
metalkain
Получил изображение. Но на экран выводится лишь 231 строка (при желаемых 480-ти). Как настроить V-регистры?
aaarrr
Цитата(metalkain @ Oct 6 2006, 19:21) *
Получил изображение. Но на экран выводится лишь 231 строка (при желаемых 480-ти). Как настроить V-регистры?


Выводится или наблюдается на экране? Откуда такая точность - 231?
metalkain
Цитата(aaarrr @ Oct 6 2006, 20:30) *
Выводится или наблюдается на экране? Откуда такая точность - 231?

На данный момент имею следующую картину.
1. Начало видеостраницы находится в левом верхнем углу.
2. В строке 80 слов (т.е. если выводить слова с номерами, кратными 80-ти, получается ровный вертикальный столбец), из которых отображаются 70 слов целиком и начало 70-го слова (считая с нуля).
3. На экране нормально отображается теперь 241 строка. Строки с 241-й по 350-ю не видны. Строки с номерами от 351-й и далее отображаются начиная с верха экрана со смещением 12 слов влево от нормального расположения.

При коде
VideoPage[0]= 0x66666666;
for(int i=0;i<480;i++)
VideoPage[i*80+20]= 0x77777777;
получаю примерно следующее изображение:

1....3..........2................................
......3..........2................................
......3..........2................................
......3..........2................................
..................2................................
..................2................................
..................2................................

где 1 - первое слово видеостраницы, 2 - слова [20; 240*80+20], 3 - слова [351*80+20; 480*80+20].
aaarrr
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.
metalkain
aaarrr, большое спастбо за ценные советы.
Судя по всему задачу выполнил.
Выяснился не очень ожидаемый факт. Информация выводится на экран не непрерывно, а сначала нечетные строки, затем, с некоторым (причем, нелогичным) смещением в памяти, четные.
Проблема неотображения концовок строк вроде как стала не актуальной, так как необходимо использовать не весь экран.
aaarrr
Цитата(metalkain @ Oct 17 2006, 16:59) *
Выяснился не очень ожидаемый факт. Информация выводится на экран не непрерывно, а сначала нечетные строки, затем, с некоторым (причем, нелогичным) смещением в памяти, четные.

blink.gif Однако. Пока даже не могу придумать, как такое вообще может получиться.
Какие у Вас сейчас значения регистров, и каким образом проверяется четность строк?
metalkain
Код
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.
aaarrr
По поводу таймингов и отображения концов строк:
- Обратный ход по строкам занимает обычно 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 для целых чисел?

ИМХО, лучше так не делать.
metalkain
Цитата
Почему "words_per_lstr/2", а не просто "words_per_lstr"?

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

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

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

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

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

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

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

Для целых чисел есть оператор %.
sff
Цитата(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 ?
aaarrr
Цитата(sff @ Oct 24 2006, 00:04) *
Можно и в исходниках Cirrus посмотреть (videosetup.cpp), там картина на все случаи жизни для CRT

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

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

Нет, подразумевалось именно то, что написано. Более того, оно в точности соответствует приведенной Вами картинке smile.gif
И какая разница, в начале кадра находится синхроимпульс, или в конце?
sff
Цитата(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 итерации
metalkain
Судя по всему все придется делать по новой. Принесли ЖКИ (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 оно есть?
В чем может быть принципиальная разница?
Параметры строго подобраны по мануалу.

Вот описалово к ЖКИ. Открывается, к сожалению, не у всех
aaarrr
Навскидку: полярности HSYNC и VSYNC не перепутаны?
Что наблюдается на экране?

P.S. Описание не открылось - потом попробую на другой машине.
Gvozdidir
Чтобы прочитать 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В такой функции нет...
aaarrr
Цитата(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В такой функции нет...

Дык что там хитрого - два транзистора.
metalkain
Ситуацией обладаем следующей.
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).
aaarrr
Цитата(metalkain @ Oct 31 2006, 16:21) *
1. Что такое Input signal? Если это информационные сигналы (RGB), то почему на временной диаграмме он (Input signal) нарисован одной линией, а не шиной (т.е. однозначно указана его полярность).

По-моему это информационные сигналы, и они упомянуты только ради Note 3.

Цитата(metalkain @ Oct 31 2006, 16:21) *
2. RESET во включенном состоянии (на диграмме) определен высоким уровнем. Мне казалось, RESET есть сигнал сброса, стало быть, во время работы должен быть неактивным. Нет ли здесь нарушения логики?

На стр. 16 написано "Display start at the 10th falling edge of VSYNC after RESET rising" - то есть сигнал RESET инверсный, и при нормальной работе должен быть установлен в "1".

Цитата(metalkain @ Oct 31 2006, 16:21) *
3. Какой физический смысл несут сигналы VVEE (-5V, Gate Off Voltage) и VGH (10V, Gate On Voltage) и почему рекомендуется вышеописанная их последовательность?

Это сигналы питания драйверов LCD. Если их подать слишком рано (до запуска внутренних генераторов индикатора), то можно испортить экран постоянкой.
metalkain
Благодарю, aaarrr smile.gif
sff
2 metalkain . А у вас на DE дисплея идёт BLANK c чипа?

После прочтения этой доки остались непонятни зачем там I2C, и что-то про него там ни слова. glare.gif
metalkain
Цитата(sff @ Nov 1 2006, 10:31) *
2 metalkain . А у вас на DE дисплея идёт BLANK c чипа?

После прочтения этой доки остались непонятни зачем там I2C, и что-то про него там ни слова. glare.gif

BLANK с чипа.
Прошу прощения, I2C не заметил. Если укажете, на какой странице, буду признателен.

Все дело было в RESET'е. Этот сигнал необходимо держать во время работы в единице.
Возник другой казус.
Вывожу слово (8 пикселей). Выводится нормально, но по непонятному закону подрагивает (перемещается на соседнее по строке место и обратно).
Вопрос: дело в синхронизации или же это помеха?
aaarrr
Цитата(metalkain @ Nov 1 2006, 15:47) *
Вывожу слово (8 пикселей). Выводится нормально, но по непонятному закону подрагивает (перемещается на соседнее по строке место и обратно).
Вопрос: дело в синхронизации или же это помеха?

Больше похоже на неправильную полярность клоков.
metalkain
Цитата(aaarrr @ Nov 1 2006, 17:32) *
Больше похоже на неправильную полярность клоков.

Нет, пробовал менять бит INVCLK в VideoAttribs - никакого эффекта, все как было.
Но вот в этом регистре есть бит BKPXD.
Код
BKPXD:
Blank Pixel Data. This bit allows an active low BLANK output to zero the pixel data. This allows the use of an inexpensive external DAC without data blanking gate logic.

На мой взгляд, этот бит позволяет выдать сигнал BLANK в случае нулевой информации.
Так вот, установив этот бит, я достиг исчезновения наползания первого слова в строке на нулевое (которое вообще-то отображаться не должно). Хотя прежнее мерцание всех остальных символов осталось.
aaarrr
Цитата(metalkain @ Nov 1 2006, 18:46) *
На мой взгляд, этот бит позволяет выдать сигнал BLANK в случае нулевой информации.
Так вот, установив этот бит, я достиг исчезновения наползания первого слова в строке на нулевое (которое вообще-то отображаться не должно). Хотя прежнее мерцание всех остальных символов осталось.

Нет, наоборот - этот бит позволяет выполнить гашение подачей нулевой информации во время BLANK.
Частичное устранение дрожания при установке этого бита может косвенно указывать на наличие помех.
Как подключен экран? Надеюсь, не пучком проводов?
sff
Цитата(metalkain @ Nov 1 2006, 15:47) *
Прошу прощения, I2C не заметил. Если укажете, на какой странице, буду признателен.

Страница 11, на схеме пины 48,49,50

Цитата(metalkain @ Nov 1 2006, 15:47) *
Вывожу слово (8 пикселей). Выводится нормально, но по непонятному закону подрагивает (перемещается на соседнее по строке место и обратно).
Вопрос: дело в синхронизации или же это помеха?

У меня с sharp ом ещё более радужная картина была, от неправильной синхронизации его по непонятно закону синий бросало в фиолетовые тона..

А вот с BLANK у меня была такая трабла:
LCD мог работать в 2 режимах с импользованием BLANK или без (начиная считать пиксели с 88 Clock'а после HSYNC, при этом DE на земле постоянно). Без BLANK всё ок. Так вот с BLANK у меня всё съезжает на один пиксель вбок почему-то.. но не в этом дело посмотрел на временную диаграмму к LCD так нарастание DE должно быть по нарастанию clock, а спад DE по спаду clock. А по ощущениям BLANK выдается в соответствии с общей полярностю CLOCK'а.

Насколько такая гипотеза бредова? (осциллограф у меня такие мегагерцы не берёт так что посмотреть не смог)
aaarrr
Цитата(sff @ Nov 1 2006, 19:41) *
...посмотрел на временную диаграмму к LCD так нарастание DE должно быть по нарастанию clock, а спад DE по спаду clock.

По-моему, ерунда: все тайминги должны быть привязаны к одному определенному фронту pixel clock. Может быть, картинка криво нарисована?
Gvozdidir
Экран подключен не пучком проводов, но плоским кабелем(от CD-rom) от отладочной платы до платы переходника. Врятли это помеха, ведь сигнал скачет, только по горизонтали, по вертикали четкая картина!
aaarrr
По вертикали ему скакать затруднительно: для этого нужно полностью HSYNC потерять, а для горизонтального дрожания достаточно и одного клока.

Цитата
Вывожу слово (8 пикселей). Выводится нормально, но по непонятному закону подрагивает (перемещается на соседнее по строке место и обратно).


Так оно на 8 пикселей смещается, или только на один?
metalkain
Цитата(aaarrr @ Nov 2 2006, 02:17) *
Так оно на 8 пикселей смещается, или только на один?
Да, ровно на одно слово (8 пикселей).
Изменение частоты клоков, положения и длины HSync никак ситуации не меняют
metalkain
Цитата(metalkain @ Nov 1 2006, 18:46) *
Так вот, установив бит BKPXD, я достиг исчезновения наползания первого слова в строке на нулевое (которое вообще-то отображаться не должно). Хотя прежнее мерцание всех остальных символов осталось.

Наврал я. Всмотрелся - нет никакой разницы
aaarrr
Цитата(metalkain @ Nov 2 2006, 19:25) *
Изменение частоты клоков, положения и длины HSync никак ситуации не меняют

А если попробовать все оставить как есть, только:
Код
    HActiveStrtStop=0x000900F9;   //Horizontal front porch (10), Horizontal data start (HS+HBP) (40)
    HBlankStrtStop= 0x000900F9;

заменить на:
Код
    HActiveStrtStop=0x000800F8;   //Horizontal front porch (10), Horizontal data start (HS+HBP) (40)
    HBlankStrtStop= 0x000800F8;
metalkain
Цитата(aaarrr @ Nov 3 2006, 01:27) *
Цитата(metalkain @ Nov 2 2006, 19:25) *

Изменение частоты клоков, положения и длины HSync никак ситуации не меняют

А если попробовать все оставить как есть, только:
Код
    HActiveStrtStop=0x000900F9;   //Horizontal front porch (10), Horizontal data start (HS+HBP) (40)
    HBlankStrtStop= 0x000900F9;

заменить на:
Код
    HActiveStrtStop=0x000800F8;   //Horizontal front porch (10), Horizontal data start (HS+HBP) (40)
    HBlankStrtStop= 0x000800F8;


Ну это мы пробовали. С помощью подобных изменений можно достичь необходимого положения изображения относительно границ экрана. Не более того.
aaarrr
Цитата(metalkain @ Nov 3 2006, 17:56) *
Ну это мы пробовали.

Пробовали именно это, или что-то подобное?

Цитата(metalkain @ Nov 3 2006, 17:56) *
С помощью подобных изменений можно достичь необходимого положения изображения относительно границ экрана. Не более того.

Как раз на положении изображения оно сказаться не должно никак.
metalkain
Цитата(aaarrr @ Nov 3 2006, 18:10) *
Цитата(metalkain @ Nov 3 2006, 17:56) *

Ну это мы пробовали.

Пробовали именно это, или что-то подобное?

Цитата(metalkain @ Nov 3 2006, 17:56) *
С помощью подобных изменений можно достичь необходимого положения изображения относительно границ экрана. Не более того.

Как раз на положении изображения оно сказаться не должно никак.
Пробовал в цикле прогонять все значения этих регистров при неизменном интервале между значениями strt и stop.
Уменьшении значений полей strt и stop, к примеру, на 1 приводит к смещению изображения вправо на один пиксель.


В версии неверной синхронизации меня смущает тот факт, что изображение моргает именно через слово, а не через 1-2 пикселя, например.
Может, здесь каким-то боком виноват контроллер прямого доступа к памяти? Может, выдача информации как-то несвоевременно производится?
metalkain
Да, и еще.
Если в программе написать бесконечный цикл типа for(;;) или while(1);, то мерцание прекращается. Но стоит в цикл включить какое либо условие - все становится по-прежнему.
aaarrr
Угу. А как выставлены приоритеты доступа к памяти (что записано в BusMstrArb)? И на какой частоте работает SDRAM?
metalkain
Цитата(aaarrr @ Nov 3 2006, 20:10) *
Угу. А как выставлены приоритеты доступа к памяти (что записано в BusMstrArb)? И на какой частоте работает SDRAM?
aaarrr, огромное спасибо! Дело было в BusMstrArb. Установил приоритет 1 (был 0).
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.