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

 
 
 
Reply to this topicStart new topic
> трудности с PG320240WRF на S1D13700
LiloQQ
сообщение May 12 2010, 09:07
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 15-09-08
Пользователь №: 40 218



Доброго дня!

Топчусь на граблях, но в упор не вижу проблемы, прошу совета. Не получается оживить LCD(PG320240WRF). Выполнение практически любой команды после SCROLL приводит к появлению горизонтальных линий на всю длинну экрана. Косяк наверняка характерный, сомневаюсь в порядке и правильности инициализации.

Инициализацию провожу так:
Код
Reset, CS, RD, WR - устанавливаем в единицу
Ждем около 0,5 секунд

SYSTEM_SET
    1: 0х30            // установленны только IV, и 4-й, W/S=0
    2: 0x87            // FX=3,
    3: 0x07            // FY=8,
    4: 0x27            // C/R = 39
    5: 0x2F            // TC/R = 47
    6: 0xEF            // L/F = 239
    7: 0x28            // APL = 40
    8: 0x00

SCROLL
    1: 0х00            //SAD1 = 0x00;    
    2: 0x00            
    3: 0xEF            //SL1 = 239
    4: 0xB0            //SAD2 = 1200
    5: 0x04            
    6: 0xEF            //SL2 = 239
    7: 0x00            //SAD3 = 0x00 ?????????
    8: 0x00
    9: 0x00            //SAD4 ???????????
    10: 0x00    

OVLAY
    0x00            // simple overlay

CSRFORM
    1: 0х04            
    2: 0x86
DISPON
    0x16            // FC0 = 0
                // FC1 = 1
                // FP0 = 1
                // FP1 = 0
                // FP2 = 1
                // FP3 = 0
                // FP4 = 0
                // FP5 = 0


Далее пробую вывести символы с MWRITE по адресам начиная с 0x00 но ничего не получается
Go to the top of the page
 
+Quote Post
LiloQQ
сообщение May 13 2010, 11:49
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 15-09-08
Пользователь №: 40 218



Решилось. Про SCROLL в предыдущем посте загон. Решающую роль сыграло отсутствие задержки перед посылкой параметров команде SYSTEM_SET. Подсмотренно в исходниках на какой-то борд от atmel

Сообщение отредактировал LiloQQ - May 13 2010, 11:52
Go to the top of the page
 
+Quote Post
LiloQQ
сообщение May 14 2010, 06:25
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 15-09-08
Пользователь №: 40 218



Ещё одна неадекватность с этим экраном, моя или нет пока не понятно. Изначально закупили 2 шт, с текущим кодом признаки жизни подаёт только один экран. Но оба реагируют на "неправильную" команду SYSTEM_SET(без паузы перед передачей параметров), полосами по всей длине экрана.

На "живом" экране после записи в память какого-либо символа, он размножается по вертикали до конца видимой области. При заполнении первой строки заполняется весь экран. Документация на S1D13700 претендует на полноту, но ответов не даёт. Если у кого-нибудь есть положительный опыт работы с девайсом PG320240, или S1D13700 непосредственно, буду очень признателен за помощь.


Текущая условно-рабочая конфигурация такова:
Код
    dispSYSTEM_SET(0,// M0
            0,     // M1
            0,     // M2
            0,     // WS
            1,     // IV
            7,     // FX
            1,     // WF
            7,     // FY
            40,     // CR
            127,     // TCR
            240,      // LF
            50,     // APL
            0);     // APH
    
    //SCROLL    
    dispSCROLL(    0x0000,     // SAD1
            0xF0,    // SL1
            0x2000,     // SAD2
            0xF0,     // SL2
            0x0000,     // SAD3
            0x0000);    // SAD4
    
    //CSRDIR_RIGHT    
    cmdwrite(paramcmd, 0, CSRDIR_RIGHT);
    
    //CSR FROM
    paramcmd[0] = 0x04;        //CRX
    paramcmd[1] = 0x86;        //CX CRY
    cmdwrite(paramcmd, 2, CSRFORM);
    
    //HDOT SCR
    paramcmd[0] = 0x00;
    cmdwrite(paramcmd, 1, HDOT_SCR);
    
    //OVLAY
    paramcmd[0] = 0x00;
    cmdwrite(paramcmd, 1, OVLAY);
    
    SetMem(0x0000, '_', 1200);
    SetMem(0x2000, 0x00, 9600);
    
    displON(0x16);    

    //CSRW
    paramcmd[0] = 0x00;
    paramcmd[1] = 0x00;
    cmdwrite(paramcmd, 2, CSRW);
    
    //SetCursorPOsition(0, 0);
    //MWRITE
    paramcmd[0] = '*';
    paramcmd[1] = 'a';
    paramcmd[2] = 'b';
    paramcmd[3] = 'c';
    paramcmd[4] = 'd';
    paramcmd[5] = 'e';        
    cmdwrite(paramcmd, 6, MWRITE);


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

Сообщение отредактировал LiloQQ - May 14 2010, 06:26
Go to the top of the page
 
+Quote Post
MSprut
сообщение May 20 2010, 06:16
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 225
Регистрация: 25-04-06
Из: Украина, Луганск
Пользователь №: 16 476



Приведите пожалуйста исходный код служебных функций, в частности cmdwrite.
Go to the top of the page
 
+Quote Post
LiloQQ
сообщение May 20 2010, 07:02
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 15-09-08
Пользователь №: 40 218



Цитата(MSprut @ May 20 2010, 10:16) *
Приведите пожалуйста исходный код служебных функций, в частности cmdwrite.


Доброго дня! Вот такая картина:

Код
#define SetA0 set_bit(PORTG, PORTG2)
#define ClearA0 clear_bit(PORTG, PORTG2)

#define SetRD set_bit(PORTG, PORTG1)
#define ClearRD clear_bit(PORTG, PORTG1)

#define SetWR set_bit(PORTG, PORTG0)
#define ClearWR clear_bit(PORTG, PORTG0)

#define NotRESET set_bit(PORTG, PORTG3)
#define EnableRESET clear_bit(PORTG, PORTG3)

#define ComandA0 set_bit(PORTG, PORTG2)
#define DataA0 clear_bit(PORTG, PORTG2)

#define SetCS set_bit(PORTH, PORTH4)
#define ClearCS clear_bit(PORTH, PORTH4)

#define DELAY_WR_RD asm volatile ("nop\n\t" \
                 "nop\n\t" \
                "nop\n\t" \
                "nop\n\t" \
                "nop\n\t" \
                "nop\n\t" \
                "nop\n\t" \
                "nop\n\t" \
                "nop\n\t" \
                "nop\n\t" \
                ::);



void sendByte(tByte in)
{
    DispPort = in;
    
    ClearCS;
    DELAY1;
    
    ClearWR;    
    DELAY_WR_RD;
    SetWR;
    
    SetCS;
}

void sendCMD(tByte in)
{
    ComandA0;
    sendByte(in);
}

void paramwrite(tByte *p, tByte length)
{
    for(tByte i = 0; i < length; i++)
    {
        sendByte(p[i]);
        DELAY_WR_RD;
    }
}

void cmdwrite(tByte *p, tByte length, tByte cmd)
{
    sendCMD(cmd);
    DataA0;

    for(tInt j = 0; j < 500; j++)
    {
        DELAY_WR_RD;
    }

    paramwrite(p, length);
    DELAY_WR_RD;
}


Забыл отметить ещё одну особенность. Считывать озу контроллера получается, и в результате считывания области памяти в которую производилась запись получаются адекватные результаты. Т.е. к примеру пишем в память "hello" на экране вначале КАЖДОЙ строки символы "hello", а содержимое памяти соответствует действительности, т.е. "hello" записано только в первые 5 байт

Сообщение отредактировал LiloQQ - May 20 2010, 07:11
Go to the top of the page
 
+Quote Post
MSprut
сообщение May 20 2010, 10:39
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 225
Регистрация: 25-04-06
Из: Украина, Луганск
Пользователь №: 16 476



Не могу сложить картинку в голове, вы все время приводите куски кода в которых появляются новые функции smile.gif А вообще такое впечатление что при инициализации память распределена неправильно. Попробуйте инициализировать с такими параметрами:

Код
    lcd_wr_cmnd(SYSTEM_SET);
    delay_us(30);
    lcd_wr_data(0x30);
    lcd_wr_data(0x87);
    lcd_wr_data(0x07);
    lcd_wr_data((LCD_X_SIZE / 8) - 1);
    lcd_wr_data(92);
    lcd_wr_data(LCD_Y_SIZE - 1);
    lcd_wr_data(40);//LCD_X_SIZE / 8);
    lcd_wr_data(0x00);
    
    // Scroll
    lcd_wr_cmnd(SET_SCRL_BLOCK);
    lcd_wr_data(0x00);
    lcd_wr_data(0x00);
    lcd_wr_data(LCD_Y_SIZE);
    lcd_wr_data(0x60);
    lcd_wr_data(0x09);
    lcd_wr_data(LCD_Y_SIZE);
    lcd_wr_data(0x00);
    lcd_wr_data(0x00);
    lcd_wr_data(0x00);
    lcd_wr_data(0x00);


Собственно изменения только в адресе с 0x4b0 на 0x0960 и 47 на 92. Давно работал с похожим дисплеем, были похожие проблемы и все в основном с задержками и распределением памяти.
Go to the top of the page
 
+Quote Post
LiloQQ
сообщение May 20 2010, 11:15
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 15-09-08
Пользователь №: 40 218



Цитата(MSprut @ May 20 2010, 14:39) *
Не могу сложить картинку в голове, вы все время приводите куски кода в которых появляются новые функции smile.gif А вообще такое впечатление что при инициализации память распределена неправильно.

Накрученно, плохо читается, извините


Цитата(MSprut @ May 20 2010, 14:39) *
Попробуйте инициализировать с такими параметрами:
...
Собственно изменения только в адресе с 0x4b0 на 0x0960 и 47 на 92. Давно работал с похожим дисплеем, были похожие проблемы и все в основном с задержками и распределением памяти.

Пробывали с продавцами общаться, прислали тестовую программу, пробывали с их настройками - пока топчимся. На текущий момент они дисплей тестировали на своём стенде(говорят без проблем работает), завтра приедет и попробую зашиться с Вашим замечанеием. Благодарю!

Сообщение отредактировал LiloQQ - May 20 2010, 11:16
Go to the top of the page
 
+Quote Post
MSprut
сообщение May 20 2010, 11:28
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 225
Регистрация: 25-04-06
Из: Украина, Луганск
Пользователь №: 16 476



Забыл спросить... а режим отображения 1bpp или 2bpp используете?
Go to the top of the page
 
+Quote Post
LiloQQ
сообщение May 20 2010, 11:45
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 15-09-08
Пользователь №: 40 218



Цитата(MSprut @ May 20 2010, 15:28) *
Забыл спросить... а режим отображения 1bpp или 2bpp используете?

В текущем обкатываемом варианте GRAY_SCALE вызывать перестали, на картину никак не влияла, но опираясь на аппноуты epson наивно считаю что работаю с 1bpp по умолчанию.
Go to the top of the page
 
+Quote Post

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

 


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


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