Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: LCD WG128128
Форум разработчиков электроники ELECTRONIX.ru > Поставщики компонентов для электроники > Компоненты > Средства индикации
AndreyS
Добрый день.

Проблемма в следующем.

На экране после инициализации ничего не отображается, ни в графическом, ни в текстовом режиме.

Теперь описание системы.
MCU SiLabs F130 (сейчас тактовая системной шины 25МГц, проверял и на 100МГц)
ЖКИ WinStar WG128128
Стоит преобразователь уровней 74ALVC164245 для подключения ЖКИ.


ЖКИ поключен на шину данных через преобразователь уровня.
Два младших бита адреса A0 и A1 заведены соответственно (через преобразователь уровней) на RS и R/W экрана.
Разрешающий вход E экрана заведен через схему ИЛИ-НЕ с WR и RD управления внешней памятью. Так же этот строб зависит от состояния CS экрана (если CS в 0, то состояние E мняется, иначе состояние E = 0).
Вход RES управляется напрямую (т.е. с порта, не отображен в адресном пространстве).
CS вход управляется с дешифратора адреса через инвертор (выход дешифратора с адресов A21,A20,A19 равным трем 111. Т.е. 7 выход, если счет вести от 0) и далее на преобразователь уровней.
Направление выходов порта шины данных, преобразователя уровней, управляется от сигнала RD системной шины.
Состояние выходов преобразователя уровней управляется от сигнала CS.
18 нога ЖКИ не подключена (подтягивание ее к питанию положительного эфекта не дало).

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

Процесс инициализации происходит следующим образом

Код
    LCD_led=0;                // выключаем подсветку
    // сброс ЖКИ
    LCD_RESET=1;
    i=0;do{}while (--i);    // пауза
    LCD_RESET=0;
    i=0;do{}while (--i);    // пауза
    LCD_RESET=1;

    // устанавливаем режим работы
    // дисплей включен, мастер, символ мигает, курсор видим, внутренний знакогенератор
    // Текстовый режим
    write_byte(Mode_control,(byte)(DYSP_ON_OFF|M_Slave|(Blink)|(Cursor)&(~Mode)&(~Ext_CG)),0);
    // регистр высоты знаков
    // Vp=16, Hp=8
    write_byte(Char_pitch,(byte)((0x0F<<4)|0x07),0);

    // регистр количества знаков
    // N(128 Òî÷åê)/Hp = 16
    write_byte(Number_char,0x0F,0);

    // регистр скважности дисплея
    // Nx (1/Nx)
                //MAX_ROW=128
    write_byte(Time_div,MAX_ROW-1,0);

    // регистр установки позиции курсора в символе
    // Cp. Условие Cp<=Hp
    write_byte(Cursor_pos,0x0F,0);

    // регистр установки начальной  позиции отображения на дисплее
    write_byte(Start_adr_L,0x00,0);
    write_byte(Start_adr_H,0x00,0);

    // регистр установки начальной позиции (курсора на экране)
    write_byte(Set_cursor_l,0x00,0);
    write_byte(Set_cursor_h,0x00,0);

// Процедура записи данных dat р регистр reg
// при установленом бите cycle не производится проверка флага busy (нужно для потоковой записи)
// возвращает 1 в случае ошибки
bit write_byte(byte reg, dat, bit cycle)
{
    byte i;
    if (!cycle)
    {
        i=0xFF;
        do{ }while((--i) && (REG_RD&0x80));
        if (!i)
         return(1);        // ошибка выполнения команды(прошел таймаут)
    }
    REG_WR=reg;                // устанавливаем регистр
    DATA_WR=(byte)dat;            // записываем данные
    return (0);
}


Некоторые определения

Код
#define MAX_COL        128                // количество столбцов
#define MAX_ROW        128                // количество строк

byte far REG_WR        _at_ 0x3F0100;    // регистр записи
byte far REG_RD        _at_ 0x3F0300;    // регистр чтения
byte far DATA_WR    _at_ 0x3F0000;    // запись данных
byte far DATA_RD    _at_ 0x3F0200;    // чтение данных

sbit LCD_RESET = P1^4;                // управление сбросом
sbit LCD_led   = P1^5;                // управленеи подсветкой. 0-выкл

// регистры управления LCD
#define Mode_control                    0x00    // режим
#define Char_pitch        0x01    // высота знаков
#define Number_char        0x02    // количество точек в символе
#define Time_div        0x03    // скважность дисплея
#define Cursor_pos        0x04    // Cp - позиция курсора в символе. Условие Cp<=Hp
#define Start_adr_L        0x08    // Адрес ОЗУ с которого будет отображатся инфа
#define Start_adr_H        0x09    //
#define Set_cursor_l                    0x0A    // Установка курсора
#define Set_cursor_h                    0x0B    //
#define Write_data        0x0C    // запись данных на экран
#define Read_data        0x0D    // чтение данных с экрана
#define Clear_bit        0x0E    // очистить бит
#define Set_bit        0x0F    // установить бит


// Биты регистра Mode_control
#define DYSP_ON_OFF        0x20        // Управлени дисплеем вкл/выкл
#define M_Slave            0x10        // ведущий/ведомый
#define Blink            0x08        // мигание курсором
#define Cursor            0x04        // курсор
#define Mode            0x02        // режим работы (граф/текст)
#define Ext_CG            0x01        // внешний/внутренний CG


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

Причем вроде как в буфере экрана данные мои находятся. Так как я произвел (для проверки) сначала запись в цикле следующих байт 0x55 и 0xAA (запись производил с проверкой флага busy). А затем в другом цикле я их благополучно вычитал из дисплея. Но ни в текстовом режиме, ни в графическом значения этих байт (в текстовом соответствующие символы, в графическом точки) не отобразились на экране.

ПОМОГИТЕ. То ли дисплей не рабочий, то ли я совсем туплю.

Может есть кто в Санкт-Петербурге, хотелось бы проверить этот дисплей в рабочей системе (так сказать убедится, что дисплей точно жив).


С уважением, Андрей.
AndreyS
ДОБРЫЙ день всем.

УРА.

Разобрался. Оказывается для этого дисплея не подходит схема питания (контрастность) однополярная.
В документация что у меня была, картинка с питанием контрастности была сдвинута и не читалась вообще.

В общем скачал документацию с компела (первую качал с винстара) и там дока в нормальном виде.

Поставили резюк относительно встроенного инвертора и АЛИЛУЯ.

Извиняюсь за пост. Может уго удалить???

Просто я потратил два дня на наладку платы (и на топологии ошибки нашли) и по этому уже терпелка кончилась.

Спасибо, всем читавшим пост. wink.gif

Удачи.
AndreyS
Рано я обрадовался.

Все конечно выводит, в режимы переключается.
Вот только странно как то он все выводит.
Я по даташиту настроил duty циклы = 128-1 (по количеству строк).
Количество символов и соответственно количество точек в строке выставил (опять же по даташиту) =0x0F т.е. (128/8)-1

При выводе символов (да и графики тоже) происходит вывод 10 символов (или байт) непрерывно, а далее 11 и 12 символы выводятся в конце строки и затем оставшиеся со смещением на один пиксел вниз выводятся в позициях в след за 10 символом. Такой прыжок получается.

Вчем прикол я не врубился и на текущий момент отчаялся перебирать duty циклы и величину количества символов в строке. Результат получается разный, но только не тото что нужен. Нужна неперывное отображение всех 16 позиций при ширине символа в 8 пикселей.

Помогите с инициализацией!!!
AndreyS
Может я полохо описал проблему.

Прикладываю фотографию происходящего на дисплее.

Тут выведена строчка '12345678901234567890'

Дисплей в режиме ТЕКСТ.

Символы выведены последовательно безе переходов. А на дисплее они отображаются с прыжком.
Видно что за символом 0 идет символ 3 (при отладке на самом десплее произошел прыжек и символ 1 вывелся дальше. Затем 2 и потом курсор сместился на пиксел вниз и вывел за символом 0 символ 3).


Посоветуйте что-нибудь.




Может я полохо описал проблему.

Прикладываю фотографию происходящего на дисплее.

Тут выведена строчка '12345678901234567890'

Дисплей в режиме ТЕКСТ.

Символы выведены последовательно безе переходов. А на дисплее они отображаются с прыжком.
Видно что за символом 0 идет символ 3 (при отладке на самом десплее произошел прыжек и символ 1 вывелся дальше. Затем 2 и потом курсор сместился на пиксел вниз и вывел за символом 0 символ 3).


Посоветуйте что-нибудь.




Может я полохо описал проблему.

Прикладываю фотографию происходящего на дисплее.

Тут выведена строчка '12345678901234567890'

Дисплей в режиме ТЕКСТ.

Символы выведены последовательно безе переходов. А на дисплее они отображаются с прыжком.
Видно что за символом 0 идет символ 3 (при отладке на самом десплее произошел прыжек и символ 1 вывелся дальше. Затем 2 и потом курсор сместился на пиксел вниз и вывел за символом 0 символ 3).


Посоветуйте что-нибудь.
SlavaPVM
Приветствую. Я тоже использую данный индикатор и тоже напоролся на данную проблему, суть оказывается в том что необходимо правильно подобрать длину строки, на самом деле она получается длиньше чем требуется. Я подобрал методом тыка длину строки и все пошло!!!!!!
Kirill Frolov
Цитата(SlavaPVM @ Feb 22 2008, 14:57) *
Приветствую. Я тоже использую данный индикатор и тоже напоролся на данную проблему, суть оказывается в том что необходимо правильно подобрать длину строки, на самом деле она получается длиньше чем требуется. Я подобрал методом тыка длину строки и все пошло!!!!!!


Это исправление собственных ошибок методом тыка.

Я использую аналогичный дисплей. Всё по даташиту на контроллер делал, всё работает корректно. Никаких претензий к контроллеру кроме известной проблемы (дикая тормознутость или пропадание изображения в момент его вывода) -- НЕТ. Приводить исходник смысла нет. Там инициализация тривиально делается, разве что даташит может слегка мутный... Основное:
Код
        sed_command(SED_DISP_OFF);
        sed_write(0);

        uint8_t sed_init[8] = {
                BIN(00110010),          /* IV, 1, W/S, M2:0, M1:1 M0:0 */
                (0<<7) | SED_FX,        /* W/F, FX */
                SED_FY,                 /* FY */
                SED_CR,                 /* C/R (8-bits cells per row) */
                SED_CR+10,              /* TC/R (>= C/R + 4)*/
                SED_LF,                 /* L/F */
                SED_AP&0xff, SED_AP>>8 /* AP (address pitch) */
        };
        sed_command(SED_SYSTEM_SET);
        sed_write_data(sed_init, 8);

        sed_command(SED_HDOT_SCR);
        sed_write(0);

/* всё. вот тут он готов к работе, осталось установить форму и направление
* курсора и загрузить шрифт */
AndreyS
Цитата(SlavaPVM @ Feb 22 2008, 14:57) *
Приветствую. Я тоже использую данный индикатор и тоже напоролся на данную проблему, суть оказывается в том что необходимо правильно подобрать длину строки, на самом деле она получается длиньше чем требуется. Я подобрал методом тыка длину строки и все пошло!!!!!!



Мне пришлось сделать тоже самое. Но на мой взгляд это какое-то кривое решение (костыль что ли). Потому как в графике вправо улетела часть точек (в нивидимую зону). Пришлось городить учет этих столбцов в видимой зоне.


Ну хоть не я один с этим гемором живу. И то радует.

Удачи.

Цитата(Kirill Frolov @ Feb 22 2008, 17:45) *
Это исправление собственных ошибок методом тыка.

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


Добрый день.

Вы уверены что мы говорим об одном и том же дисплее и его контроллере??? Что-то ваша инициализация не похожа на даташит к LC7981 (именно этот контроллер находится в WG128128 или DV12128). Или я не понял вашу мнемонику.

Удачи.
starpom
Цитата(AndreyS @ Mar 3 2008, 01:15) *
Вы уверены что мы говорим об одном и том же дисплее и его контроллере??? Что-то ваша инициализация не похожа на даташит к LC7981 (именно этот контроллер находится в WG128128 или DV12128). Или я не понял вашу мнемонику.


Нажмите для просмотра прикрепленного файла

Нажмите для просмотра прикрепленного файла

у меня такая же проблема. есть в наличии несколько приборов что на фотках и хочется их использовать. в инете есть доков и все разныею если есть у кого дока на этот прибор поделитесь плиз.
AndreyS
Цитата(starpom @ Mar 22 2008, 14:46) *
Нажмите для просмотра прикрепленного файла

Нажмите для просмотра прикрепленного файла

у меня такая же проблема. есть в наличии несколько приборов что на фотках и хочется их использовать. в инете есть доков и все разныею если есть у кого дока на этот прибор поделитесь плиз.



Глядя на ваши фотографии я вышел на Китайского производителя Bona LCD экранов. Маркировка MG128128.

Это распиновка экрана

Дока на контролер, находящийся на этом экране


Пробуйте.

Правда это уже не в эту ветку. Так как тут и экран другой (производитель) и контроллер не LC7981


Удачи
starpom
Цитата(AndreyS @ Mar 23 2008, 23:05) *
Глядя на ваши фотографии я вышел на Китайского производителя Bona LCD экранов. Маркировка MG128128.

Это распиновка экрана

Дока на контролер, находящийся на этом экране
Пробуйте.

Правда это уже не в эту ветку. Так как тут и экран другой (производитель) и контроллер не LC7981
Удачи


распиновка не совпадает так как у моего 20 контактов а у того что вы указали 22 так что вопрос пока остается открытым
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.