Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить

Re: Дисплеи от мобильных телефонов- осцилограммы работы

Вс окт 31, 2010 20:13:28

Дисп сложный не спорю, но зачастую и такой весьма сложно найти. Грех не пользоваться тем, что есть :) я кстати свой дисп запустил, целый день правда убил на него. Уж больно умудренная инициализация и передача картинки.
Вот результат ;)
Изображение
Вложения
DSC00115.jpg
(51.72 KiB) Скачиваний: 11208

Re: Дисплеи от мобильных телефонов- осцилограммы работы

Вс окт 31, 2010 20:32:30

есть информация по дисплею от cx75?

Изображение

Re: Дисплеи от мобильных телефонов- осцилограммы работы

Вс окт 31, 2010 21:04:30

neonix, Молодца! не сомневался что запустишь, инициализацию не кинешь?

Dalt, инфы нет (на гранях дисплея ничего не написано?)
судя по контактам... интерфейс паралельный 8битный...
20 ног, из них 2 ноги под подсветку, 2 ноги под питание, Reset, cs еще 2 ноги 8ног данные, 1 нога Команды Данные ну т.д.
итого уже 15 ног ну и плюсом всякие там VSYNC HSYNC

Первое что сделай это узнай его распиновку, чтобы узнать - Гугль в помощь и в поиске Схема для Siemens CX75

Недолго искав:
Изображение

Посмотрев на твой рисунок, видно что счет ног идет справа налево, ну как сфотографирован ЗАД :) так и считаем
Вложения
CX75.jpg
Схема подключения
(79.83 KiB) Скачиваний: 14154
Последний раз редактировалось plutonium Вс окт 31, 2010 21:13:11, всего редактировалось 1 раз.

Re: Дисплеи от мобильных телефонов- осцилограммы работы

Вс окт 31, 2010 21:11:00

Вот инициализация:
Запустить удалось только после орудования с логическим анализатором. В даташите нифиа нету, сам дисплей весьма сложный.


Код:
void LCDDEV_Reg_Set(unsigned int cmd,unsigned int data)
{

    lcd_Command(cmd);


    lcd_data16(data);
}


Код:

void lcd_init   (void)
{  LCD_LO(LCD_CS);
    _delay_ms(5);

    LCDDEV_Reg_Set(0x28, 0x0006);
    _delay_ms(5);
    LCDDEV_Reg_Set(0x10, 0x1F92);
    LCDDEV_Reg_Set(0x00, 0x0001);
    _delay_ms(10);
    LCDDEV_Reg_Set(0x02, 0x0380);
    //LCDDEV_Reg_Set(0x11, 0x0014);

    LCDDEV_Reg_Set(0x11, 0x0014);
    LCDDEV_Reg_Set(0x12, 0x0509);
    LCDDEV_Reg_Set(0x13, 0x2B00);

    LCDDEV_Reg_Set(0x03, 0x6830);
    LCDDEV_Reg_Set(0x07, 0x0233);
    LCDDEV_Reg_Set(0x28, 0x0006);
    LCDDEV_Reg_Set(0x01, 0x31AF);

    LCDDEV_Reg_Set(0x04, 0x0000);
    LCDDEV_Reg_Set(0x05, 0x0000);

    LCDDEV_Reg_Set(0x16, 0x8300);
    LCDDEV_Reg_Set(0x17, 0x0109);

    LCDDEV_Reg_Set(0x44, 0x8300);
    LCDDEV_Reg_Set(0x45, 0xAF00);


    LCDDEV_Reg_Set(0x30, 0x0000);
    LCDDEV_Reg_Set(0x31, 0x0000);
    LCDDEV_Reg_Set(0x32, 0x0000);
    LCDDEV_Reg_Set(0x33, 0x0000);
    LCDDEV_Reg_Set(0x34, 0x0000);
    LCDDEV_Reg_Set(0x35, 0x0000);
    LCDDEV_Reg_Set(0x36, 0x0000);
    LCDDEV_Reg_Set(0x37, 0x0000);

    LCDDEV_Reg_Set(0x3A, 0x0000);
    LCDDEV_Reg_Set(0x3B, 0x0000);
    LCDDEV_Reg_Set(0x2C, 0x3000);

    LCDDEV_Reg_Set(0x21, 0x0000);
    lcd_Command(0x22);
    for(y=0; y<132; y++){
      for(x=0; x<176; x++){
                lcd_data16(0x0000);

      }
   }
   


Dalt Дисплей на фото имеет контроллер SSD1286, и паралельную шину 8 бит.

Re: Дисплеи от мобильных телефонов- осцилограммы работы

Чт ноя 04, 2010 16:52:38

Dalt Дисплей на фото имеет контроллер SSD1286, и паралельную шину 8 бит.

А зовется он случайно не LPH8924-1 ?

Re: Дисплеи от мобильных телефонов- осцилограммы работы

Вс ноя 14, 2010 23:56:23

Доброго времени суток!!
Судя по форуму разобрались с дисплеем LPH8731-3C. Я мучаюсь всю неделю и ничего не получается, инит не проходит. Подскажите пожалуйста минимальный набор команд для инициализации LCD Siemens A70 (LPH8731-3C)!! Не могу понять линия RS что означает, если в мануалах написано что самый первый бит отвечает за переключение Data/Control или я все нетак понял??

Re: Дисплеи от мобильных телефонов- осцилограммы работы

Пн ноя 15, 2010 02:06:00

шлейф почти как у с75(желтый)
Изображение
а внутри надпись ALPS
Изображение
Вложения
vnutri.jpg
(159.96 KiB) Скачиваний: 10694
c75.jpg
фото дисплея
(154.38 KiB) Скачиваний: 10684
Последний раз редактировалось Moto_v3x Чт фев 02, 2012 11:56:43, всего редактировалось 1 раз.

Re: Дисплеи от мобильных телефонов- осцилограммы работы

Пн ноя 15, 2010 21:30:37

Bruse
конечно ты все не так понял. Минимальный набор команд написан на предидущей странице.
Ты мануалы от чего читаешь? разберись. Мануал от LPH8731-3C ? или всетаки мануал от самого контроллера дисплея?
итак. То что ты написал, это ты вычитал про трехпиновый режим последовательного интерфейса, где передается 9 бит и первый бит это RS. В LPH8731-3С используется 4пиновый режим, где Данные/Команда вынесен как отдельный пин.
ИТАК! если в дисплей даешь команду то пин RS переводишь в 0. если передаешь данные то в 1.

Re: Дисплеи от мобильных телефонов- осцилограммы работы

Вс ноя 21, 2010 10:39:25

Спасибо plutonium!
Я действительно читал мануал на контроллер. Если я правильно понял то RS необходимо изменять в то время когда CS=1, или это не кретичьно?
Если можно подскажите минимум команд, чтобы хоть чтото хаотично загорелось.
Бьюсь долго, а дисплей ни каких признаков не подал :(

Re: Дисплеи от мобильных телефонов- осцилограммы работы

Вс ноя 21, 2010 22:10:52

У меня есть дисплей от Nokia 6151, реально ли его приспособить под управление через AVR? :)

Re: Дисплеи от мобильных телефонов- осцилограммы работы

Вс ноя 21, 2010 22:34:29

Bruse
хм...
минимальное количество команд при котором происходит
хоть какое то реагирование, инициализация:
Код:
procedure init_m();
begin
RS:=0;
CS:=0;
RESET:=0;
delay_ms(500);
RESET:=1;
delay_ms(500);
write(cmd,0x03); //Booster voltage ON
delay_ms(20);
Write(cmd,0x11); //sleep out
delay_ms(20);
write(cmd,0xb6); //Display control
Write(dat,0x80); //
Write(dat,0x04); //
Write(dat,0x8a); //
write(dat,0x54); //
write(dat,0x45); //
Write(dat,0x52); //
Write(dat,0x43); //
write(cmd,0x25); //Write contrast
Write(dat,0x5d); //
write(cmd,0x29); //Display ON
end;


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

к контроллеру подключаются все ноги (CS,Reset,RS,CLK,DAT)
питание и контроллера и подсветки от 3,3в

десять раз пересмотри как посылаешь поток команд, данных на дисплей.

алгоритм такой:
при посылке Команды:
1. CS->1
2. RS->0
3. CS->0
4. CLK->0
5. цикл - на пин DAT отдаем побитно последовательно со старшего бита команду
6. после каждой отдачи бита дергаем CLK т.е. бит отдали CLK->1 CLK->0

при посылке данных
1. RS->1
2. CLK->0
3. цикл - на пин DAT отдаем побитно последовательно со старшего бита байт данных
4. после каждой отдачи бита дергаем CLK т.е. бит отдали CLK->1 CLK->0
Последний раз редактировалось plutonium Вс ноя 21, 2010 23:24:44, всего редактировалось 1 раз.

Re: Дисплеи от мобильных телефонов- осцилограммы работы

Вс ноя 21, 2010 23:01:47

по 6151
дисплей в своем составе имеет 2х рядный разъем 22 пина
он паралельный 8битный. какой контроллер сейчас посказать не могу
чтобы его запустить требуется подключить 12 ножек
D0-D7
WR
D/C
CS
Reset
если нужно из дисплея читать то и RD

если у тебя не менее ATMega16 (если ATMega8 то ты почти все отдашь на дисплей) и ты безболезнено сможешь отдать 1,5 порта под дисплей, вперед и с песней

Re: Дисплеи от мобильных телефонов- осцилограммы работы

Пн ноя 22, 2010 00:57:19

ну у меня 8535, почти 16я :)) Да и если что, куплю другую, не проблема
Но с чего начинать подключать дисплей не знаю, даж не знаю что для инициализации нужно...наверно с программной частью будет больше проблем :)

Re: Дисплеи от мобильных телефонов- осцилограммы работы

Пн ноя 22, 2010 18:36:33

Ну во первых, скачать схему от телефона 6151, чтобы четко понять какой пин дисплея телефона за что отвечает, Далее чтобы не мучаться с распайкой такого мелкого разъема, сделать печатную платку сзади дисплея чтобы развести ножки, т.к. они мелкие и паять неудобно, можно и вообще повредить. Далее все это дело к контроллеру подключить, незабывая про питание и согласование уровней. Можно и без согласования, запитать и контроллер и дисплей от 3,3в. благо АТМеги все с которыми я работал отлично работают и от такого напряжения. Т.к. современные дисплеи оперируют с 16 битными, а то и 32битными цветами, они требуют больших времязатрат процессора, поэтому обычно АТМегу сажают на внешний максимальный кварц 16МГц, а то и более (Мега гонится прекрасно), но не забываем что Мега с дисплеем будет работать на пониженном напряжении питания, так что лучше выше 16МГц не прыгать.Ну когда все железячное готово можно на просторах инета через Гугль заняться подбором совместимого контроллера дисплея.
собственно как я раньше и говорил дисплей займет полтора порта, на один порт полностью вешаешь данные D0-D7, на второй все остатки.
Инициализация: набор предварительных команд, которые настраивают дисплей перед работой, обычно:
Настройка напряжения для запала пикселя, направление сканирования памяти дисплея, возможно контраст, вывод из спящего режима, включение дисплея, настройка пикселя, сколько цветов будет отображать дисплей, температурная погрешность, Цветовая гамма и т.д. все зависит от контроллера дисплея. Есть дисплеи где для инициализации нужно всего 4 команды, есть где и все 50, а то и больше.

Re: Дисплеи от мобильных телефонов- осцилограммы работы

Пн ноя 22, 2010 20:59:32

есть дисплей от Siemens ST55/60, подскажите, каким образом я могу его подключить и инициализировать
опыт работы у меня лишь с символьными дисплеями
Изображение
Изображение

Re: Дисплеи от мобильных телефонов- осцилограммы работы

Пн ноя 22, 2010 22:06:37

Thauris судя по тому что я увидел.... забудь это неблагодарное занятие :)

Re: Дисплеи от мобильных телефонов- осцилограммы работы

Пн ноя 22, 2010 22:44:53

Изображение
Вот отрывок схемы от 6151 :))
Значит подключу я PA0 - D0 ... PA7 - D7, т.е. по порядку, а остальные дорожки подключать тоже последовательно по порядку?

И на счет изготовления платы - видел что делают такие платы для дисплеев, но не очень понял как эту плату соединяют со шлейфом дисплея, как? :)) Также как припаивают BGA-процессоры? :))

Re: Дисплеи от мобильных телефонов- осцилограммы работы

Вт ноя 23, 2010 21:21:30

Спасибо plutonium!
Разобрался с порядком записи команд/данных в дисплей выполнил инициализацию как Вы рекомендовали, дисплей становится белым проморгнув разноцветными пикселями в хаотичном состоянии. Пытаюсь инициализировать полноценно - невыходит. Перепробовал все выложенные инициализации в этой теме - невыводит ни одного пикселя.

У меня вопрос: После посылки команды поднимаю линию CS, перед посылкой данных (1 байт) CS=0 - по окончанию CS=1. Как посылается блок данных? Нужно ли дергать CS=1 CS=0 перед посылкой очередного байта данных следующих за командой?

:) :(

Re: Дисплеи от мобильных телефонов- осцилограммы работы

Ср ноя 24, 2010 23:39:39

а по поводу этого http://read.pudn.com/downloads136/sourcecode/asm/582068/TXDT200A-2_54126/TXDT200A-2.pdf, можете что-то посоветовать?

Re: Дисплеи от мобильных телефонов- осцилограммы работы

Чт дек 02, 2010 19:37:50

Доброго времени суток всем!
Сейчас вожусь с дисплеем от сименса m55 lph8731-3C. Инициализацию делаю так, как приводил plutonium в посте от 25 октября 2010. Дисплей становится белым, реагирует на команды изменение контраста, включить/выключить все пиксели и т.п. Но нарисовать ничего на нем не могу. Подскажите, пожалуйста, в чем может быть проблема. Привожу куски кода инициализации и рисования.
Код:
void InitLCD()
{
   CLR_RESET;
   _delay_ms(100);
   SET_RESET;
   _delay_ms(1000);

   WriteToLCD(CMD,0x01); //reset sw
   _delay_ms(50);
   WriteToLCD(CMD,0x03); //Booster voltage ON
   _delay_ms(40);
   WriteToLCD(CMD,0x11); //sleep out
   _delay_ms(40);
   WriteToLCD(CMD,0xc6); //initial escape
   _delay_ms(40);
   WriteToLCD(CMD,0xb9); //Refresh set
   WriteToLCD(DAT,0x00);
   WriteToLCD(CMD,0xb6); //Display control
   WriteToLCD(DAT,0x80); //
   WriteToLCD(DAT,0x04); //
   WriteToLCD(DAT,0x8a); //
   WriteToLCD(DAT,0x54); //
   WriteToLCD(DAT,0x45); //
   WriteToLCD(DAT,0x52); //
   WriteToLCD(DAT,0x43); //
   WriteToLCD(CMD,0xb3); //Gray scale position set 0
   WriteToLCD(DAT,0x02); //
   WriteToLCD(DAT,0x0a); //
   WriteToLCD(DAT,0x15); //
   WriteToLCD(DAT,0x1f); //
   WriteToLCD(DAT,0x28); //
   WriteToLCD(DAT,0x30); //
   WriteToLCD(DAT,0x37); //
   WriteToLCD(DAT,0x3f); //
   WriteToLCD(DAT,0x47); //
   WriteToLCD(DAT,0x4c); //
   WriteToLCD(DAT,0x54); //
   WriteToLCD(DAT,0x65); //
   WriteToLCD(DAT,0x75); //
   WriteToLCD(DAT,0x80); //
   WriteToLCD(DAT,0x85); //
   WriteToLCD(CMD,0xb5); //Gamma curve
   WriteToLCD(DAT,0x01); //
   WriteToLCD(CMD,0xb7); //Temperature gradient
   WriteToLCD(DAT,0x00); //
   WriteToLCD(DAT,0x00); //
   WriteToLCD(DAT,0x00); //
   WriteToLCD(DAT,0x00); //
   WriteToLCD(DAT,0x00); //
   WriteToLCD(DAT,0x00); //
   WriteToLCD(DAT,0x00); //
   WriteToLCD(DAT,0x00); //
   WriteToLCD(DAT,0x00); //
   WriteToLCD(DAT,0x00); //
   WriteToLCD(DAT,0x00); //
   WriteToLCD(DAT,0x00); //
   WriteToLCD(DAT,0x00); //
   WriteToLCD(DAT,0x00); //
   WriteToLCD(CMD,0xbd); //Common driver output select
   WriteToLCD(DAT,0x00); //
   WriteToLCD(CMD,0x36); //Memory access control
   WriteToLCD(DAT,0x48); //
   WriteToLCD(CMD,0x2d); //Colour set
   WriteToLCD(DAT,0x00); //
   WriteToLCD(DAT,0x03); //
   WriteToLCD(DAT,0x05); //
   WriteToLCD(DAT,0x07); //
   WriteToLCD(DAT,0x09); //
   WriteToLCD(DAT,0x0b); //
   WriteToLCD(DAT,0x0d); //
   WriteToLCD(DAT,0x0f); //
   WriteToLCD(DAT,0x00); //
   WriteToLCD(DAT,0x03); //
   WriteToLCD(DAT,0x05); //
   WriteToLCD(DAT,0x07); //
   WriteToLCD(DAT,0x09); //
   WriteToLCD(DAT,0x0b); //
   WriteToLCD(DAT,0x0d); //
   WriteToLCD(DAT,0x0f); //
   WriteToLCD(DAT,0x00); //
   WriteToLCD(DAT,0x05); //
   WriteToLCD(DAT,0x0b); //
   WriteToLCD(DAT,0x0f); //
   WriteToLCD(CMD,0xba); //Voltage control
   WriteToLCD(DAT,0x2f); //
   WriteToLCD(DAT,0x03); //
   WriteToLCD(CMD,0x25); //Write contrast
   WriteToLCD(DAT,0x7f); //
   WriteToLCD(CMD,0xbe); //Power control
   WriteToLCD(DAT,0x59); //
   WriteToLCD(CMD,0x3a); //interfase pixel format
   WriteToLCD(DAT,0x03); //

   WriteToLCD(CMD,0x29); //Display ON
}


void WriteToLCD(bool w, U8 datt)
{
   CLR_CLK;
   CLR_DAT;

   if(old && !w){
      SET_CS;
      if( w ){
         SET_RS;
      }else {
         CLR_RS;
      }
      CLR_CS;
   };
   if( !old && w ){
      SET_CS;
      if( w ){
         SET_RS;
      }else {
         CLR_RS;
      }
      CLR_CS;
   }
   if(!old && !w){
      SET_CS;
      if( w ){
         SET_RS;
      }else {
         CLR_RS;
      }
      CLR_CS;
   }

   for(int i=0;i < 8;i++){
      if( datt & 0x80 ){
         SET_DAT;
      }
      else {
         CLR_DAT;
      }

      SET_CLK;
      datt = datt << 1;
      CLR_CLK;
      _delay_us(TIME_TO_SLEEP_LCD);
   }

   old = w;
}

void DrawPixel(U8 XPos, U8 YPos, U16 Color)
{
   WriteToLCD( CMD, 0x2A );
   WriteToLCD( DAT, XPos );
   WriteToLCD( DAT, 100 );

   WriteToLCD( CMD, 0x2B );
   WriteToLCD( DAT, YPos+1 );
   WriteToLCD( DAT, 80 );

   WriteToLCD( CMD, 0x2C );
   WriteToLCD( DAT, (Color >> 8) & 0xFF );
   WriteToLCD( DAT, Color & 0xFF );
}

void DrawManyPixels()
{
   for(int i = 0; i < 50; i++)
   for(int j = 0; j < 50; j++)
      DrawPixel( i, j, i+j );
}
Ответить