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

 
 
> Управление ЖКИ, управление контроллером SPFD5408
Anatoly_P
сообщение Jun 5 2008, 11:07
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 3-05-08
Из: Minsk
Пользователь №: 37 240



привет всем! Люди добрые помогите кто чем может. Есть ЖКИ с контроллером SPDF5408. В даташите контроллера нашел таблицу кода инициализации, запрограммировал, В результате после инициализации на экране появляется шум. Вроде значить система работает ( были подозрения, что сжег). Но никак не могу точку или последовательность точек вывести. Загоняю данные в память ЖКИ через регистр R22h, а этот гребанный ЖКИ нифига не отображает. Уже третий день на месте стою, может кто подскажет куда копать.
ARM LPC2468. Плату под него сами разрабатывали.
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 21)
Liderr
сообщение Jan 24 2009, 20:54
Сообщение #2





Группа: Новичок
Сообщений: 1
Регистрация: 24-01-09
Пользователь №: 43 898



Цитата(Anatoly_P @ Jun 5 2008, 14:07) *
привет всем! Люди добрые помогите кто чем может. Есть ЖКИ с контроллером SPDF5408. В даташите контроллера нашел таблицу кода инициализации, запрограммировал, В результате после инициализации на экране появляется шум. Вроде значить система работает ( были подозрения, что сжег). Но никак не могу точку или последовательность точек вывести. Загоняю данные в память ЖКИ через регистр R22h, а этот гребанный ЖКИ нифига не отображает. Уже третий день на месте стою, может кто подскажет куда копать.
ARM LPC2468. Плату под него сами разрабатывали.


Приветствую, Коллега! wink.gif
Сейчас разбираюсь с дисплеем от сотового телефона NOKIA N95 с тач панелью, в котором также используется контроллер SPDF5408. Нашёл ли ты какую либо информацию, решил ли проблемы с инициальзацией и выводом информации, какие подводные камни? Заранее спасибо!
Go to the top of the page
 
+Quote Post
rezident
сообщение Jan 24 2009, 21:43
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Liderr, обращаю ваше внимание, что Anatoly_P разместил свое сообщение больше года назад. Но за это время на него не было ни одного ответа. Так что с вашей стороны наивно надеяться, что он увидит свой пост годовой давности от что-то ответит вам здесь. Тем более, что, судя по информации в профиле, он не посещал форума уже четыре месяца. Надежнее было бы написать ему мылом.
Go to the top of the page
 
+Quote Post
at90
сообщение Jan 25 2009, 10:18
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 866
Регистрация: 31-03-05
Из: Краснодар
Пользователь №: 3 814



Liderr, а экран от оригинальной N95 или от китайской... откуда инфа что в экране именно SPDF5408


--------------------
<<Первая производная от чужой идеи - уже твоя идея.>>
Go to the top of the page
 
+Quote Post
Anatrulij
сообщение Jan 28 2009, 08:49
Сообщение #5


Участник
*

Группа: Новичок
Сообщений: 64
Регистрация: 7-11-08
Пользователь №: 41 437



Здраствуйте. Щас разбираюсь с понелью G057QN01 V0. инфы в инете - ноль. подключил его к LPC2478, а что с ним дальше делать не знаю. может кто работал. подскажите.
Go to the top of the page
 
+Quote Post
kovz
сообщение Jan 28 2009, 09:12
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 105
Регистрация: 25-07-05
Пользователь №: 7 079



Цитата(Anatrulij @ Jan 28 2009, 10:49) *
Здраствуйте. Щас разбираюсь с понелью G057QN01 V0. инфы в инете - ноль. подключил его к LPC2478, а что с ним дальше делать не знаю. может кто работал. подскажите.

в инете инфа есть http://www.google.com/url?sa=t&source=...EOpfuGqyoIFeM8A
там и распиновка и временные диаграмы, если и это не поможет - тогда нужно начинать с другого.
Go to the top of the page
 
+Quote Post
Anatrulij
сообщение Jan 28 2009, 09:35
Сообщение #7


Участник
*

Группа: Новичок
Сообщений: 64
Регистрация: 7-11-08
Пользователь №: 41 437



Цитата(kovz @ Jan 28 2009, 12:12) *
в инете инфа есть http://www.google.com/url?sa=t&source=...EOpfuGqyoIFeM8A
там и распиновка и временные диаграмы, если и это не поможет - тогда нужно начинать с другого.


Я читал этот документ - он очень бедный. Меня интересует как програмно с ним работать. Может примерчик есть?
Go to the top of the page
 
+Quote Post
kovz
сообщение Jan 28 2009, 09:41
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 105
Регистрация: 25-07-05
Пользователь №: 7 079



Цитата(Anatrulij @ Jan 28 2009, 11:35) *
Я читал этот документ - он очень бедный. Меня интересует как програмно с ним работать. Может примерчик есть?

нет примерчика нет, но в чём проблема не пойму cranky.gif
Или вы спрашиваете как вывести картинку на данный дисплей?
Тогда курить как работает LCD коноллер в 2478. В двух словах пишете образ картинки в RAM и потом говорите контроллеру(LCD) где вы его записали, а он сам это всё отправит на экран

Сообщение отредактировал kovz - Jan 28 2009, 09:44
Go to the top of the page
 
+Quote Post
Anatrulij
сообщение Jan 28 2009, 09:58
Сообщение #9


Участник
*

Группа: Новичок
Сообщений: 64
Регистрация: 7-11-08
Пользователь №: 41 437



Цитата(kovz @ Jan 28 2009, 12:41) *
нет примерчика нет, но в чём проблема не пойму cranky.gif
Или вы спрашиваете как вывести картинку на данный дисплей?
Тогда курить как работает LCD коноллер в 2478. В двух словах пишете образ картинки в RAM и потом говорите контроллеру(LCD) где вы его записали, а он сам это всё отправит на экран


Да, мне надо вывести что-то на экран. Если бы еще знать какой контроллер стоит в этом LCD(в документации ничего не сказано)
Ладненько, буду разбираться.
спасибки за ответ.
З.Ы. Если что нароете - обязательно скиньте laughing.gif
Go to the top of the page
 
+Quote Post
kovz
сообщение Jan 28 2009, 10:36
Сообщение #10


Частый гость
**

Группа: Участник
Сообщений: 105
Регистрация: 25-07-05
Пользователь №: 7 079



Цитата(Anatrulij @ Jan 28 2009, 11:58) *
Да, мне надо вывести что-то на экран. Если бы еще знать какой контроллер стоит в этом LCD(в документации ничего не сказано)
Ладненько, буду разбираться.
спасибки за ответ.
З.Ы. Если что нароете - обязательно скиньте laughing.gif

да в этом случае всёравно какой в LCD контроллер.
Я чуть позже объясню что к чему, сейчас немного занят.

Сообщение отредактировал kovz - Jan 28 2009, 10:39
Go to the top of the page
 
+Quote Post
Anatrulij
сообщение Jan 28 2009, 11:16
Сообщение #11


Участник
*

Группа: Новичок
Сообщений: 64
Регистрация: 7-11-08
Пользователь №: 41 437



Цитата(kovz @ Jan 28 2009, 13:36) *
да в этом случае всёравно какой в LCD контроллер.
Я чуть позже объясню что к чему, сейчас немного занят.



Буду ждать
Go to the top of the page
 
+Quote Post
kovz
сообщение Jan 29 2009, 09:44
Сообщение #12


Частый гость
**

Группа: Участник
Сообщений: 105
Регистрация: 25-07-05
Пользователь №: 7 079



Цитата(Anatrulij @ Jan 28 2009, 13:16) *
Буду ждать

Давайте с начала. Я не знаю как у вас подключён экранчик, но правильно вот так :

LPC2478 G057QN01 назначение
LCDPWR | VDD(28,29)/NC | можно управлять транзистором для вкл/выкл экранчика
LCDDCLK | CLK(2) | тактование пикселей
LCDENA/LCDM | DE(27) | сигнал валидности данных
LCDFP | NC |
LCDLE | NC |
LCDLP | NC |
LCDVD[1:0] | NC |
LCDVD[2] | RED[0](6) | бит интенсивности общий для всех цветов бует одинаков
LCDVD[3:7] | RED[1:5](7-11) | данные красного
LCDVD[8:9] | NC |
LCDVD[10] | GREEN[0](13) | бит интенсивности общий для всех цветов бует одинаков
LCDVD[11:15] | GREEN[1:5](14-18) | данные зелёного
LCDVD[16:17] | NC |
LCDVD[18] | BLUE[0](20) | бит интенсивности общий для всех цветов бует одинаков
LCDVD[19:23] | BLUE[1:4](21-25) | данные синего
LCDCLKIN | NC | можно использовать для внешнего тактования контроллера LCD в LPC2478



далее смотрим на табличку и временные диаграммы на странице 14 документа, ссылка на который выше.
мы видим что частота тактования пикселей должна лежать в пределах 6,2 - 12,1 Мгц, рекомендуют 6,4 Мгц это значение получаем путём настройки делителя в регистрах LCD_CFG и LCD_POL, там же выбираем источник тактования, и полярности сигналов.
Далее ключевой момент, у нас экранчик отображает 320 точек на линию, но после этих 320 точек ему нужно ещё минимум 86 максимум 240 тактов, перед тем как можно будет подавать следующие 320пикселей следующей линии.
Эти настройки задаются в регистре LCD_TIMH, но контроллер LCD в LPC2478 имеет одну особенность, в нём можно настроить не только сколько "холостых"(назавём их так) пикселей нужноподать после отображаеммых пикселей, а и до них(мин значение 1).
Так как нам рекомендуют подать 88 таких холостых тактов, делаем хитрость делим их количество на 2 и подаём 44 до и 44 после.
Значение LCD_TIMH получится:
31:24 HBP = 0x2B (44-1) количество холостых пикселей до данных
23:16 HFP = 0x2B (44-1) количество холостых пикселей после данных
15:8 HSW = 0x56(88) количество пикселей горизонтальной синхронизации
7:2 PPL = 0x140(320) количество пикселей данных
1:0 reserved
тоже самое нужно проделать с регистром LCD_TIMV
только вместо 88 холостых клоков пикселей, необходимо от 14 до 120 холостых линий, рекомендуют 23. значения в этом регистре уже не в пикселях а в линиях!
остальные регистры не вижу смысла описывать, там всё понятно из документации.
Есть только одна особенность регистр LCD_UPBASE должен быть инициализирован до включения LCD контроллера в LPC2478!
Он содержит адрес первой ячейки памяти, где хранится образ изображения, который вы хотите вывести на экран!

Если будут ещё вопросы, задавайте.
P.S. Исходников нет, и думаю гораздо важнее понимание как оно работает, нежели готовые чужие сырцы.
Go to the top of the page
 
+Quote Post
Anatrulij
сообщение Jan 29 2009, 11:53
Сообщение #13


Участник
*

Группа: Новичок
Сообщений: 64
Регистрация: 7-11-08
Пользователь №: 41 437



Цитата(kovz @ Jan 29 2009, 12:44) *
Если будут ещё вопросы, задавайте.


ОГОООООО!!! я даже и не надеялся на такой ответ. Большое спасибо за такое "разжовывание" постараюсь теперь это все проглотить.

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

ещё раз БОЛЬШОЕ СПАСИБО!!!
Go to the top of the page
 
+Quote Post
Anatrulij
сообщение Jan 29 2009, 13:42
Сообщение #14


Участник
*

Группа: Новичок
Сообщений: 64
Регистрация: 7-11-08
Пользователь №: 41 437



Цитата(kovz @ Jan 29 2009, 12:44) *
Если будут ещё вопросы, задавайте.
P.S. Исходников нет, и думаю гораздо важнее понимание как оно работает, нежели готовые чужие сырцы.


Ну вот, я сделал инициализацию LCD:

#include "LPC23xx.h" /* LPC23xx definitions */
#include "type.h"


#define BUFFER_ADDR 0xA0000000
unsigned short * Ptr;

void IniLCD()
{
DWORD i;

PCONP |= (1<<20);
PINSEL11 = ((5<<1));

PINSEL4 &= ~(3<<4);
PINSEL4 &= ~(3<<6);
PINSEL4 &= ~(3<<8);
PINSEL4 &= ~(3<<10);
PINSEL4 |= ((3<<4) | (3<<6) | (3<<8) | (3<<10));

PINSEL3 &= ~(3<<8);
PINSEL3 &= ~(3<<10);
PINSEL3 &= ~(3<<12);
PINSEL3 &= ~(3<<14);
PINSEL3 &= ~(3<<16);
PINSEL3 &= ~(3<<18);
PINSEL3 &= ~(3<<20);
PINSEL3 &= ~(3<<22);
PINSEL3 &= ~(3<<24);
PINSEL3 &= ~(3<<26);
PINSEL3 |= ( (1<<8) | (1<<10) | (1<<12) | (1<<14) | (1<<16) | (1<<18) | (1<<20) | (1<<22) | (1<<24) | (1<<26) );

PINSEL4 &= ~(3<<12);
PINSEL4 &= ~(3<<14);
PINSEL4 &= ~(3<<16);
PINSEL4 &= ~(3<<18);
PINSEL4 &= ~(3<<24);
PINSEL4 &= ~(3<<26);
PINSEL4 |= ((3<<12) | (3<<14) | (3<<16) | (3<<18) | (1<<24) | (1<<26));

LCD_CFG = 1;
LCD_TIMH = ( (0x2B<<24) | (0x2B<<16) | (0x56<<8) | (0x140<<2));
LCD_TIMV = ( (12<<24) | (12<<16) | (24<<10) | (239<<0) );
LCD_POL = ( (1<<26) | (((320/1)-1)<<16) | (1<<12) | (0<<5));

LCD_CTRL = ((1<<5) | (6<<1));
LCD_CTRL |= (1<<8);

LCD_UPBASE = BUFFER_ADDR;
LCD_LPBASE = BUFFER_ADDR;
for(i=0;i<50000;i++);

LCD_CTRL |= 1;
for(i=0;i<50000;i++);
LCD_CTRL |= 1<<11;
}

int main()
{
IniLCD();
???????
}


что делать дальше? как вывести точьку, или что-нибудь еще?

СПАСИБО ЗА ОТВЕТЫ!!!
Go to the top of the page
 
+Quote Post
kovz
сообщение Feb 3 2009, 08:03
Сообщение #15


Частый гость
**

Группа: Участник
Сообщений: 105
Регистрация: 25-07-05
Пользователь №: 7 079



Извини было много работы, некогда было отписаться.
Есть несколько вопросов:
1. Где настройка PLL, скорости памяти и тд.?(Надеюсь вынесено в low_level_init)
2. #define BUFFER_ADDR 0xA0000000 это хорошо, но как ты собираешся формировать там изображение. Тебе нужно выделить массив размером 240*320*2 байт, а точнее два таких массива. Пока из одного будет выводится картинка, ты во второй пишеш новую, а потом меняеш указатель из какого масива выводить.
3. Для чего задержки for(i=0;i<50000;i++);

А по поводу вывода на экран нет ничего проще! Отведите 307200(0x4B000) байт видеопамяти начая с адреса 0xA0000000 и разбейте на две части размером 320*240*2 байт, тоесть столько сколько необходимо на один экран. Далее используя Next base address update interrupt(введи в поиске по usermanual на LPC2478), подсовываеш ему то 0xA0000000, то 0xA0025800 в регистр LCD_UPBASE. А сам в это время в другой части буфера формируй изображение.

Если совсем просто, выведи статическую картинку, выдели в рам массив unsigned short LCD_Frame[76800] забей его чем нибуть осмысленным, и передай на вывод LCD контроллеру в LPC : LCD_UPBASE = &LCD_Frame[0];

Далее микроконтроллер сам выплюнет всё в экран.

Сообщение отредактировал kovz - Feb 3 2009, 08:04
Go to the top of the page
 
+Quote Post
Anatrulij
сообщение Feb 3 2009, 17:48
Сообщение #16


Участник
*

Группа: Новичок
Сообщений: 64
Регистрация: 7-11-08
Пользователь №: 41 437



Цитата(kovz @ Feb 3 2009, 12:03) *
Извини было много работы, некогда было отписаться.
Есть несколько вопросов:
1. Где настройка PLL, скорости памяти и тд.?(Надеюсь вынесено в low_level_init)
2. #define BUFFER_ADDR 0xA0000000 это хорошо, но как ты собираешся формировать там изображение. Тебе нужно выделить массив размером 240*320*2 байт, а точнее два таких массива. Пока из одного будет выводится картинка, ты во второй пишеш новую, а потом меняеш указатель из какого масива выводить.
3. Для чего задержки for(i=0;i<50000;i++);


Я уже заждался. biggrin.gif .

По поводу заданных вопросов:
1. PLL не использую, настройка памяти есть(запись, чтение проходит успешно)
2. Для видеобуфера использую SRAM, начиная с адреса 0х80000000.
3. Часть кода брал из другого источника, который сам уже и коректировал, там и была данная задержка. Если она не нужна, то я уберу?

Как выводить изображение вроде разобрался, но проблема в настройках развертки - выводит не то что хотелось бы.

Цитата(kovz @ Feb 3 2009, 12:03) *
7:2 PPL = 0x140(320) количество пикселей данных

В ДШ к контроллеру (как я понял) написано, что (320/16)-1 = 19

Так что я щас мучаюсь с настройкой LCD_TIMH, LCD_TIMV.
Если будут советы, то с удовольствием выслушаю biggrin.gif
Go to the top of the page
 
+Quote Post
kovz
сообщение Feb 4 2009, 13:00
Сообщение #17


Частый гость
**

Группа: Участник
Сообщений: 105
Регистрация: 25-07-05
Пользователь №: 7 079



Цитата(Anatrulij @ Feb 3 2009, 19:48) *
Как выводить изображение вроде разобрался, но проблема в настройках развертки - выводит не то что хотелось бы.


В ДШ к контроллеру (как я понял) написано, что (320/16)-1 = 19

Так что я щас мучаюсь с настройкой LCD_TIMH, LCD_TIMV.
Если будут советы, то с удовольствием выслушаю biggrin.gif

Опиши что выводит и что хочется. В чём именно проблема синхронизации? и по поводу установки количества точек в линии ты прав, я не досмотрел.
Go to the top of the page
 
+Quote Post
Anatrulij
сообщение Feb 5 2009, 06:07
Сообщение #18


Участник
*

Группа: Новичок
Сообщений: 64
Регистрация: 7-11-08
Пользователь №: 41 437



Цитата(kovz @ Feb 4 2009, 17:00) *
Опиши что выводит и что хочется. В чём именно проблема синхронизации? и по поводу установки количества точек в линии ты прав, я не досмотрел.


Уже выводит куда я хочу. НО!!! Я вывожу белый квадратик на черном фоне в центре экрана, а выводит светло желтый квадратик на феолетовом.
в чем может быть причина такого безобразия. Люди говорят, что дело в настройках LCD_TIMH, LCD_TIMV. Значение данных регистров я изменяю, а реакции ноль.
Go to the top of the page
 
+Quote Post
kovz
сообщение Feb 5 2009, 13:18
Сообщение #19


Частый гость
**

Группа: Участник
Сообщений: 105
Регистрация: 25-07-05
Пользователь №: 7 079



Цитата(Anatrulij @ Feb 5 2009, 08:07) *
Уже выводит куда я хочу. НО!!! Я вывожу белый квадратик на черном фоне в центре экрана, а выводит светло желтый квадратик на феолетовом.
в чем может быть причина такого безобразия. Люди говорят, что дело в настройках LCD_TIMH, LCD_TIMV. Значение данных регистров я изменяю, а реакции ноль.

Тут не подскажу, но мне кажеться копать нужно в направлении представлений цветов
поиграйся в регистре LCD_CTRL с настройками битов LcdBpp(3:1).
LCD_CTRL = ((1<<5) | (6<<1)); в этой строке замени 6 на 4

Сообщение отредактировал kovz - Feb 5 2009, 13:27
Go to the top of the page
 
+Quote Post
Anatrulij
сообщение Feb 5 2009, 14:44
Сообщение #20


Участник
*

Группа: Новичок
Сообщений: 64
Регистрация: 7-11-08
Пользователь №: 41 437



Цитата(kovz @ Feb 5 2009, 17:18) *
Тут не подскажу, но мне кажеться копать нужно в направлении представлений цветов
поиграйся в регистре LCD_CTRL с настройками битов LcdBpp(3:1).
LCD_CTRL = ((1<<5) | (6<<1)); в этой строке замени 6 на 4


Да, дело в настройках цвета. буду копать дальше.
СПАСИБО за ответы
Go to the top of the page
 
+Quote Post
Wano
сообщение Feb 5 2009, 21:42
Сообщение #21


Местный
***

Группа: Свой
Сообщений: 272
Регистрация: 3-06-06
Пользователь №: 17 737



Цитата(Anatrulij @ Feb 5 2009, 16:44) *
Да, дело в настройках цвета. буду копать дальше.
СПАСИБО за ответы

По поводу цвета нужно ещё смотреть какой режим включен 8 или 16 бит на цвет. Если 8 бит то нужно заполнять палитру в 256 цветов, порядковый номер из памяти будет переводиться в цвет автоматом согласно палитре.
Go to the top of the page
 
+Quote Post
Jurdens
сообщение Aug 11 2009, 02:25
Сообщение #22


Частый гость
**

Группа: Свой
Сообщений: 107
Регистрация: 9-07-05
Пользователь №: 6 656



Цитата(kovz @ Feb 3 2009, 12:03) *
Извини было много работы, некогда было отписаться.
Есть несколько вопросов:
1. Где настройка PLL, скорости памяти и тд.?(Надеюсь вынесено в low_level_init)
2. #define BUFFER_ADDR 0xA0000000 это хорошо, но как ты собираешся формировать там изображение. Тебе нужно выделить массив размером 240*320*2 байт, а точнее два таких массива. Пока из одного будет выводится картинка, ты во второй пишеш новую, а потом меняеш указатель из какого масива выводить.
3. Для чего задержки for(i=0;i<50000;i++);

А по поводу вывода на экран нет ничего проще! Отведите 307200(0x4B000) байт видеопамяти начая с адреса 0xA0000000 и разбейте на две части размером 320*240*2 байт, тоесть столько сколько необходимо на один экран. Далее используя Next base address update interrupt(введи в поиске по usermanual на LPC2478), подсовываеш ему то 0xA0000000, то 0xA0025800 в регистр LCD_UPBASE. А сам в это время в другой части буфера формируй изображение.

Если совсем просто, выведи статическую картинку, выдели в рам массив unsigned short LCD_Frame[76800] забей его чем нибуть осмысленным, и передай на вывод LCD контроллеру в LPC : LCD_UPBASE = &LCD_Frame[0];

Далее микроконтроллер сам выплюнет всё в экран.



А можно ли использовать LCD_LPBASE в режиме TFT ?Установив LCD_CTRL_bit.LcdDual=1;
для автоматического переключения страниц?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 18:37
Рейтинг@Mail.ru


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