|
Управление ЖКИ, управление контроллером SPFD5408 |
|
|
|
Jun 5 2008, 11:07
|
Участник

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

|
привет всем! Люди добрые помогите кто чем может. Есть ЖКИ с контроллером SPDF5408. В даташите контроллера нашел таблицу кода инициализации, запрограммировал, В результате после инициализации на экране появляется шум. Вроде значить система работает ( были подозрения, что сжег). Но никак не могу точку или последовательность точек вывести. Загоняю данные в память ЖКИ через регистр R22h, а этот гребанный ЖКИ нифига не отображает. Уже третий день на месте стою, может кто подскажет куда копать. ARM LPC2468. Плату под него сами разрабатывали.
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 21)
|
Jan 24 2009, 20:54
|
Группа: Новичок
Сообщений: 1
Регистрация: 24-01-09
Пользователь №: 43 898

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

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

|
Здраствуйте. Щас разбираюсь с понелью G057QN01 V0. инфы в инете - ноль. подключил его к LPC2478, а что с ним дальше делать не знаю. может кто работал. подскажите.
|
|
|
|
|
Jan 28 2009, 09:12
|
Частый гость
 
Группа: Участник
Сообщений: 105
Регистрация: 25-07-05
Пользователь №: 7 079

|
Цитата(Anatrulij @ Jan 28 2009, 10:49)  Здраствуйте. Щас разбираюсь с понелью G057QN01 V0. инфы в инете - ноль. подключил его к LPC2478, а что с ним дальше делать не знаю. может кто работал. подскажите. в инете инфа есть http://www.google.com/url?sa=t&source=...EOpfuGqyoIFeM8Aтам и распиновка и временные диаграмы, если и это не поможет - тогда нужно начинать с другого.
|
|
|
|
|
Jan 28 2009, 09:35
|
Участник

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

|
Цитата(kovz @ Jan 28 2009, 12:12)  в инете инфа есть http://www.google.com/url?sa=t&source=...EOpfuGqyoIFeM8Aтам и распиновка и временные диаграмы, если и это не поможет - тогда нужно начинать с другого. Я читал этот документ - он очень бедный. Меня интересует как програмно с ним работать. Может примерчик есть?
|
|
|
|
|
Jan 28 2009, 09:41
|
Частый гость
 
Группа: Участник
Сообщений: 105
Регистрация: 25-07-05
Пользователь №: 7 079

|
Цитата(Anatrulij @ Jan 28 2009, 11:35)  Я читал этот документ - он очень бедный. Меня интересует как програмно с ним работать. Может примерчик есть? нет примерчика нет, но в чём проблема не пойму Или вы спрашиваете как вывести картинку на данный дисплей? Тогда курить как работает LCD коноллер в 2478. В двух словах пишете образ картинки в RAM и потом говорите контроллеру(LCD) где вы его записали, а он сам это всё отправит на экран
Сообщение отредактировал kovz - Jan 28 2009, 09:44
|
|
|
|
|
Jan 28 2009, 09:58
|
Участник

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

|
Цитата(kovz @ Jan 28 2009, 12:41)  нет примерчика нет, но в чём проблема не пойму Или вы спрашиваете как вывести картинку на данный дисплей? Тогда курить как работает LCD коноллер в 2478. В двух словах пишете образ картинки в RAM и потом говорите контроллеру(LCD) где вы его записали, а он сам это всё отправит на экран Да, мне надо вывести что-то на экран. Если бы еще знать какой контроллер стоит в этом LCD(в документации ничего не сказано) Ладненько, буду разбираться. спасибки за ответ. З.Ы. Если что нароете - обязательно скиньте
|
|
|
|
|
Jan 28 2009, 10:36
|
Частый гость
 
Группа: Участник
Сообщений: 105
Регистрация: 25-07-05
Пользователь №: 7 079

|
Цитата(Anatrulij @ Jan 28 2009, 11:58)  Да, мне надо вывести что-то на экран. Если бы еще знать какой контроллер стоит в этом LCD(в документации ничего не сказано) Ладненько, буду разбираться. спасибки за ответ. З.Ы. Если что нароете - обязательно скиньте  да в этом случае всёравно какой в LCD контроллер. Я чуть позже объясню что к чему, сейчас немного занят.
Сообщение отредактировал kovz - Jan 28 2009, 10:39
|
|
|
|
|
Jan 28 2009, 11:16
|
Участник

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

|
Цитата(kovz @ Jan 28 2009, 13:36)  да в этом случае всёравно какой в LCD контроллер. Я чуть позже объясню что к чему, сейчас немного занят. Буду ждать
|
|
|
|
|
Jan 29 2009, 09:44
|
Частый гость
 
Группа: Участник
Сообщений: 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. Исходников нет, и думаю гораздо важнее понимание как оно работает, нежели готовые чужие сырцы.
|
|
|
|
|
Jan 29 2009, 11:53
|
Участник

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

|
Цитата(kovz @ Jan 29 2009, 12:44)  Если будут ещё вопросы, задавайте. ОГОООООО!!! я даже и не надеялся на такой ответ. Большое спасибо за такое "разжовывание" постараюсь теперь это все проглотить. Что бы все понятно было - я буду делать по-этапно. Сначала инициализирую дисплей, а потом попробыю хоть точечьку вывести(хотя я пока не знаю как). ещё раз БОЛЬШОЕ СПАСИБО!!!
|
|
|
|
|
Jan 29 2009, 13:42
|
Участник

Группа: Новичок
Сообщений: 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(); ??????? } что делать дальше? как вывести точьку, или что-нибудь еще? СПАСИБО ЗА ОТВЕТЫ!!!
|
|
|
|
|
Feb 3 2009, 08:03
|
Частый гость
 
Группа: Участник
Сообщений: 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
|
|
|
|
|
Feb 3 2009, 17:48
|
Участник

Группа: Новичок
Сообщений: 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++); Я уже заждался.  . По поводу заданных вопросов: 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. Если будут советы, то с удовольствием выслушаю
|
|
|
|
|
Feb 4 2009, 13:00
|
Частый гость
 
Группа: Участник
Сообщений: 105
Регистрация: 25-07-05
Пользователь №: 7 079

|
Цитата(Anatrulij @ Feb 3 2009, 19:48)  Как выводить изображение вроде разобрался, но проблема в настройках развертки - выводит не то что хотелось бы. В ДШ к контроллеру (как я понял) написано, что (320/16)-1 = 19 Так что я щас мучаюсь с настройкой LCD_TIMH, LCD_TIMV. Если будут советы, то с удовольствием выслушаю  Опиши что выводит и что хочется. В чём именно проблема синхронизации? и по поводу установки количества точек в линии ты прав, я не досмотрел.
|
|
|
|
|
Feb 5 2009, 06:07
|
Участник

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

|
Цитата(kovz @ Feb 4 2009, 17:00)  Опиши что выводит и что хочется. В чём именно проблема синхронизации? и по поводу установки количества точек в линии ты прав, я не досмотрел. Уже выводит куда я хочу. НО!!! Я вывожу белый квадратик на черном фоне в центре экрана, а выводит светло желтый квадратик на феолетовом. в чем может быть причина такого безобразия. Люди говорят, что дело в настройках LCD_TIMH, LCD_TIMV. Значение данных регистров я изменяю, а реакции ноль.
|
|
|
|
|
Feb 5 2009, 13:18
|
Частый гость
 
Группа: Участник
Сообщений: 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
|
|
|
|
|
Feb 5 2009, 14:44
|
Участник

Группа: Новичок
Сообщений: 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 Да, дело в настройках цвета. буду копать дальше. СПАСИБО за ответы
|
|
|
|
|
Feb 5 2009, 21:42
|
Местный
  
Группа: Свой
Сообщений: 272
Регистрация: 3-06-06
Пользователь №: 17 737

|
Цитата(Anatrulij @ Feb 5 2009, 16:44)  Да, дело в настройках цвета. буду копать дальше. СПАСИБО за ответы По поводу цвета нужно ещё смотреть какой режим включен 8 или 16 бит на цвет. Если 8 бит то нужно заполнять палитру в 256 цветов, порядковый номер из памяти будет переводиться в цвет автоматом согласно палитре.
|
|
|
|
|
Aug 11 2009, 02:25
|
Частый гость
 
Группа: Свой
Сообщений: 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; для автоматического переключения страниц?
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|