Страница 3 из 44

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

Добавлено: Вс окт 31, 2010 20:13:28
neonix
Дисп сложный не спорю, но зачастую и такой весьма сложно найти. Грех не пользоваться тем, что есть :) я кстати свой дисп запустил, целый день правда убил на него. Уж больно умудренная инициализация и передача картинки.
Вот результат ;)
Изображение

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

Добавлено: Вс окт 31, 2010 20:32:30
Dalt
есть информация по дисплею от cx75?

Изображение

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

Добавлено: Вс окт 31, 2010 21:04:30
plutonium
neonix, Молодца! не сомневался что запустишь, инициализацию не кинешь?

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

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

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

Посмотрев на твой рисунок, видно что счет ног идет справа налево, ну как сфотографирован ЗАД :) так и считаем

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

Добавлено: Вс окт 31, 2010 21:11:00
neonix
Вот инициализация:
Запустить удалось только после орудования с логическим анализатором. В даташите нифиа нету, сам дисплей весьма сложный.

Код: Выделить всё

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
Man
Dalt Дисплей на фото имеет контроллер SSD1286, и паралельную шину 8 бит.
А зовется он случайно не LPH8924-1 ?

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

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

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

Добавлено: Пн ноя 15, 2010 02:06:00
Moto_v3x
шлейф почти как у с75(желтый)
Изображение
а внутри надпись ALPS
Изображение

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

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

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

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

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

Добавлено: Вс ноя 21, 2010 22:10:52
m210
У меня есть дисплей от Nokia 6151, реально ли его приспособить под управление через AVR? :)

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

Добавлено: Вс ноя 21, 2010 22:34:29
plutonium
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

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

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

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

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

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

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

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

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

Добавлено: Пн ноя 22, 2010 20:59:32
Thauris
есть дисплей от Siemens ST55/60, подскажите, каким образом я могу его подключить и инициализировать
опыт работы у меня лишь с символьными дисплеями
Изображение
Изображение

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

Добавлено: Пн ноя 22, 2010 22:06:37
plutonium
Thauris судя по тому что я увидел.... забудь это неблагодарное занятие :)

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

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

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

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

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

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

:) :(

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

Добавлено: Ср ноя 24, 2010 23:39:39
Thauris
а по поводу этого http://read.pudn.com/downloads136/sourc ... 200A-2.pdf, можете что-то посоветовать?

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

Добавлено: Чт дек 02, 2010 19:37:50
renitch
Доброго времени суток всем!
Сейчас вожусь с дисплеем от сименса 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 );
}