TFT 320x240 + STM32VL

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик

Сообщение КАШАК »

Доброго времени суток :)

Есть у меня вот такой дисплей:
ИзображениеИзображение

Если китайцы не врут, то в нем стоит чип SSD1289. Еще есть плата STM32VL Discovery с МК STM32F100RBT6. Хотелось бы подключить к ней дисплей, хотя бы для проверки его работоспособности. Как это сделать? Есть что-то готовое, или придется с других плат библиотеки переделывать?
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Контактная информация:
Реклама
Грызет канифоль
Сообщения: 252
Зарегистрирован: Пт апр 05, 2013 09:55:02

Сообщение kentik »

аналогичный купил. еще не приехал. китайца попросил скинуть example code. он прислал.
еще есть библиотека для работы с этими экранчиками. курить тут: http://henningkarlsen.com/electronics/library.php?id=51 (придется переделывать ибо они для ардуины)

повторю - сам еще ничего не делал. скоро начну, так что отпишись добрый человек, как дела твои идут.
Реклама
Мучитель микросхем
Аватара пользователя
Сообщения: 411
Зарегистрирован: Вс авг 10, 2008 19:35:49
Откуда: Евпатория

Сообщение s_black »

Здесь я такой дисплейчик маленько ковырял.
Контактная информация:
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик

Сообщение КАШАК »

Спасибо. :) Вообще этот дисплей должен будет работать с МК STM32F103, а у него есть аппаратная поддержка шины данных. Но пока он еще не установлен на плату, по причине того, что не получается сделать саму плату, поэтому проверку будет на ST32F100 :) При помощи ЛУТ вообще реально плату под LQFP сделать? А то что-то не получается...
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Мучитель микросхем
Аватара пользователя
Сообщения: 411
Зарегистрирован: Вс авг 10, 2008 19:35:49
Откуда: Евпатория

Сообщение s_black »

Более чем реально. И под 100-ногий корпус. Удачи, коллега!
Контактная информация:
Реклама
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик

Сообщение КАШАК »

Классно! :)) Как раз впереди куча выходных, вот и займусь этим вопросом вплотную :) А вы на чем печатали (бумага, фольга и т.п.)? Да, и SprintLayout как-то странно себя ведет на этой плате. Если смотреть в режиме редактирования, то все нормально:
ИзображениеИзображение

А если попытаться вывести на печать, то дорожки сползают:
Изображение

Из-за чего это происходит?
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Контактная информация:
Реклама
Мучитель микросхем
Аватара пользователя
Сообщения: 411
Зарегистрирован: Вс авг 10, 2008 19:35:49
Откуда: Евпатория

Сообщение s_black »

Перепробовал много вариантов... Остановился на позапрошлогоднем настенном календаре. Так вот с его мелованной бумагой проблем не возникало почти никогда. Жалко, что уже заканчивается ((( Придётся искать подобный вариант.
И позволю себе дать совет: когда будете отмывать остатки бумаги, особенно между тонкими дорожками, воспользуйтесь водным раствором 1 к 1 какого-нибудь кислотосодержащего средства (например "Сантри"). Результат офигенный! Ватным тампоном на палочке аккуратно, без усилий, снимаются все остатки бумаги и глянца.
Контактная информация:
Мучитель микросхем
Аватара пользователя
Сообщения: 411
Зарегистрирован: Вс авг 10, 2008 19:35:49
Откуда: Евпатория

Сообщение s_black »

А причину "сползания" дорожек я, к сожалению, не знаю ((( У меня подобного не было.
Контактная информация:
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик

Сообщение КАШАК »

Ясно. Буду разбираться...
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Контактная информация:
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик

Сообщение КАШАК »

Что-то никак не получается запустить дисплей, после инициализации появляется вертикальная синяя полоса и больше ничего не происходит. Заливка не работает. Что посоветуете?
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Контактная информация:
Грызет канифоль
Сообщения: 252
Зарегистрирован: Пт апр 05, 2013 09:55:02

Сообщение kentik »

покажи схему подключения. у моего экранчика меньше выводов почему-то? хотя на том же контроллере
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик

Сообщение КАШАК »

Да какая там схема, просто соединил выводы дисплея с выводами платы и все... Ушел весь порт А под D0-D15 и часть порта B под все остальное.
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Контактная информация:
Грызет канифоль
Сообщения: 252
Зарегистрирован: Пт апр 05, 2013 09:55:02

Сообщение kentik »

у меня вот такой экран:
Изображение

не понял, что за ножка VIN
так же не понимаю - интерфейс 8 битный, т.е. нужен 1 порт (8 ног) + 4 ноги для (cs + rs + wr + rst)
а у меня еще 6 ног висит фиг пойми для чего. для 16 битного интерфейса это мало.
Вложения
DSC_0338.jpg
(92.92 КБ) 3133 скачивания
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик

Сообщение КАШАК »

Так там еще SPI карты памяти и АЦП (если тач есть) выведен. А вот что за Vin непонятно. Надо даташит на него искать, там схема платы будет.

P.S.
Заработал мой дисплей :))
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Контактная информация:
Грызет канифоль
Сообщения: 252
Зарегистрирован: Пт апр 05, 2013 09:55:02

Сообщение kentik »

КАШАК писал(а): Надо даташит на него искать
нету на этот шилд даташит. китайцы вообще фигню дали.
КАШАК писал(а): Заработал мой дисплей :))
поделись кодом. будь котиком!
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик

Сообщение КАШАК »

Код вот здесь http://radiokot.ru/forum/viewtopic.php? ... 9#p1667839 Заодно и описание причины незапускания дисплея :)

Да, там где заказывал дисплей тоже даташита не было, пришлось еще несколько лотов просмотреть чтобы его найти :)
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Контактная информация:
Грызет канифоль
Сообщения: 252
Зарегистрирован: Пт апр 05, 2013 09:55:02

Сообщение kentik »

ну как-то у меня не получается разобраться с экранчиком моим. Прошу помощи коллективного разума :-)
есть шилд для ардиуны. самой ардуины нет.
фотка шилда чуть выше.
распиновка у нее такая:
Изображение
описание ног в 3-х страничном даташите:
Изображение

я подключил:
портЕ - cs / rs / wr / rst к ногам 0 / 1 / 2 / 3 соответственно
портD - d0...d7
питание 3.3 вольта, питание 5 вольт. управление с порта 5 вольт, как написано конроллер ssd1289 толерантный к 5 вольтам
управление 8-и битное.

за основу брал эту статью: http://www.embed.com.ua/komplektuyushhi ... h-320x240/
чуть исправил исходник. для меня сейчас стоит задача, что бы экран хоть что-то сделал.
Спойлер#include <mega64.h>
#include <delay.h>

#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF

#define PORT_data_L PORTD
#define DDR_data_L DDRD
#define PIN_data_L PIND
#define PORT_data_H PORTD
#define DDR_data_H DDRD
#define PIN_data_H PIND
#define PORT_command PORTC
#define DDR_command DDRC
#define PIN_command PINC


#define CS PORTC.0
#define RS PORTC.1
#define WR PORTC.2
#define RES PORTC.3

void init_PORTs_data_com (void)
{
DDR_data_L = 0xFF;//младший байт порта данных - выход
DDR_data_H = 0xFF;//старший байт порта данных - выход
PORT_data_L = 0x00;//младший
PORT_data_H = 0x00;//и старший байт данных обнуляем
DDR_command = 0xFF;//порт команд - выход
PORT_command |= (1<<CS) | (1<<RES);//
}



void write_command (unsigned char command)
{
PORT_data_L = command;//выставили команду на шину
PORT_data_H = 0x00;//
PORT_command &= ~(1<<RS);//дрыгаем
PORT_command |= (1<<WR) | (1<<CS);//ногами
PORT_command &= ~(1<<WR);//согласно
PORT_command &= ~(1<<CS);//даташита
delay_ms(10);
PORT_command |= (1<<CS);//
PORT_command |= (1<<WR);//
PORT_data_L = 0x00;//
PORT_data_H = 0x00;//
}

void write_data (unsigned int data)
{
PORT_data_L = (unsigned char)(data & 0x00FF);//выставили младший байт данных
PORT_data_H = (unsigned char)(data>>8);//старший байт данных
PORT_command |= (1<<RS);//дрыгаем
PORT_command |= (1<<WR) | (1<<CS);//ногами
PORT_command &= ~(1<<WR);//согласно
PORT_command &= ~(1<<CS);//даташита
delay_ms(10);
PORT_command |= (1<<CS);//
PORT_command |= (1<<WR);//
PORT_data_L = 0x00;//
PORT_data_H = 0x00;//
}

void init_TFT (void)
{
PORT_command &= ~(1 << RES);
delay_ms(200);
PORT_command |= (1 << RES);
delay_ms(200);

PORT_command &= ~(1 << RES);
delay_ms(200);
PORT_command |= (1 << RES);
delay_ms(200);

write_command(0x07);
write_data(0x0021);

write_command(0x00);
write_data(0x0001);

write_command(0x07);
write_data(0x0023);

write_command(0x10);
write_data(0x0000);

delay_ms(30);

write_command(0x07);
write_data(0x0033);

write_command(0x11);
write_data(0x6820);

write_command(0x02);
write_data(0x0000);

write_command(0x22);
}

void Display_Home (void)
{
write_command(0x4E);//устанавливаем счётчик адреса по Х
write_data(0x0000);//в начало, т.е. ноль
write_command(0x4F);//устанавливаем счётчик адреса по У
write_data(0x0000);//в начало, т.е. ноль

write_command(0x44);// конечный и начальный адрес по горизонтали x
write_data(0xEF00); // 239 и 0
write_command(0x45);//начальный адрес по вериткали y
write_data(0x0000); // 0
write_command(0x46);//конечный адрес по вериткали y
write_data(0x013F); // 319

write_command(0x22);
}
void display_rgb (unsigned int data)
{
unsigned int i,j;

Display_Home();
for(i=0;i<240;i++)
{
for(j=0;j<320;j++)
{
write_data(data);
}
}
}

void main(void)
{
DDRD=0xff;
DDRC=0xff;
init_PORTs_data_com();
init_TFT ();

display_rgb (WHITE);

while (1)
{
display_rgb (WHITE);
delay_ms(200);
display_rgb (RED);
delay_ms(200);
display_rgb (GREEN);
delay_ms(200);
};
};
шью. запускаю. ноль внимания. фунт презрения.
проверяю светодиодом ножки портаD - горит и не мигает. такое чувство, что просто в 1 стоит и все, точно так же как и RS
остальные (CS/WR/RST) молчат как партизаны.
Вложения
tftshield.jpg
(59.88 КБ) 2953 скачивания
tft.jpg
(84.53 КБ) 2916 скачиваний
Последний раз редактировалось kentik Вс май 05, 2013 15:05:59, всего редактировалось 5 раз.
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик

Сообщение КАШАК »

А какой в нем чип стоит? Точно SSD1289?
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Контактная информация:
Грызет канифоль
Сообщения: 252
Зарегистрирован: Пт апр 05, 2013 09:55:02

Сообщение kentik »

КАШАК писал(а):А какой в нем чип стоит? Точно SSD1289?
ну так утверждают китайцы и даташит на шилд

p.s. выше сообщение чуток подправил. упростил уж донельзя. все равно, гадина, не пашет
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик

Сообщение КАШАК »

В передаче данных явно какая-то фигня, должно быть вот так:
Спойлер

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

/******************************************************************************/
void LCD_WriteRegIndex (uint16_t RegIndex){ // отправка адреса регистра
   GPIO_ResetBits(LCD_CTRLPORT, LCD_CS); // CS=0
   GPIO_ResetBits(LCD_CTRLPORT, LCD_RS);  // RS=0
   GPIOE->ODR = RegIndex; // выставляем данные в порт
   GPIO_ResetBits(LCD_CTRLPORT, LCD_WR); // WR=0
   GPIO_SetBits(LCD_CTRLPORT, LCD_WR);    // WR=1
  return;
}
/******************************************************************************/
void LCD_WriteRegValue (uint16_t RegValue){  // отправка данных
   GPIO_ResetBits(LCD_CTRLPORT, LCD_CS); // CS=0
   GPIO_SetBits(LCD_CTRLPORT, LCD_RS);    // RS=1
   GPIOE->ODR = RegValue; // выставляем данные в порт
   GPIO_ResetBits(LCD_CTRLPORT, LCD_WR); //WR=0
   GPIO_SetBits(LCD_CTRLPORT, LCD_WR);     //WR=1
  return;
}
/******************************************************************************/
Т.е. сначала выставляем данные в порт, а потом уже дергаем WR. И интерфейс у вас 8-битный, а вы 16-битные команды шлете...

А в инициализации вот так:
Спойлер

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

 GPIO_SetBits(LCD_CTRLPORT, LCD_RESET); // RESET=1
    Delay_ms(10);
    GPIO_ResetBits(LCD_CTRLPORT, LCD_RESET); // RESET=0
    Delay_ms(30);
    GPIO_SetBits(LCD_CTRLPORT, LCD_RESET); // RESET=1
    Delay_ms(50);
    
    GPIO_SetBits(LCD_CTRLPORT, LCD_RD); // RD=1
    GPIO_SetBits(LCD_CTRLPORT, LCD_WR); // WR=1
    GPIO_SetBits(LCD_CTRLPORT, LCD_RS); // RS=1
    GPIO_ResetBits(LCD_CTRLPORT, LCD_CS); //CS=0

отправка команд...
А для инициализации достаточно вот этого:
Спойлер

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

	    // power supply setting
	    // set R07h at 0021h (GON=1,DTE=0,D[1:0]=01)
	    lcd_write(0x0007,0x0021); // адрес 0x0007, данные 0x0021
	    // set R00h at 0001h (OSCEN=1)
	    lcd_write(0x0000,0x0001);
	    // set R07h at 0023h (GON=1,DTE=0,D[1:0]=11)
	    lcd_write(0x0007,0x0023);
	    // set R10h at 0000h (Exit sleep mode)
	    lcd_write(0x0010,0x0000);
	    // Wait 30ms
	    delay_ms(30);
	    // set R07h at 0033h (GON=1,DTE=1,D[1:0]=11)
	    lcd_write(0x0007,0x0033);
	    // Entry mode setting (R11h)
	    // R11H Entry mode
	    // vsmode DFM1 DFM0 TRANS OEDef WMode DMode1 DMode0 TY1 TY0 ID1 ID0 AM LG2 LG2 LG0
	    //   0     1    1     0     0     0     0      0     0   1   1   1  *   0   0   0
	    lcd_write(0x0011,0x6058);//6078
	    // LCD driver AC setting (R02h)
	    lcd_write(0x0002,0x0600);
И на дисплей достаточно подать 5В, там свой стабилизатор есть на 3,3В. И сам микроконтроллер тоже лучше запитать от 3,3В.

P.S.
Код не мой, поделились в соседней теме http://radiokot.ru/forum/viewtopic.php? ... 6#p1668256 Но запустил свой дисплей именно с ним.
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Контактная информация:
Ответить

Вернуться в «Периферия»