Arduino и дисплеи от сотиков мобильных телефонов
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- …
- следующая ›
- последняя »
- Войдите на сайт для отправки комментариев
Сподвигнули меня на подборки дисплея разбитый шилд 3,5" для ардуино уно, и интерес запуска почти дармовых дисплеев. // странно, на шилде стабилизатор 3,3v использовался напрямую для подсветки. (тогда уж можно было запитать подсветку через резистор от 5v). Сам дисплей и микросхемы преобразователи уровней питались от 3,3v что шли с ардуины! , тогда по идее нафиг не нужен был стабилизатор на шилде.
В магазе по запчастям от сотиков http://www.la-bora.ru/categories/15 нашёл похожие дислеи 3,2" по смешной цене 39руб :) , называется "Дисплей для china iphone тип 2 " (как удалось потом запустить , забрал ещё парочку) , дисплеи поменьше, идут уже с тачем . //(потом там же куплены для опытов 3,0" 320x240 и 400x240, есть ещё много подобных дешёвых магазов www.megaopt.ru , ... ) . На шлейфе ничего не написано, неизвесто название и распиновка. Попрозванивал, примерно прикинул что где может быт, распиновка 37пин - одна из стандартных,. зелёный шилд пришлось закинуть, ибо там через микросхемы согласователи иногда лупят в дисплей 4,5v , как-то не надёжно. Подключал через резисторы 10к, в итоге питание дисплея свыше 4v ибо пересиливается через входа . В итоге пришёл к резистивным делителям 10к-22к, просто и безопасно для дисплея и ардуины.
Подключил к меге , UTFT v2.77 (в v2.79 убрана поддержка ili9320 , в связи с тем что производители шилдов не захотели башлять бабосы за использование UTFT ) . и тупо перебирал все виды дисплеев от 0 до 32 (потом пришлось DB0-DB15 перевернуть, потому как в разных распиновках поразному) , пока экран качественно не запустился на UTFT myGLCD(22,38,39,40,41); ( это CTE28) .
потом уже потратил ещё несколько дней на написание проги по считыванию ID дисплея
1 | Подключение дисплея 1602 |
// программа для определения ID контроллера дисплея, подключать все 16бит
// (эт чтоб найти старшие биты , ибо в большинстве случаев именно они используются для 8ми битного режима)
//
// в верхней строчке покажет 16 бит ответа с дисплея , начиная со старшего бита
// в нижней строчке в HEX коде старший и младший байты. (для ILI контроллеров это будет 9325, 9320, 9327,...)
// при угадывании правильного подключения шины данных дисплея должно получиться к примеру:
// 1я строчка: 1001 0011 0010 0101
// 2я строчка: 9 3 2 5 ,т.е. это контроллер ILI9325
// подсветку дисплея через ом~20-30 к +5v, питание дисплея от ардуиновских 3.3v (если надо то занизить стабилитроном
// или стабилизатором до 2.8v - т.к. иногда инициализации дисплеев приводятся для 2.8v - там константы напряжений
// для правильной работы ЖК матрицы)
//
// выводы дисплея желательно подключать через резист. делители к примеру 10к+22к , на крайняк тупо через 10к,
// но тогда на питание диспл. посадить стабилитрон 3,0-3,1v и запитывать через резист. ом~20-30 от +3,3v,
// иначе дисплей запитается через выводы и ~4-5v пересилят ардуиновские +3,3v
//
// выводы подключать стандартно UTFT на arduino mega RS(CD),WR, CS, RST
// Standard Arduino Mega/Due shield : <display model>,38, 39, 40, 41
// CTE TFT LCD/SD Shield for Arduino Mega : <display model>,38, 39, 40, 41
//
//выводы ардуино меги 22-29 к предполагаемым выводам дисплея DB8-DB15
//выводы ардуино меги 30-37 к предполагаемым выводам дисплея DB8-DB0
// и дополнительно, для получения ответа от дисплея, необходимо
// к выв. ардуино меги 42 подключить вывод RD дисплея. (по умолчанию на шилдах он кинут на +3.3v)
// Дисплей 1602, выводы VSS, VDD, RS, E, D4, D5, D6, D7
// к выводам ардуино меги GND, +5v, 13, 12, 11, 10, 9, 8
// помним на дисплее поставить резистор 3,3к между VO и VSS(+) , RW замкнуть на VSS(+), подключить A и K к VSS(+) и VDD
#include <LiquidCrystal.h>
#define CD_Pin 38 // (RS)
#define WR_Pin 39
#define CS_Pin 40
#define RST_Pin 41
#define RD_Pin 42
LiquidCrystal lcd(13, 12, 11, 10, 9, 8);
int i;
byte byteH;
byte byteL;
void setup()
{
lcd.begin(16, 2);
digitalWrite(CS_Pin, 1); // деактивация диспл. (отключение его шины данных DB0..DB15)
digitalWrite(RST_Pin, 0); // сброс дисплея
//for (i=22; i<=42;i++) { digitalWrite(i, 0); } // всё лог.0
for (i=22; i<=42;i++) { pinMode(i, OUTPUT); } // конфиг всех пинов на выход + управляющие пины
digitalWrite(RST_Pin, 1); // вывод дисплея из сброса
// запишем команду
digitalWrite(RD_Pin, 1); // уст. порта дисплея на приём (ввод данных в дисплей)
digitalWrite(CD_Pin, 0); // будем работать 0-команда 1-данные
digitalWrite(CS_Pin, 0); // выбор дисплея (активация)
PORTA=0x00; PORTC=0x00; // это команда для считывания ID дисплея =0x00
digitalWrite(WR_Pin, 1); // дёргаем WR
digitalWrite(WR_Pin, 0);
digitalWrite(CS_Pin, 1); // деактивация диспл. (отключение его шины данных DB0..DB15)
//чтение данных
DDRA=0x00; DDRC=0x00; // или for (i=22; i<=37;i++) { pinMode(i, INPUT); } // конфиг всех пинов на вход
digitalWrite(RD_Pin, 0); // уст. порта дисплея на передачу (вывод данных с дисплея)
digitalWrite(CD_Pin, 1); // будем работать с 0-команда 1-данные
digitalWrite(CS_Pin, 0); // выбор дисплея (активация )
digitalWrite(WR_Pin, 1); // дёргаем WR
digitalWrite(WR_Pin, 0);
lcd.setCursor(0, 0);
byteH=0;
if ( digitalRead(29) ) { byteH=byteH+128; lcd.print(1); } else lcd.print(0);
if ( digitalRead(28) ) { byteH=byteH+64; lcd.print(1); } else lcd.print(0);
if ( digitalRead(27) ) { byteH=byteH+32; lcd.print(1); } else lcd.print(0);
if ( digitalRead(26) ) { byteH=byteH+16; lcd.print(1); } else lcd.print(0);
if ( digitalRead(25) ) { byteH=byteH+8; lcd.print(1); } else lcd.print(0);
if ( digitalRead(24) ) { byteH=byteH+4; lcd.print(1); } else lcd.print(0);
if ( digitalRead(23) ) { byteH=byteH+2; lcd.print(1); } else lcd.print(0);
if ( digitalRead(22) ) { byteH=byteH+1; lcd.print(1); } else lcd.print(0);
byteL=0;
if ( digitalRead(30) ) { byteL=byteL+128; lcd.print(1); } else lcd.print(0);
if ( digitalRead(31) ) { byteL=byteL+64; lcd.print(1); } else lcd.print(0);
if ( digitalRead(32) ) { byteL=byteL+32; lcd.print(1); } else lcd.print(0);
if ( digitalRead(33) ) { byteL=byteL+16; lcd.print(1); } else lcd.print(0);
if ( digitalRead(34) ) { byteL=byteL+8; lcd.print(1); } else lcd.print(0);
if ( digitalRead(35) ) { byteL=byteL+4; lcd.print(1); } else lcd.print(0);
if ( digitalRead(36) ) { byteL=byteL+2; lcd.print(1); } else lcd.print(0);
if ( digitalRead(37) ) { byteL=byteL+1; lcd.print(1); } else lcd.print(0);
lcd.setCursor(0, 1);
lcd.print("ID display: ");
lcd.print(byteH, HEX);lcd.print(byteL, HEX);
digitalWrite(CS_Pin, 1); // деактивация диспл. (отключение шины данных DB0..DB15)
DDRA=0xFF; DDRC=0xFF; // или for (i=22; i<=37;i++) { pinMode(i, OUTPUT); } // конф. шины данных ARDUINO на выход
digitalWrite(RD_Pin, 1); // уст. порта дисплея на приём (ввод данных в дисплей)
//digitalWrite(RST_Pin, 1);
// вставка для UTFT
// pinMode(42, OUTPUT); // конф.ардуино для RD на выход
// digitalWrite(42, 1); // уст. RD=1 - чтобы порт дисплея был на приём (ввод данных в дисплей)
//delay(100);
}
void loop() {
// put your main code here, to run repeatedly:
}
Именно на этом шлейфе дисплея не оказалось перемычек R1 R2....(для SPI или 8 бит режима) , шлейфом железно он на 16 бит. Разве что дорожки резать, ну нафиг, буду эти дисплеи использовать на mini pro или UNO c A6 и A7, для построения графиков по входному АЦП, ног хватит. , А т.к. шина данных дисплея отключается по CS , то можно и все цифровые пины использовать.
Приобрёл также по 39-79руб 2,8"-3,0" TFT8K1465 и TFT8K1465 400x240 вроде там ili9326 и R61509V (на их шлейфах есть R1-R4 для перевода в 8 бит и SPI) , после долгих поисков нашёл много разной инициализации на них, но незнаю как их вкорячить в UTFT хотябы взамен похожих, henningkarlsen.com ответил что работает только с изготовителями шилдов или консультация за деньги.
Также можно дисплеи поискать у от FLY , там много китайчины TFT8K... . Не советую увлекатьсям долгим поиском названий, в китае много фирмочек делают дисплеи, ставят какие угодно контроллеры, разнообразные шлейфы придумывая свои названия что по ним нереально найти что либо. Можно ещё прикидывать по самим контроллерам, что примерно в шлейф от них куда идёт.
Распиновки, если надо, кину позже , как соберу их до кучи со всех компов.
!!!!!!! remark к началу темы
на август 2017 последняя верия читалки v5.3 comment-290976
01
DB08
02
DB09
03
DB10
04
DB11
05
GND
06
VDD
07
CS
08
RS
09
WR
10
RD
11
X-
12
X+
13
Y-
14
Y+
15
LED_A
16
LED_K1
17
LED_K2
18
LED_K3
19
LED_K4
20
LED_K5
21
NC
22
DB12
23
DB00
24
DB01
25
DB02
26
DB03
27
DB04
28
DB05
29
DB06
30
DB07
31
RESET
32
VDD
33
VDD
34
GND
35
DB13
36
DB14
37
DB15
Подсветка дисплея 15-20 Ом от 5v. Питание дисплея 5v через 100 Ом, стабилитрон 3.0v, кондёр 10мкф (хотя думаю на свой страх и риск можно и параллельно светодиодам подсветки запитаться, они как раз 3.0-3.3v стабилизируют , в надежде надёжных светодиодов) . Вот такая вот платка получилась не заграждающая многочисленные пины меги.
после долгих поисков нашёл много разной инициализации на них, но незнаю как их вкорячить в UTFT хотябы взамен похожих
Свяжитесь со мной по почте ers-oleg ГАВ yandex.ru Попробую помочь с UTFT, а Вы мне)
UPD: куда-то Вы пропали. skype не пользуюсь. Потому для связи почта
3.0" 400x240 8K1465 TFT8K1465FPC-A1-E TRULY-C ( nokia china 5800 , X6 ) и arduino
- следующий осиленный дисплейчик.
идёт вместе с тачем, по нулевому адресу вычитывается контроллер SPFD5420A
Распиновка 37pin :
01
NC
02
XL
03
YU
04
XR
05
YD
06
GND
07
Vdd
08
Vdd
09
NC / Frame marker
10
CS
11
RS(CD)
12
WR
13
RD
14
D0
15
D1
16
D2
17
D3
18
D4
19
D5
20
D6
21
D7
22
D8
23
D9
24
D10
25
D11
26
D12
27
D13
28
D14
29
D15
30
Reset
31
GND
32
LED_A
33
LED_K1
34
LED_K2
35
LED_K3
36
LED_K4
37
NC
Места для резисторов R1, R2, R3 выполняет какую-то непонятную функцию (R1 паралелен кондёру, R2 и R3 образуют среднюю точку), т.е. это не похоже на IM0-3 для перевода в 8бит, и SPI режим. Можно посмотреть даташит на контроллер, кому надо, где примерно должны выйти эти пины в шлейф. (похоже на 1,2,3 или 5,6 тонкие дорожки)
Лепил на базе последних IDE 1.5.8 и UTFT v.2.79
чтобы запустить этот дисплейчик на UTFT пришлось долго повозиться с его файлами для упрощенного и быстрого использования инициализаций, без их переделки с 16ти на 8H+8L. Во первых адресация к регистрам 16ти битная. В других дисплеях к примеру посылали 8ми битный адрес регистра, а затем м.б. несколько последовательно 8 (16) битные параметров для его конфигурации. В данном дисплее (и последующем) надо посылать 16ти битный адрес регистра, затем 16ти битный параметр. (и не важно как используется шина 16,8бит ,SPI 4p или SPI 5p). Во вторых другая адресация X и Y.
делал добавление 16ти битных фукций в UTFT.h , UTFT.cpp и подменой драйвера ILI9327 на разные драйвера добытые в просторах инета.
Добавка в UTFT.cpp :
01
void
UTFT::LCD_Write_COM(
char
VH,
char
VL)
// *********** добавил ****************
02
{
if
(display_transfer_mode!=1) { cbi(P_RS, B_RS); LCD_Writ_Bus(VH,VL,display_transfer_mode); }
03
else
{ LCD_Writ_Bus(0x00,VH,display_transfer_mode); LCD_Writ_Bus(0x00,VL,display_transfer_mode); }
04
}
05
06
void
UTFT::LCD_Write_COM16(
int
com16)
// *********** добавил ****************
07
{
if
(display_transfer_mode!=1) { cbi(P_RS, B_RS); LCD_Writ_Bus(com16>>8,com16,display_transfer_mode); }
08
else
{ cbi(P_RS, B_RS); LCD_Writ_Bus(0x00,com16>>8,display_transfer_mode); LCD_Writ_Bus(0x00,com16,display_transfer_mode); }
09
}
10
11
void
UTFT::LCD_Write_DATA16(
int
dat16)
// *********** добавил ****************
12
{
if
(display_transfer_mode!=1) { sbi(P_RS, B_RS); LCD_Writ_Bus(dat16>>8,dat16,display_transfer_mode); }
13
else
{ sbi(P_RS, B_RS); LCD_Writ_Bus(0x00,dat16>>8,display_transfer_mode); LCD_Writ_Bus(0x00,dat16,display_transfer_mode); }
14
}
15
16
void
UTFT::LCD_Write_COM16_DATA16(
int
com16,
int
dat16)
// *********** добавил ************
17
{
// LCD_Write_COM(com16>>8,com16); LCD_Write_DATA(dat16>>8,dat16); // на 1 сек. медленнее рисует тест
18
LCD_Write_COM16(com16); LCD_Write_DATA16(dat16);
// идентично верхней строчке
19
}
ну и соответсвенно их надо объявить в UTFT.h :
1
void
LCD_Write_COM(
char
VH,
char
VL);
2
void
LCD_Write_COM16(
int
com16);
3
void
LCD_Write_DATA16(
int
dat16);
4
void
LCD_Write_COM16_DATA16(
int
com16,
int
dat16);
Возможно что-то переборщил, ну да ладно, главное - заработало.
Одна из нескольких рабочих инициализаций initlcd.h :
01
LCD_Write_COM16_DATA16(0x0606, 0x0000);
// Pin Control (R606h)
02
delay(50);
03
LCD_Write_COM16_DATA16(0x0007, 0x0001);
// Display Control 1 (R007h)
04
delay(50);
05
LCD_Write_COM16_DATA16(0x0110, 0x0001);
// Power Control 6(R110h)
06
delay(50);
07
LCD_Write_COM16_DATA16(0x0100, 0x17B0);
// Power Control 1 (R100h)
08
LCD_Write_COM16_DATA16(0x0101, 0x0147);
// Power Control 2 (R101h)
09
LCD_Write_COM16_DATA16(0x0102, 0x019D);
// Power Control 3 (R102h)
10
LCD_Write_COM16_DATA16(0x0103, 0x3600);
// Power Control 4 (R103h)
11
LCD_Write_COM16_DATA16(0x0281, 0x0010);
// NVM read data 2 (R281h)
12
delay(50);
13
LCD_Write_COM16_DATA16(0x0102, 0x01BD);
// Power Control 3 (R102h)
14
delay(50);
15
16
//--------------- Power control 1~6 ---------------//
17
LCD_Write_COM16_DATA16(0x0100, 0x16B0);
// Power Control 1 (R100h)
18
LCD_Write_COM16_DATA16(0x0101, 0x0147);
// Power Control 2 (R101h)
19
LCD_Write_COM16_DATA16(0x0102, 0x01BD);
// Power Control 3 (R102h)
20
LCD_Write_COM16_DATA16(0x0103, 0x2d00);
// Power Control 4 (R103h)
21
LCD_Write_COM16_DATA16(0x0107, 0x0000);
// Power Control 5 (R107h)
22
LCD_Write_COM16_DATA16(0x0110, 0x0001);
// Power Control 6(R110h)
23
LCD_Write_COM16_DATA16(0x0280, 0x0000);
// NVM read data 1 (R280h)
24
LCD_Write_COM16_DATA16(0x0281, 0x0006);
// NVM read data 2 (R281h)
25
LCD_Write_COM16_DATA16(0x0282, 0x0000);
// NVM read data 3 (R282h)
26
27
//------- Gamma 2.2 control (R300h to R30Fh) ------//
28
LCD_Write_COM16_DATA16(0x0300, 0X0101);
29
LCD_Write_COM16_DATA16(0x0301, 0x0bB7);
30
LCD_Write_COM16_DATA16(0x0302, 0x132A);
31
LCD_Write_COM16_DATA16(0x0303, 0x2A13);
32
LCD_Write_COM16_DATA16(0x0304, 0x270B);
33
LCD_Write_COM16_DATA16(0x0305, 0x0101);
34
LCD_Write_COM16_DATA16(0x0306, 0x1205);
35
LCD_Write_COM16_DATA16(0x0307, 0x0512);
36
LCD_Write_COM16_DATA16(0x0308, 0X0005);
37
LCD_Write_COM16_DATA16(0x0309, 0x0003);
38
LCD_Write_COM16_DATA16(0x030A, 0X0F04);
39
LCD_Write_COM16_DATA16(0x030B, 0x0F00);
40
LCD_Write_COM16_DATA16(0x030C, 0x000F);
41
LCD_Write_COM16_DATA16(0x030D, 0x040F);
42
LCD_Write_COM16_DATA16(0x030E, 0x0300);
43
LCD_Write_COM16_DATA16(0x030F, 0x0500);
44
/*** secorrect gamma2 ***/
45
LCD_Write_COM16_DATA16(0x0400, 0x3500);
// Base Image Number of Line (R400h)
46
LCD_Write_COM16_DATA16(0x0401, 0x0001);
// Base Image Display Control (R401h)
47
LCD_Write_COM16_DATA16(0x0404, 0x0000);
// Based Image Vertical Scroll Control (R404h)
48
49
//--------------- Normal set ---------------//
50
LCD_Write_COM16_DATA16(0x0000, 0x0000);
// ID Read Register (R000h)
51
LCD_Write_COM16_DATA16(0x0001, 0x0100);
// Driver Output Control Register (R001h)
52
LCD_Write_COM16_DATA16(0x0002, 0x0100);
// LCD Driving Waveform Control (R002h)
53
LCD_Write_COM16_DATA16(0x0003, 0x1030);
// Entry Mode (R003h) // ,0x1288); /*up:0x1288 down:0x12B8 left:0x1290 right:0x12A0*/
54
LCD_Write_COM16_DATA16(0x0006, 0x0000);
// Display Control 1 (R007h)
55
LCD_Write_COM16_DATA16(0x0008, 0x0808);
// Display Control 2 (R008h)
56
LCD_Write_COM16_DATA16(0x0009, 0x0001);
// Display Control 3 (R009h)
57
LCD_Write_COM16_DATA16(0x000B, 0x0010);
// Low Power Control (R00Bh)
58
LCD_Write_COM16_DATA16(0x000C, 0X0000);
// External Display Interface Control 1 (R00Ch)
59
LCD_Write_COM16_DATA16(0x000F, 0X0000);
// External Display Interface Control 2 (R00Fh)
60
61
LCD_Write_COM16_DATA16(0x0007, 0X0001);
// Display Control 1 (R007h)
62
63
//--------------- Panel interface control 1~6 ---------------//
64
LCD_Write_COM16_DATA16(0x0010, 0x0012);
// Panel Interface Control 1 (R010h)
65
LCD_Write_COM16_DATA16(0x0011, 0x0202);
// Panel Interface Control 2 (R011h)
66
LCD_Write_COM16_DATA16(0x0012, 0x0300);
// Panel Interface control 3 (R012h)
67
LCD_Write_COM16_DATA16(0x0020, 0x021E);
// Panel Interface control 4 (R020h)
68
LCD_Write_COM16_DATA16(0x0021, 0x0202);
// Panel Interface Control 5 (021Rh)
69
LCD_Write_COM16_DATA16(0x0022, 0x0100);
// Panel Interface Control 6 (R022h)
70
LCD_Write_COM16_DATA16(0x0090, 0x8000);
// Frame Marker Control (R090h)
71
LCD_Write_COM16_DATA16(0x0092, 0x0000);
/*MDDI Sub-display Control */
// add from init i-hardware
72
73
//--------------- Partial display ---------------//
74
LCD_Write_COM16_DATA16(0x0210, 0x0000);
// Window Horizontal RAM Address Start (R210h)
75
LCD_Write_COM16_DATA16(0x0211, 0x00EF);
// Window Horziontal RAM Address End (R211h)
76
LCD_Write_COM16_DATA16(0x0212, 0x0000);
// Window Vertical RAM Address Start (R212h)
77
LCD_Write_COM16_DATA16(0x0213, 0x018F);
// Window Vertical RAM Address End (R213h)
78
LCD_Write_COM16_DATA16(0x0500, 0X0000);
// Display Position - Partial Display 1 (R500h)
79
LCD_Write_COM16_DATA16(0x0501, 0X0000);
// RAM Address Start - Partial Display 1 (R501h)
80
LCD_Write_COM16_DATA16(0x0502, 0X0000);
// RAM Address End - Partail Display 1 (R502h)
81
LCD_Write_COM16_DATA16(0x0503, 0x0000);
// Display Position - Partial Display 2 (R503h)
82
LCD_Write_COM16_DATA16(0x0504, 0x0000);
// RAM Address Start ? Partial Display 2 (R504h)
83
LCD_Write_COM16_DATA16(0x0505, 0x0000);
// RAM Address End ? Partial Display 2 (R505h)
84
LCD_Write_COM16_DATA16(0x0606, 0x0000);
// Pin Control (R606h)
85
LCD_Write_COM16_DATA16(0x06F0, 0X0000);
// NVM Access Control (R6F0h)
86
87
//--------------- Display on --------------------//
88
LCD_Write_COM16_DATA16(0x0007, 0x0173);
// Display Control 1 (R007h)
89
delay(50);
90
LCD_Write_COM16_DATA16(0x0007, 0x0171);
// Display Control 1 (R007h)
91
delay(10);
92
LCD_Write_COM16_DATA16(0x0007, 0x0173);
// Display Control 1 (R007h)
01
// SPFD5420A
02
LCD_Write_COM16_DATA16(0x0200,x1);
// GRAM Address Set (Horizontal Address) (R20h)
03
LCD_Write_COM16_DATA16(0x0201,y1);
// GRAM Address Set (Vertical Address) (R21h)
04
05
LCD_Write_COM16_DATA16(0x0210,x1);
// Window Horizontal RAM Address Start (R210h)
06
LCD_Write_COM16_DATA16(0x0212,y1);
// Window Vertical RAM Address Start (R212h)
07
LCD_Write_COM16_DATA16(0x0211,x2);
// Window Horziontal RAM Address End (R211h)
08
LCD_Write_COM16_DATA16(0x0213,y2);
// Window Vertical RAM Address End (R213h)
09
10
LCD_Write_COM16(0x0202);
3.0" 400x240 8K1465 TFT8K1465FPC-A1-E TRULY-C ( nokia china 5800 , X6 ) и arduino
М О Л О Д Е Ц!!!
Каков размер активной области экрана?
Это и есть активный (примерно 3,0" . точнее я бы сказал 2,9" , диагональ всего дисплея около 3,5" ).
инет говорит о аналогах F30NCX-11_V1.0, FPC-FTM300D03Z-00, BX FPC 30003 , CT028WQT001 V1
//для первого дисплея аналоги подправил выше
К примеру у зелёного шилда 3,5" (точнее я бы сказал 3,4" активная, диагональ всего около 3,8" ).
Дисплейчик 400x240 8K1463 TFT8K1463FPC-A1-E TRULY-C (ili9326) -позиционизируется как 2,8" (точнее я бы сказал 2,75 , диагональ всего дисплея около 3,3" ).
Возможно позже расположу опыты и инфу на него, он смог переключиться в 8ми битный режим, перестановкой перемычки R1 R2 на шлейфе. Шёл без тачскрина. ппереваривает инициализации от spfd5420a
//так уж завелось , что на ebay и aliexpress дисплеи пишутся в дюймах активной области а не в мм. По поиску названий дисплеев в инете многие магазы указывают внешний размер дисплея. На aliexpress зачастую выкладывают картинки и PDF с точными размерами и распиновкой.
(разм. внешние - вместе с белой удерживающей рамкой, с её ушками)
!!!!!!! remark к началу темы
на март 2021 :
варианты подключения LVDS , MIPI , RGB дисплеев (и др. также не имеющих своей видеопамяти):
#102 , #211 , #234 , #764 , #1804 , ( #529 - #553 , #753 ) , с видеоплатой,тогда tv-out #663 , #2736 , почему не получиться с LVDS #2980 - #2984 , RGB #3198 - #3200 ,
макетные платы :
#178 ,
как надо фотографировать шлейфы дисплеев (чтобы чётко прослеживалась каждая дорожка на общем плане) :
#160 , #163 , #594 , #1385 , #1386 , #3408 ( и как не надо #607 , #881 , #889 , #1045 , #1074 , #1159 , #1354 , #2741 ) ,
Варианты минимизаций поделок на дисплеях:
#15 , #40 , #53 , #930 #936 ,
Подключение 8/16ти битных по SPI :
#162 , #878 #884 (но надо было Reset на отдельный пин) , #3362 ( список 7ми! проверенных библиотек ) ,
Большой размерчик :
5.6" #2022 -... , 5" 480x272 #2468 , общее #2709 , 5.6" #3033-...
640x360 #265 - #269
800x480 #2611 #2612 ,
Необычные экземпляры:
без деталей на шлейфе #511 #2458 #2664,
Описание даташита дисплея на русском, с русскими картинками, на примере ILI9325
http://microsin.net/programming/avr/tft-lcd-controller-ili9325.html
8/16 бит библиотеки
#3408
SPI библиотеки
#3362
я имел ввиду в мм)) Не люблю эти дюймы..
а может кто то подскажет как подключить к ардуинке дисплей от нокии 3510?
а может кто то подскажет как подключить к ардуинке дисплей от нокии 3510?
а может для начала спросить у яндекса или гугл ? " дисплей nokia avr " " дисплей nokia atmega " " дисплей nokia arduino " и не надо здесь спамить, и засирать ветку. И если только нигде нет инфы, то попробовать самому исследовать и выложить здесь. Есть более большие дисплеи nokia чем ваш , и по "копеечной" цене.
Тут выкладываю то, что готового не нашёл в инете после долгих поисков. Что собрал в одно, исследовал, разжевал .
ух, сколько злости. ладно схема подключения есть, но раз ты такой умный то покажи где взять библиотеку для данного дисплея под ардуину? и то ч то есть куча дешовых дисплеев еще не значит что они у меня есть, хочу попробовать подключить то что есть.
slider, скажите пожалуйста, а что вы думаете относительно 7" дисплеев 800х480 от электронных книг. На свалке в Юлмарте можно купить книгу с TFT за смешные деньги? У меня, кстати, пришел из Китая треснутый дисплей на 3.5" , китайцы выслали замену, а можно переходник от него подружить с таким дисплеем - чисто теоретически? Или может чего в Питере поискать, в магазине по вашей ссылке смотрел, конкретно таких как ваш уже нет.
7" экраны новые находил там за 700руб, да и у самого с электронных валяется. На сколько я знаю, в 7" экране нет видео ОЗУ (т.е. там тупо RGB мутиплексор), поэтому ему обязательно нужна плата с контроллером, к примеру на распространённой SSD1963. + микросхемки питания. Теоретически можно, но соединять это всё вместе врят ли получиться дешевле китайцев.
У Лаборы, оказывается склад в Омске, поэтому самое большое кол-во было там. Дисплеев у них было по 1-3шт. поэтому позаканчивались. Можно под заказ, но говорят это уже после нов.года. Вообще маркировок дисплеев огромное количество, контроллеры зачастую часто встречающиеся, распиновки в большинстве случаев стандартные, особенно для 37 пин. Можно почти любой приляпать. На зелёный шилд уже прилепил дисплейчик 400x240 взамен также треснутого при транспортировке, в след. посте черкну. (чтобы не трескались в пути, у китайцев надо 2 и больше заказывать, они в картонной коробке тогда шлют, заранее с ними ещё можно обговорить) .
Благодарю за ответ. У меня плата красная. А треснул (скорее всего) из-за неправильной упаковки. Перетянули сильно вдоль упаковочной лентой (был слегка даже изогнут, при этом малые стороны были без умягчителя). И в самолете от мороза его и крякнуло. Я, кстати, еще выписал малину попробовать. Там на плате разъемчик под дисплей - может туда 7" сгодится. А то я уж Ритмикс за 320 р. купил. Не удержался.
3. третий распознанный дисплейчик, купленный почти даром, за 29руб
2,8" 400x240 8K1463 TFT8K1463FPC-A1-E TRULY-C (ILI9326) , china mobile K599
распиновка как у предыдущего
01
NC / ID display - тупо делитель напр. R3 R4 , чтоб контроллер знал о наличии какого дисплея
02
XL
03
YU
04
XR
05
YD
06
GND
07
Vdd
08
Vdd
09
NC / Frame marker
10
CS
11
RS(CD)
12
WR
13
RD
14
D0
15
D1
16
D2
17
D3
18
D4
19
D5
20
D6
21
D7
22
D8
23
D9
24
D10
25
D11
26
D12
27
D13
28
D14
29
D15
30
Reset
31
GND
32
LED_A
33
LED_K1
34
LED_K2
35
LED_K3
36
LED_K4
37
NC
По нулевому адресу вычитывается 9326 .Порывшись в инете нашёл несколько инициализаций, адаптировал с UTFT , приложил в архив, на случай если кто озаботиться подбором лучшей для коррекции цветов, яркости, или мож быстрым выводом на экран. На шлейфе переставил резистор с места R2 на R1, и дисплейчик переключился на 8 бит (используются грубо говоря с DB9-DB15). Вкорячил на известный зелёный шилд. Напряжение питания 3,3в оказалось аж 3,7в ( прёт в дисплей через микросхемы согласователей уровней, они в свою очередь и поднимают их питающее +3,3в из-за 5ти вольтовых уровней с ардуины) Добавил параллельно +3,3в стабилитрон на 3,0в, питающее снизилось до 3,5в.
После правки (спасибо разработчикам Notepad++, удобная замена Wordpad-у ) библиотеки UTFT (т.к. в ILI9326 16ти битная адресация к регистрам), и инициализаций всё запустилось . Для зелёного шилда брал за основу UTFT_v2.77b2_uno_ili9327_8bit_turbo (спасибо PhOSTU ), т.к. там уже лишнее удалено , и переделан вывод на дисплей через 2-9 цифровые пины , а не 0-7(для быстрой прямой записи в порт) как в стандарте UTFT. Что конечно замедляет скорость вывода на экран, но зато высвобождает аппаратные RХ TX .
Сделанные 4ре поправки в v.2.77b2 (можно примерно также и в любой версии UTFT):
1. в UTFT.h добавлено рядом с подобными функциями
1
// функция для 16ти битнной адресации к регистрам + передача 16ти битных данных
2
void
LCD_Write_COM16_DATA16(
int
com16,
int
dat16);
3
void
LCD_Write_COM16(
int
com16);
2.в UTFT.cpp добавлено рядом с подобными функциями (для 8битной передачи , а для 16ти передавать надо через 2 порта, как в примере выше)
01
// функция для 16ти битнной адресации к регистрам + передача 16ти битных данных
02
void
UTFT::LCD_Write_COM16_DATA16(
int
com16,
int
dat16)
// *********** добавил ************
03
{
04
cbi(P_RS, B_RS);
// передаём команду в дисплей
05
LCD_Writ_Bus(com16>>8);
06
LCD_Writ_Bus(com16);
07
sbi(P_RS, B_RS);
// предаём данные в дисплей
08
LCD_Writ_Bus(dat16>>8);
09
LCD_Writ_Bus(dat16);
10
}
11
12
void
UTFT::LCD_Write_COM16(
int
com16)
// *********** добавил ****************
13
{
14
cbi(P_RS, B_RS);
15
LCD_Writ_Bus(com16>>8);
16
LCD_Writ_Bus(com16);
17
}
01
// ILI9326 init variant №2
02
//-------------- Start Initial Sequence ----------------//
03
LCD_Write_COM16_DATA16(0x0702, 0x3008);
// Set internal timing, don’t change this value
04
LCD_Write_COM16_DATA16(0x0705, 0x0036);
// Set internal timing, don’t change this value
05
LCD_Write_COM16_DATA16(0x070B, 0x1213);
// Set internal timing, don’t change this value
06
LCD_Write_COM16_DATA16(0x0001, 0x0100);
// set SS and SM bit
07
LCD_Write_COM16_DATA16(0x0002, 0x0100);
// set 1 line inversion
08
LCD_Write_COM16_DATA16(0x0003, 0x1030);
// set GRAM write direction and BGR=1. Поворот 0x1030-0град., 0x1028-90гр., 0x1000-180гр., 0x1018-270гр
09
LCD_Write_COM16_DATA16(0x0008, 0x0202);
// set the back porch and front porch
10
LCD_Write_COM16_DATA16(0x0009, 0x0000);
// set non-display area refresh cycle ISC[3:0]
11
LCD_Write_COM16_DATA16(0x000C, 0x0000);
// RGB interface setting
12
LCD_Write_COM16_DATA16(0x000F, 0x0000);
// RGB interface polarity
13
14
//---------------Power On sequence ----------------//
15
LCD_Write_COM16_DATA16(0x0100, 0x0000);
// SAP, BT[3:0], AP, DSTB, SLP, STB
16
LCD_Write_COM16_DATA16(0x0102, 0x0000);
// VREG1OUT voltage
17
LCD_Write_COM16_DATA16(0x0103, 0x0000);
// VDV[4:0] for VCOM amplitude
18
delay(200);
// Dis-charge capacitor power voltage
19
LCD_Write_COM16_DATA16(0x0100, 0x1190);
// SAP, BT[3:0], AP, DSTB, SLP, STB 1290 1190
20
LCD_Write_COM16_DATA16(0x0101, 0x0127);
// DC1[2:0], DC0[2:0], VC[2:0]
21
delay(50);
// Delay 50ms
22
LCD_Write_COM16_DATA16(0x0102, 0x01B8);
// VREG1OUT voltage 001C 01B8
23
delay(50);
// Delay 50ms
24
LCD_Write_COM16_DATA16(0x0103, 0x3A00);
// VDV[4:0] for VCOM amplitude 1800 3A00
25
LCD_Write_COM16_DATA16(0x0281, 0x0006);
// VCM[5:0] for VCOMH 0030 0006
26
delay(50);
27
LCD_Write_COM16_DATA16(0x0200, 0x0000);
// GRAM horizontal Address
28
LCD_Write_COM16_DATA16(0x0201, 0x0000);
// GRAM Vertical Address
29
30
// ----------- Adjust the Gamma Curve ----------//
31
LCD_Write_COM16_DATA16(0x0300, 0x0000);
32
LCD_Write_COM16_DATA16(0x0301, 0x0506);
33
LCD_Write_COM16_DATA16(0x0302, 0x0405);
34
LCD_Write_COM16_DATA16(0x0305, 0x0007);
35
LCD_Write_COM16_DATA16(0x0306, 0x0008);
36
LCD_Write_COM16_DATA16(0x0307, 0x0203);
37
LCD_Write_COM16_DATA16(0x0308, 0x0102);
38
LCD_Write_COM16_DATA16(0x0309, 0x0707);
39
LCD_Write_COM16_DATA16(0x030C, 0x0700);
40
LCD_Write_COM16_DATA16(0x030D, 0x0008);
41
42
//------------------ Set GRAM area ---------------//
43
LCD_Write_COM16_DATA16(0x0210, 0x0000);
// Horizontal GRAM Start Address
44
LCD_Write_COM16_DATA16(0x0211, 0x00EF);
// Horizontal GRAM End Address // 240пикселей
45
LCD_Write_COM16_DATA16(0x0212, 0x0000);
// Vertical GRAM Start Address
46
LCD_Write_COM16_DATA16(0x0213, 0x018F);
// Vertical GRAM Start Address // 18F-400пикселей 1AF-432пикс
47
LCD_Write_COM16_DATA16(0x0400, 0x3500);
// Gate Scan Line
48
LCD_Write_COM16_DATA16(0x0401, 0x0001);
// NDL,VLE, REV
49
LCD_Write_COM16_DATA16(0x0404, 0x0000);
// set scrolling line
50
51
//-------------- Partial Display Control ---------//
52
LCD_Write_COM16_DATA16(0x0500, 0x0000);
//Partial Image 1 Display Position
53
LCD_Write_COM16_DATA16(0x0501, 0x0000);
//Partial Image 1 RAM Start/End Address
54
LCD_Write_COM16_DATA16(0x0502, 0x0000);
//Partial Image 1 RAM Start/End Address
55
LCD_Write_COM16_DATA16(0x00503, 0x0000);
//Partial Image 2 Display Position
56
LCD_Write_COM16_DATA16(0x00504, 0x0000);
//Partial Image 2 RAM Start/End Address
57
LCD_Write_COM16_DATA16(0x00505, 0x0000);
//Partial Image 2 RAM Start/End Address
58
59
//-------------- Panel Control -------------------//
60
LCD_Write_COM16_DATA16(0x0010, 0x0010);
//DIVI[1:0];RTNI[4:0]
61
LCD_Write_COM16_DATA16(0x0011, 0x0600);
//NOWI[2:0];SDTI[2:0]
62
LCD_Write_COM16_DATA16(0x0020, 0x0002);
//DIVE[1:0];RTNE[5:0]0110 0002
63
LCD_Write_COM16_DATA16(0x0007, 0x0173);
// 262K color and display ON
01
// ILI9326
02
LCD_Write_COM16_DATA16(0x0200,x1);
// GRAM Address Set (Horizontal Address) (R0200h)
03
LCD_Write_COM16_DATA16(0x0201,y1);
// GRAM Address Set (Vertical Address) (R0201h)
04
05
LCD_Write_COM16_DATA16(0x0210,x1);
// Window Horizontal RAM Address Start (R210h)
06
LCD_Write_COM16_DATA16(0x0212,y1);
// Window Vertical RAM Address Start (R212h)
07
LCD_Write_COM16_DATA16(0x0211,x2);
// Window Horziontal RAM Address End (R211h)
08
LCD_Write_COM16_DATA16(0x0213,y2);
// Window Vertical RAM Address End (R213h)
09
10
LCD_Write_COM16(0x0202);
(зачем правда такая тавтология x1 y1 , мож в других инициализациях от неё можно избавиться? а то тест - 51сек )
В UTFT.cpp , в функции инициализации портов добавил ещё
1
pinMode(A0,OUTPUT);
2
digitalWrite(A0, HIGH);
т.к. вывел вывод RD с дисплея, согласно шилду. на RD надо подать лог.1, при передаче данных в экран. Если хотите что прочитать с дисплея, к примеру ID, то лог.0. В большинстве ардуиновских шилдов он не выводится на общий разъём, дабы не тратить пин, и на самом шилде он замкнут на 3,3в.
Вызывать скетч также как для зелёного шилда в UTFT2.77b : Файл-Образцы-UTFT-Arduino(AVR)-UTFT_Demo_400x240 , по умолчанию там уже стоит UTFT myGLCD(31,A2,A1,A3,A4); .
Вот и заработало на зелёном шилде:
Архив с найденными инициализациями ILI9326 по инету: https://yadi.sk/d/7YDCfi14ddJhC , с переделками их под UTFT 2.79, даташиты ili9326 и данный опыт - уже заточенная UTFT2.77c - если заменить на зелёном шилде ili9327 на ili9326 (используемая IDE1.5.8).
p.s. к StrangerM, ссылку подредактировал (почему-то пробел в конце неё затисался)
Ссылка не работает.
№4
3,2" 400x240 R14037150 FPC8578A-V0 T320S04A-FPC-V1 ( HX8352 HX8352A ) 45pin , china phone
распиновка подошла от R61581 TFT LCD screen 320*480 45pin , BTL353248-L472L
(pinout нашел на aliexpress перебирая поиски 400x240 , 240x400 , 45pin . http://www.wayengineer.com/35-r61581-tft-lcd-screen-320480-super-bright-hd-45pin-p-7636.html#.VK4RLNKsU0E , тамже у них можно много распиновок подсмотреть)
по нулевому адресу вычитывается 0x52 , что характерно для HX8352A (пины DB0-DB17 для 16бит используются DB0-15, для 8бит - DB0-DB7 , замечу что у других контроллеров бывает совершенно по другому используются пины DB0-DB17в разных режимах)
При проверке на UTFT получилась инверсия цветов tft lcd - синус рисуется на белом фоне вместо черного , (видимо поляризационная плёнка повёрнута), решил изучив даташит HX8352A, выключил бит INVON в 0x01 регистре . (в initlcd.h поправил
1
LCD_Write_COM(0x01);
2
LCD_Write_DATA(0x02);
// было DATA(0x06);
Потом исправил неправильную цветопередачу, устанавливается выводами IM0-IM3 (цветность 65К 262K + битность шины контроллера) . Для 16 бит сразу неудалось бодиться правильной цветопередачи, поэтому переключил на 8бит для своего устройства, для этого подавал на IM0,IM1,IM2 соответственно лог. 0,0,1 . На RD лог 0. Далее питание, подсветка, шина данных и управляющие вывода res, wr, dc(rs), cs . остальные нетрогаются.
Шлейф не быстро тяп-ляп паябелен - но оказывается аккуратно возможно, раъемов на шаг 0,3mm 45pin не нашлось ( FH26-45S-0.3SHW ). :
Выводы управления кидал на ближайшие цифровые пины ардуино, в UTFT 2.79 получилась строчка инициализазии myGLCD(8,9,10,8,11); , и пришлось ещё в UTFT.cpp подправить (т.к. для HX8352A нет там 8 битного режима)
1
byte
dtm[] = {16, 16, 16, 8, 8, 16, 8, SERIAL_4PIN, 8, SERIAL_5PIN, SERIAL_5PIN, .....
, было byte dtm[] = {16, 16, 16, 8, 8, 16, 8, SERIAL_4PIN, 16, SERIAL_5PIN, SERIAL_5PIN,
Вот такой вот тонкий девайс получился - 8мм , и если б ещё не большой кварц на arduino mini pro,...но купился на большой стабилизатор LM1117 5v , типа он может работать до 15в, не как обычный маленький до 12в. :
Ну и конечная цель - даталоггер для АКБ в солнечной электростанции: (чтобы быстро на глаз оценить поднималось ли напр. до 14,4в-14,7в, и не опускалось ли оно ниже 12,5в -12,2в. Верхний график 1пиксель=1секунде. На втором и третьем графиках в виде вертикальных линий - минимумы и максимумы за определённое время. Система хоть и 24вольтовая, но изображение 12в для удобства восприятия. питание 24в через DC-DC LM2596 -> 7.5в , аналог вход 24в через делитель и подстроечник)
// удалось ещё увеличить скорость в UTFT закоментировав строки в setxy.h
01
case
HX8352A:
02
// LCD_Write_COM_DATA(0x02,x1>>8); //
03
LCD_Write_COM_DATA(0x03,x1);
04
// LCD_Write_COM_DATA(0x04,x2>>8); //
05
LCD_Write_COM_DATA(0x05,x2);
06
07
LCD_Write_COM_DATA(0x06,y1>>8);
08
LCD_Write_COM_DATA(0x07,y1);
09
// LCD_Write_COM_DATA(0x08,y2>>8); //
10
// LCD_Write_COM_DATA(0x09,y2); //
11
LCD_Write_COM(0x22);
12
break
;
Так дисплейчик очень понравился - максимальные углы обзора, без нарушения градаций яркости цветов. Очень яркий и красочный.
№5 (продолжу по дисплеям с таким разрешением, хотя уже разобрался и с несколькими 320x240)
3,2" 400x240 FPC8722 FPC8722A-V2-A ( HX8352B ) 47pin , Fly E151
инет находит ещё аналогии: дисплей Fly E171 E134
много времени потратил на его распознание, (амеры в TRULY говорят: обращайтесь к своему дистрибьютору; китайцы говорят: сначала купите у нас такие дисплеи , только тогда мы скажем что у них внутри за контроллер и распиновка, - это условие завода, информацию продавцы могут предоставить только по тем дисплеям, которые у них есть на продаже). Короче, методом научного тыка вычитывалось по нулевому адресу id display 0x67 0x65 (шина данных до 18 бит)
с таким подобным названием контроллеров небывает. Помогло перечитывание подобных даташитов. Оказывается не всегда id соответствует названию:
id 0x52 - HX8352A max 480x240
id 0x65 - HX8352B max 432x240
id 0x72 - HX8352C max 432x240
и инициализации оказывается нужны все разные. (инициализацию спросил у продавца на али, который торговал дисплеем на HX8352B)
hx8352b initial code :
001
void
HX8352B_Init_CMO32_MPU (F3204)(
void
)
002
{
003
RST=0;
004
delay(20);
005
RST=1;
006
delay(20);
007
008
//HX8352B FOR CMO3.2(Pd032MNML-0403)
009
010
//V03----2011.6.7/PengWu
011
//1ЎўРЮёД E2-EF јДґжЖч
012
//2ЎўјхµНVCOMHµзС№Ј¬јхµЙ«°Я
013
014
WriteLCDCmd(0xE2, 0x15);
//VREFsetting
015
WriteLCDCmd(0xE5, 0x18);
016
WriteLCDCmd(0xE7, 0x18);
017
WriteLCDCmd(0xE8, 0x40);
018
WriteLCDCmd(0xEC, 0x09);
019
WriteLCDCmd(0xED, 0x06);
020
WriteLCDCmd(0xEE, 0x20);
021
WriteLCDCmd(0xEF, 0x50);
022
WriteLCDCmd(0x29, 0x01);
023
WriteLCDCmd(0x2B, 0x03);
024
WriteLCDCmd(0x2E, 0x85);
025
026
027
// Power on Setting
028
WriteLCDCmd(0x23, 0x75);
//0x79
029
WriteLCDCmd(0x24, 0x50);
// 0x50 јУЙо¶Ф±И¶И
030
WriteLCDCmd(0x25, 0x71);
031
WriteLCDCmd(0x1B, 0x1E);
//VREG1 = 4.5V
032
WriteLCDCmd(0x01, 0x00);
033
WriteLCDCmd(0x1C, 0x04);
034
035
// Power on sequence
036
WriteLCDCmd(0x18, 0xdd);
//
037
WriteLCDCmd(0x19, 0x01);
038
delay(5);
039
WriteLCDCmd(0x1F, 0x8C);
040
WriteLCDCmd(0x1F, 0x84);
041
delay(10);
042
WriteLCDCmd(0x1F, 0x94);
043
delay(10);
044
WriteLCDCmd(0x1F, 0xD4);
045
delay(5);
046
047
// Gamma Setting
048
WriteLCDCmd(0x40, 0x08);
049
WriteLCDCmd(0x41, 0x31);
050
WriteLCDCmd(0x42, 0x2F);
051
WriteLCDCmd(0x43, 0x3E);
052
WriteLCDCmd(0x44, 0x3D);
053
WriteLCDCmd(0x45, 0x3F);
054
WriteLCDCmd(0x46, 0x2F);
055
WriteLCDCmd(0x47, 0x79);
056
WriteLCDCmd(0x48, 0x08);
057
WriteLCDCmd(0x49, 0x06);
058
WriteLCDCmd(0x4A, 0x08);
059
WriteLCDCmd(0x4B, 0x0E);
060
WriteLCDCmd(0x4C, 0x17);
061
062
063
WriteLCDCmd(0x50, 0x00);
064
WriteLCDCmd(0x51, 0x02);
065
WriteLCDCmd(0x52, 0x01);
066
WriteLCDCmd(0x53, 0x10);
067
WriteLCDCmd(0x54, 0x0E);
068
WriteLCDCmd(0x55, 0x37);
069
WriteLCDCmd(0x56, 0x06);
070
WriteLCDCmd(0x57, 0x50);
071
WriteLCDCmd(0x58, 0x08);
072
WriteLCDCmd(0x59, 0x11);
073
WriteLCDCmd(0x5A, 0x17);
074
WriteLCDCmd(0x5B, 0x19);
075
WriteLCDCmd(0x5C, 0x17);
076
WriteLCDCmd(0x5D, 0xFF);
077
078
// Display ON Setting
079
WriteLCDCmd(0x60, 0x00);
//FMARK 18ЈєOPEN
080
WriteLCDCmd(0x16,0x0b);
081
WriteLCDCmd(0x17, 0x05);
082
WriteLCDCmd(0x36, 0x00);
083
WriteLCDCmd(0x28, 0x20);
084
delay(40);
085
WriteLCDCmd(0x28, 0x38);
086
delay(40);
// Waiting 2 frames al least
087
WriteLCDCmd(0x28, 0x3C);
//
088
//vcom_debug(1);
089
090
091
}
092
093
void
BlockWrite(unsigned Xstart,unsigned Xend,unsigned Ystart,unsigned Yend)
094
{
095
comm_out(0x02);data_out(Xstart>>8);
096
comm_out(0x03);data_out(Xstart);
//Column Start
097
comm_out(0x04);data_out(Xend>>8);
098
comm_out(0x05);data_out(Xend);
//Column End
099
100
comm_out(0x06);data_out(Ystart>>8);
101
comm_out(0x07);data_out(Ystart);
//Row Start
102
comm_out(0x08);data_out(Yend>>8);
103
comm_out(0x09);data_out(Yend);
//Row End
104
105
comm_out(0x80);data_out(Xstart>>8);
106
comm_out(0x81);data_out(Xstart);
//Column Start
107
comm_out(0x82);data_out(Ystart>>8);
108
comm_out(0x83);data_out(Ystart);
//Row Start
109
110
comm_out(0x22);
111
}
112
void
HX8352B_INTO_STB_MPU (
void
)
113
{
114
// Display Off
115
comm_out(0x24);data_out(0x3C);
116
comm_out(0x24);data_out(0x38);
117
delay (40);
//Waiting 2 frames at least.
118
comm_out(0x24);data_out(0x20);
119
// Power Off
120
comm_out(0x1F);data_out(0x94);
//VCOMG=0
121
delay(10);
122
comm_out(0x1F);data_out(0x84);
//PON=0
123
delay(10);
124
comm_out(0x1F);data_out(0x8C);
//DK=1
125
// Into STB mode
126
comm_out(0x1F);data_out(0x8D);
//STB=1
127
delay(10);
128
// Stop Oscillation
129
comm_out(0x19);data_out(0x00);
//OSC_EN=0
130
}
131
132
void
HX8352B_EXIT_STB_MPU (
void
)
133
{
134
// Start Oscillation
135
comm_out(0x19);data_out(0x01);
//OSC_EN=1
136
delay(10);
137
// Exit STB mode
138
comm_out(0x1F);data_out(0x8C);
//STB=0
139
// Power on sequence
140
comm_out(0x19);data_out(0x01);
141
delay(5);
142
comm_out(0x1F);data_out(0x8C);
143
comm_out(0x1F);data_out(0x84);
144
delay(10);
145
comm_out(0x1F);data_out(0x94);
146
delay(10);
147
comm_out(0x1F);data_out(0xD4);
148
delay(5);
149
// Display ON Setting
150
comm_out(0x16);data_out(0x09);
151
comm_out(0x28);data_out(0x20);
152
comm_out(0x28);data_out(0x38);
153
delay(40);
// Waiting 2 frames al least
154
comm_out(0x28);data_out(0x3C);
155
}
Распиновка нашлась в схеме на телефон (так что если брендовый телефон, ищите схемы ... schematic ... service manual):
DNC_SCL - это RS (DC)
IFSEL0 - никуда не подключать, он сам немного притянут к земле. По умолчанию в контроллере при 16ти используются DB17-10 и DB8-1 , в 8ми используются старшие DB17-10 (как и в большинстве контроллеров при переключении на 8 бит используются старшие биты, что также и сделано в UTFT, что не надо перепаивать провода при переключении режимов). Если же подать лог.1 то в 16ти битном режиме из DB17-0 будут использоваться DB15-0 , в 8ми битном режиме младшие DB7-0 ). В любых случаях неиспользуемые DB в z-состоянии.
BS0-2 - установка режима, соответственно: 010-16бит, 110-8бит
другие управляющие вывода просто не трогал:
A4,A5 оставил на случай подключения I2C микросхемы времени
Углы обзора по горизонтали у него не ахти.
Вот переделка UTFT 2.79 https://yadi.sk/d/JxBCuJ70e8SUF (в memorysaver оставлен только HX8352A , в UTFT заменена битность с 16 на 8 byte dtm[] = {16, 16, 16, 8, 8, 16, 8, SERIAL_4PIN, 8,.... , драйвер HX8352A заменен на HX8352B и закоментировано в нем лишнее, в примере для UNO UTFT_Demo_400x240 заменена строчка инициализации на UTFT myGLCD(8,A0,A1,A2,A3); ).
№6 ( удалось подключить от fly e185, аналогичен e151 , только распиновка другая )
3,2" 400x240 TFT8K6653 TFT8K6653FPC-A1-E ( HX8352B ) 46pin , Fly E185
инет находит ещё похожее: ELD03210030F ELD03210060F TFT8K3373 TFT8K3373FPC-A1-E дисплей Fly E190
DCX - это RS
8,9,32-35 никуда не подключал.
IM2-0 соответственно 010-16бит , 110-8бит
Шаг пинов меньше чем у E151, и на подсветке стоит 4 светодиода , а не 5 как у Е151. (и заметил странность при опытах, на выход с дисплея TE подал лог.1 , так дисплей ярче стал показывать)
у тебя не было проблемы с дисплеями от сотиков когда все пашет, но иногда 1-2 пикселя рисуются не там где положено и со временем на экране собираются левые точки, которые висят пока их не очистишь принудительно?
были битые пиксели (зеленая полоска из нескольких штук) - светятся сразу после инициализации, естественно не убираются ничем.
По твоему описанию похоже где-то косяк:
1. в проводах(длинные провода, наводки, паразитная ёмкость - следы флюса, резисторы попробовать уменьшить до 10к или ещё меньше),
2. в пульсациях питания, или какойто вывод питания не был запитан (запитывался через входа, но потом всё равно давал сбои, пока на + не повесил)
3. в быстрой скорости вывода (попробовать задержки поставить на управляющие сигналы. Было что на шлейфе стояли кондёры паралленьно некоторым управляющим сигналам, так через резисторы 20К фронты и спады импульсов они затягивали, снёс со шлейфа эти кондёры - всё заработало)
4. в почти использованной оперативе (свыше 89% по подсчётам IDE 1.5.8) , у меня было. что видимо подгружались ещё буквы библиотеки UTFT, что вызывало неучтённое переполнение оперативы, её наслоение саму на себя, в итоге график не там где надо, или его вообще отсутствие, приходилось урезать массивы и оптимизировать их, от каких-то отказываться, после чего программа стала выполняться корректно.
5. где-то всё же программа лишние вырисовывает, особенно если работаешь с прерываниями. (Было из прерывания иногда не вылазиет (прерывание в прерывании), т.к. иногда аномально долго рисует в нём линию из пары пикселей библиотеки UTFT, заметил это по аномальным длительным вспыхиваниям светодиодов повешанных параллельно управляющим сигналам на дисплей, - они не успевали потухнуть до следующего прерывания) Либо искать косяк в UTFT, убирать всё неиспользуемое. либо делать на основе библиотек от производителей шилдов, заменив только инициализацию и рисование пикселя под свой дисплей. Замечал это что им надо меньшее количество обращений к регистрам, чем UTFT. В UTFT иногда при добавлении нового дисплея, приходилось добавлять ещё записи в несколько регистров в setxy.h (иначе рисует криво, со смещением и с пропусками), когда библиотеки от производителя без этого излишества обходятся - что значительно увеличивает скорость прорисовки.
задержки уже вставлял куда можно не помогает, на ссд1289 с таким сталкивался, задержки помогали, а тут никак. При непрерывном обновлении раз в несколько минут по пикселю вылазит левому. Экран вот такой http://www.aliexpress.com/item/3-2-TFT-Color-Screen-Module-320-x480-LCD-Screen-Support-For-Mega2560-1PCS/32262376109.html
Добрый день!
Можете мне помочь? Есть дисплей от принтера Кенон, если не ошибаюсь МХ240. Но я не знаю как его подключить, и не имею понятия какой там контроллер. Пробовал писать в сервисный центр кенон, с просьбой дать хоть какую-то инфу по дисплею, но в ответе отказали.
Надписи на шлейфе:
055
7381
C8DC31MCABB
AH2BF6964C98
Всего 22 контакта. Могу только с уверенностью сказать что 1 контакт идет на землю. Фото выложу чуть позже, так как пишу с телефона.
Доброго времени суток! Cлучайно не знаете, какой контроллер в дисплее, на шлейфе которого написано DW666 (DW666BFG)?
Может Вы имели ввиду WD666BFG??? Поиск выдал:
LCD for China-Sony Ericsson X10 Cell Phone, (44 pin, (92*52)) #FPC-S95588-AAA-1 V01/WD666BFG/R14532036/R14532034C/FPC-YE3601A3-A/FPC-XY036WQ01
и
Куплю LCD дисплей на тел. CRTEL Xperia X10 WiFi Маркировка:WD666BFG. Или аналог:FPC-S95588-AAA-1 или TFT025-FPC-B или RX-35-HX-025 или TFT8K3456FPC-A1-E или R14532036.
Ищите инфу про аналоги. Думаю контроллеры в них одинаковые
Все нормально, там 100% ILI9327, вычитал его ID.
Всем привет!
Имеется Дисплей от китайского телефона A7100, 4".
Надпись на шлейфе: hifay 15-12396-0794-1
Надпись на дисплее:
13-24081-0794-1
QZ2305BB 2013 4 12
Помогите определить что за контроллер стоит на дисплее и какая распиновка.
forfrends,
1. берешь мультиметр и прозваниваешь где у тебя на дисплее "-" (часто замыкается с экраном шлейфа, с многими кондёрами) и "+" обычно широкие дорожки
2. рисуешь примерную распиновку, вначале шлейфа у тебя (по фоткам "-",LEDA,K1-K8) светодиоды , потом 16 бит данных, затем шина управления .
3. набираешь в гугле типа lcd screen 39 pin , lcd tft 39 pin , 39 lcd screen , переходишь на вкладки картинки , и подбираешь похожую распиновку. или открываешь все ссылки подряд и смотришь, иногда на алиэкспресс приводят распиновки и типы контроллеров. чего сложного то?
4. подключаешь к меге через резисторы 10ком, вычитываешь по нулевому адресу какой у тебя контроллер, или тупо подбираешь инициализации UTFT от 1 до 31 (для версии 2.79 и если комментировал какие контроллеры, раскоментируй)
5. вуаля, пользуешь рабочий большой диссплей для своего проекта. Пишешь сюда для народа найденную распиновку и контроллер.
PS вот ещё сайтец хороший, где много распиновок, документаций, кодов инициализаций можно подсмотреть http://www.wayengineer.com/
помогает ещё на таобао по найденному названию на шлейфе, просматривать картинки и названия чтоб найти ещё аналогов.
slider, спасибо за очень хорошую инструкцию! Буду пробовать, только это будет очень не скоро. Вычитывать регистр программой из 1-го поста? Попробую в ней разобраться. Надеюсь что-то получится! Как только будут результаты - сразу выложу суда отчет + фото :)
№7
3,0" 320x240 TFT8K1304 8K1304 KFM529B21 529B21 ( ILI9320 ) 37pin tft lcd
подсветка 4 светодиода . Распиновка на фото , шлейфы у дисплеев немного разные , но распиновка таже, на одном имеется тачскрин.
как обычно зарисовываем схему шлейфа, чтоб найти его возможности и аналогии с распиновками:
Распиновка 1-37pin [DB0-3,GND,VCC,CS,RS,WR,RD,nc,XR,YD,XL,YU,A,K1-4,nc,DB4-15,RESET,VCC,VCC,GND,DB5-7]
Опытным путём проверено, на левом чтоб переключить на 8 бит надо закоротить j1 . На правом переставить перемычку с R1 на R2 .
Вот такой шилд получился:
тачскин подключен напрямую ибо его сопротивление около 300 ом. Питание от ардуиновских +3,3в , и чтоб ардуиновские лог1 5в не пересилили его через 10ком резисторы(т.к. дисплей очень мизерно потребляет), то питание зашунтировано стабилитроном +3,3в. Подсветка от +5в через токоограничивающий резистор. Разъем D8-D13.. немного изогнут, чтоб влазить в ардуинку.
Использована старая библиотека UTFT 2.77 (в новых уже убрали поддержку ILI9320 из-за финансовых несогласий)
Тачскриновскую можно взять от adafruit https://yadi.sk/d/JblWoo7biBW6N , там есть 2 примера тача, координаты кидаются в монитор последовательного порта . Вот с их сайта на 07.2015 библиотеки которые могут пригодиться https://yadi.sk/d/WmKaB8maiCURv демо рисовалка поддерживает контроллеры ILI9325 ILI9328 HX8347G ILI9341 HX8357D , и ещё сообщает ID контроллера в монитор последовательного порта, так что ей можно определять что у вас за контроллер в дисплее.
Написал библиотеку понятную для себя, делов то , вертикаль и горизонталь, то на одну линию на концы подать 0 и 1 , у второй портом подтянуть внутренним высокомным резистором и считать уровень напряжения , если оно по прежнему подтянуто к 5в - значит нажатия нет, если меньше в правильных пределах - то нажатие есть. и для второй координаты также.
Т.к. тачи бывают немного косячные, если нет контакта ( просто нажать через скользкую бумагу в место крепления шлейфа на стекле, паяльником, и подержать давлением без него, дать остыть) , а бывает что он прожат в середине или углу (если запустить рисовалку, то видать где точки стремяться оказаться при слабом нажатии)
То для точности пробывал (правда снижает скорость программы) , замерять к примеру 20 раз в массив, во втором массиве пересчитывается , сколько каждое измерение раз встречается - потом ищется макслимальная встречаемость - верить ей. Да , точность колоссальная. Но всё равно без задержки перед появивщемся нажатии, через 0,1 сек дожатии , это даст ошибку. Так что более простое и умеренно точное определение будет - отслеживать нажатие, появилось, подождать 50-100мс чтобы палец дожал, потом и определять. если не отпущено после измерения, то измерениям - верить как достоверным!
Приветствую!
Мне достался вот такой дисплей
3,5" TFT Touch 69.03A23.T01
Был снят с неисправного принтера HP M425, разрешение предположительно 400х320
Разъем 50 контактный, первые 6 контактов похоже на подсветку и тач.
Вместе с дисплеем еще была плата с контроллером тач кнопок CY8C20546A-24PVXI, из этой платы шел на основной контроллер уже 26 контактный шлейф.
С чего начать, как разобраться с дисплеем?
Из контроллеров имеется только ардуина 2560
Мануал я кажется нашел :)
http://www.display-solution.com/pdf/tft-displays/AUO/AUO_A035QN05V1_2011...
если у A035QN02 V3 54пина и он RGB "Interfaces: parallel RGB 18-bit" ( там тупо мультиплексор, без видео ОЗУ (интегрированная видеокарта - выражаясь языком компьютерщика) ) , то что говорить о вашем похожем в 50 пинов. Такие почти никто и не приспособил (разве что под черно-белое маленькое), слишком много надо видеопамяти и ресурсов для всей цветности. Можете посмотреть в сторону чипа SSD1963 , ну или не тратить этот дисплей время.
Для "правильных" дисплеев характерно много рассыпухи на шлейфах. Фотки выше.
Мне дисплей пригодился бы как монитор консоли 3D принтера.
Он должен слушать последовательный порт и выводить текущую информацию. Ну и передавать в принтер тоже.
Готовые решения есть, но не дешево, и интересно самому попробовать сделать :)
Добавлю, чтоб было, продублирую в нескольких темах.
Наткнулся при поиске на китайский ресурс, облачный диск человека, тогрующего дисплейными модулями на Таобао.
Там куча информации по дисплеям, библиотеки под разные контроллеры, в том числе большинство под Arduino, примеры, даташиты, схемы, фото распиновок и т.д.
а адресом на таобао чела не поделишься?
ХЗ, наткнулся случайно, брел по этому пути, какая то из ссылок привела на нужный мне ресурс:
http://www.mcufriend.com/
http://www.mcufriend.com/download.htm
https://shop33501813.world.taobao.com/category-450786554.htm?spm=a312a.7...
slider, дай, пожалуйста более четкую распиновку из поста 28:
3,0" 320x240 TFT8K1304 8K1304 KFM529B21 529B21 ( ILI9320 ) 37pin tft lcd, а то не очень видно что там на бумаге...
slider, дай, пожалуйста более четкую распиновку из поста 28:
3,0" 320x240 TFT8K1304 8K1304 KFM529B21 529B21 ( ILI9320 ) 37pin tft lcd, а то не очень видно что там на бумаге...
этот сайт очень урезает размер и соответственно качество фото. Я ж под фоткой там написал
1-37pin [DB0-3,GND,VCC,CS,RS,WR,RD,nc,XR,YD,XL,YU,A,K1-4,nc,DB4-15,RESET,VCC,VCC,GND,DB5-7]
это поочереди с 1 пина по 37. nc значит no connect (неподключается, неиспользуется). Это одна из стандартных распиновок для 37контактных дисплеев.
Уважаемый SLIDER! имеется дисплей марки с39363-a474 , 10 выводов идут на плату телефона , DECT телефон SIEMENS. (это конечно, не такие сложные дисплеи, с которыми Вы разбираетесь) , просьба помочь с подключением к Ардуино (распиновка разъема, библиотека). Если Вас это, конечно, не затруднит. В интернете никакой информации не нашел. Или подскажите алгоритм работы с неизвестным дисплеем, полагаю, это заинтересует форумчан. Заранее благодарен
дисплея такого нет у меня. Совет закиньте его. Есть цветные изученные дисплеи от сименс и нокиа, последних в магазинах полно и дёшевы они (~100руб), еще у знакомых своих поспрашайте всяко валяются сломанные без дела. их за нефиг дело подключить. достаточно поискать в инете arduino nokia , arduino siemens .
Благодарю,за совет, но поковыряюсь самостоятельно)) если что получится, отпишусь
001
// HX8352C-GPIO-emWin/src/HX8352C_GPIO.c
002
// <a href="https://github.com/baoshi/HX8352C-GPIO-emWin/blob/master/src/HX8352C_GPIO.c" rel="nofollow">https://github.com/baoshi/HX8352C-GPIO-emWin/blob/master/src/HX8352C_GPIO.c</a>
003
004
/**
005
******************************************************************************
006
* @file HX8352C_GPIO.c
007
* @author Baoshi
008
* @version 0.2
009
* @date 8-Dec-2013
010
* @brief GPIO 16-bit interface for HX8352C LCD controller
011
******************************************************************************
012
* @copyright
013
* This code is licensed under (CC BY-SA 3.0), available at:
014
*
015
* <a href="http://creativecommons.org/licenses/by-sa/3.0/" rel="nofollow">http://creativecommons.org/licenses/by-sa/3.0/</a>
016
*
017
* THIS SOFTWARE IS PROVIDED 'AS-IS', WITHOUT ANY EXPRESS OR IMPLIED
018
* WARRANTY. IN NO EVENT WILL THE AUTHORS BE HELD LIABLE FOR ANY DAMAGES
019
* ARISING FROM THE USE OF THIS SOFTWARE.
020
*
021
* @note The idea behind GPIO LCD interface and ARM assembly implementation
022
* is originated by Andy Brown and his excellent stm32plus library.
023
* Please visit Andy's Workshop at: <a href="http://andybrown.me.uk/" rel="nofollow">http://andybrown.me.uk/</a> \n
024
* Please note I have no intention to prompt my work by using Andy's
025
* name and stm32plus library.
026
******************************************************************************
027
*/
028
029
#include <stddef.h>
030
#include <stm32f10x.h>
031
#include "HX8352C.h"
032
033
034
/*===========================================================================*/
035
/* Defines */
036
/*===========================================================================*/
037
038
039
// LCD 16-bit data bus GPIOB
040
// Reset GPIOC.4
041
// RS GPIOC.5
042
// WR GPIOC.6
043
// RD GPIOC.7
044
// CS Wired to GND
045
046
/** \brief GPIOx_BASE of the port connected to LCD data bus. Must be constant for correct timing. */
047
const
uint32_t LCD_Data_GPIOx_BASE = GPIOB_BASE;
048
/** \brief GPIOx_BASE of the port connected to LCD control lines. Must be constant for correct timing. */
049
const
uint32_t LCD_Ctrl_GPIOx_BASE = GPIOC_BASE;
050
/** \brief GPIO_Pin_x of the LCD Reset pin. */
051
const
uint16_t LCD_RST_Pin = GPIO_Pin_4;
052
/** \brief GPIO_Pin_x of the LCD RS pin. Must be constant for correct timing. */
053
const
uint16_t LCD_RS_Pin = GPIO_Pin_5;
054
/** \brief GPIO_Pin_x of the LCD Reset pin. Must be constant for correct timing. */
055
const
uint16_t LCD_WR_Pin = GPIO_Pin_6;
056
/** \brief GPIO_Pin_x of the LCD Reset pin. Must be constant for correct timing. */
057
const
uint16_t LCD_RD_Pin = GPIO_Pin_7;
058
059
060
/*===========================================================================*/
061
/* Static Functions */
062
/*===========================================================================*/
063
064
065
// An external delay_ms() function is needed. We pluck it from emWin
066
extern
void
GUI_Delay(
int
Period);
067
#define _DelayMS GUI_Delay
068
069
070
/**
071
* @brief Configure GPIO port
072
*/
073
static
void
_ConfigPort(
void
)
074
{
075
GPIO_InitTypeDef gpioInit;
076
077
// Enable GPIO clock
078
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC, ENABLE);
079
// Turn on the clock for the alternate function register (must be done before disable JTAG)
080
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
081
// Disable JTAG interface to free up PB3 and PB4
082
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
083
084
// TFT Back Light
085
//GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
086
//GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
087
//GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
088
//GPIO_Init(GPIOB, &GPIO_InitStructure);
089
090
// Control lines
091
gpioInit.GPIO_Pin = LCD_RST_Pin | LCD_RS_Pin | LCD_WR_Pin | LCD_RD_Pin;
092
gpioInit.GPIO_Mode = GPIO_Mode_Out_PP;
093
gpioInit.GPIO_Speed = GPIO_Speed_50MHz;
094
GPIO_Init((GPIO_TypeDef *)LCD_Ctrl_GPIOx_BASE, &gpioInit);
095
096
// Data bus
097
gpioInit.GPIO_Speed = GPIO_Speed_10MHz;
098
gpioInit.GPIO_Mode = GPIO_Mode_Out_PP;
099
gpioInit.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7
100
| GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
101
GPIO_Init((GPIO_TypeDef *)LCD_Data_GPIOx_BASE, &gpioInit);
102
103
// Initialize control bits
104
//GPIO_SetBits(GPIOB, GPIO_Pin_0 ); // Back LIGHT
105
GPIO_SetBits((GPIO_TypeDef *)LCD_Ctrl_GPIOx_BASE, LCD_RST_Pin);
// RST = 1
106
GPIO_SetBits((GPIO_TypeDef *)LCD_Ctrl_GPIOx_BASE, LCD_RD_Pin);
// RD = 1
107
GPIO_SetBits((GPIO_TypeDef *)LCD_Ctrl_GPIOx_BASE, LCD_WR_Pin);
// WR = 1
108
}
109
110
111
/*===========================================================================*/
112
/* Public Functions */
113
/*===========================================================================*/
114
115
116
/**
117
* @brief Reset LCD Controller
118
*/
119
void
lcdReset(
void
)
120
{
121
GPIO_ResetBits((GPIO_TypeDef *)LCD_Ctrl_GPIOx_BASE, LCD_RST_Pin);
// Pull RESET low
122
_DelayMS(1);
// 10us is enough
123
GPIO_SetBits((GPIO_TypeDef *)LCD_Ctrl_GPIOx_BASE, LCD_RST_Pin);
// RESET high
124
_DelayMS(120);
// Long enough reset during STB Out mode
125
}
126
127
128
/**
129
* @brief Initialize GPIO ports and LCD controller
130
*/
131
void
lcdInit(
void
)
132
{
133
// Configure ports, etc
134
_ConfigPort();
135
// Pulse LCD RESET
136
lcdReset();
137
// Begin HX8352C initialization sequence
138
// Power Voltage Setting
139
lcdWriteReg(0x001A); lcdWriteData(0x0004);
// BT[2:0]=100, VCL=-VCI; VGH=VCI+2DDVDH; VGL=-2DDVDH
140
lcdWriteReg(0x001B); lcdWriteData(0x008C);
// VCIRE=1; VRH[4:0]=0Ch, VREG1=(2.5v*1.9)=4.75V
141
// VCOM offset
142
lcdWriteReg(0x0023); lcdWriteData(0x0000);
// SELVCM=0, R24h and R25h selects VCOM
143
lcdWriteReg(0x0024); lcdWriteData(0x0040);
// VCM[6:0]=1000000, VCOMH voltage=VREG1*0.748 (originally 5F)
144
lcdWriteReg(0x0025); lcdWriteData(0x000F);
// VDV[4:0]=01111, VCOMH amplitude=VREG*1.00
145
lcdWriteReg(0x002D); lcdWriteData(0x0006);
// NOW[2:0]=110, Gate output non-overlap period = 6 clocks
146
GUI_Delay(20);
147
// Power on Setting
148
lcdWriteReg(0x0018); lcdWriteData(0x0007);
// RADJ[3:0]=0111, Display frame rate 60Hz
149
lcdWriteReg(0x0019); lcdWriteData(0x0001);
// OSC_EN=1, start OSC
150
lcdWriteReg(0x001C); lcdWriteData(0x0006);
// AP[2:0]=110, High OPAMP current (default 011)
151
lcdWriteReg(0x0001); lcdWriteData(0x0000);
// DSTB=0, out deep sleep
152
lcdWriteReg(0x001F); lcdWriteData(0x0088);
// STB=0
153
GUI_Delay(5);
154
lcdWriteReg(0x001F); lcdWriteData(0x0080);
// DK=0
155
GUI_Delay(5);
156
lcdWriteReg(0x001F); lcdWriteData(0x0090);
// PON=1
157
GUI_Delay(5);
158
lcdWriteReg(0x001F); lcdWriteData(0x00D0);
// VCOMG=1
159
GUI_Delay(5);
160
lcdWriteReg(0x0017); lcdWriteData(0x0005);
// IFPF[2:0]=101, 16-bit/pixel
161
// Panel Configuration
162
lcdWriteReg(0x0036); lcdWriteData(0x0011);
// REV_PANEL=1, SM_PANEL=1, GS_PANEL=1, SS_PANEL=1
163
//lcdWriteReg(0x0029); lcdWriteData(0x0031); // NL[5:0]=110001, 400 lines
164
//lcdWriteReg(0x0071); lcdWriteData(0x001A); // RTN0
165
//Gamma 2.2 Setting
166
lcdWriteReg(0x0040); lcdWriteData(0x0000);
167
lcdWriteReg(0x0041); lcdWriteData(0x0045);
168
lcdWriteReg(0x0042); lcdWriteData(0x0045);
169
lcdWriteReg(0x0043); lcdWriteData(0x0004);
170
lcdWriteReg(0x0044); lcdWriteData(0x0000);
171
lcdWriteReg(0x0045); lcdWriteData(0x0008);
172
lcdWriteReg(0x0046); lcdWriteData(0x0023);
173
lcdWriteReg(0x0047); lcdWriteData(0x0023);
174
lcdWriteReg(0x0048); lcdWriteData(0x0077);
175
lcdWriteReg(0x0049); lcdWriteData(0x0040);
176
lcdWriteReg(0x004A); lcdWriteData(0x0004);
177
lcdWriteReg(0x004B); lcdWriteData(0x0000);
178
lcdWriteReg(0x004C); lcdWriteData(0x0088);
179
lcdWriteReg(0x004D); lcdWriteData(0x0088);
180
lcdWriteReg(0x004E); lcdWriteData(0x0088);
181
}
182
183
184
/**
185
* @brief Execute LCD power on sequence and turn on backlight
186
*/
187
void
lcdOn(
void
)
188
{
189
lcdWriteReg(0x0028); lcdWriteData(0x0038);
//GON=1; DTE=1; D[1:0]=10
190
_DelayMS(40);
191
lcdWriteReg(0x0028); lcdWriteData(0x003C);
//GON=1; DTE=1; D[1:0]=11
192
// TODO: Turn on backlight
193
}
194
195
196
/**
197
* @brief Execute LCD power off sequence and turn off backlight
198
*/
199
void
lcdOff(
void
)
200
{
201
// TODO: Turn off backlight
202
lcdWriteReg(0x0028); lcdWriteData(0x0038);
//GON=1; DTE=1; D[1:0]=10
203
_DelayMS(40);
204
lcdWriteReg(0x0028); lcdWriteData(0x0030);
//GON=1; DTE=1; D[1:0]=00
205
}
01
case
HX8352A:
02
03
// HX8352C initialization
04
05
// Power Voltage Setting
06
LCD_Write_COM_DATA(0x1A,0x04);
// BT[2:0]=100, VCL=-VCI; VGH=VCI+2DDVDH; VGL=-2DDVDH
07
LCD_Write_COM_DATA(0x1B,0x8C);
// VCIRE=1; VRH[4:0]=0Ch, VREG1=(2.5v*1.9)=4.75V
08
// VCOM offset
09
LCD_Write_COM_DATA(0x23,0x00);
// SELVCM=0, R24h and R25h selects VCOM
10
LCD_Write_COM_DATA(0x24,0x40);
// VCM[6:0]=1000000, VCOMH voltage=VREG1*0.748 (originally 5F)
11
LCD_Write_COM_DATA(0x25,0x0F);
// VDV[4:0]=01111, VCOMH amplitude=VREG*1.00
12
LCD_Write_COM_DATA(0x2D,0x06);
// NOW[2:0]=110, Gate output non-overlap period = 6 clocks
13
delay(20);
14
// Power on Setting
15
// попробуем избежать добавление в скетч +80 для сдвига картинки для
16
/*
17
LCD_Write_COM_DATA(0x0B,0x50); // R0Ah-R0Bh Partial area start
18
LCD_Write_COM_DATA(0x03,0x50); // так на всяк случай
19
LCD_Write_COM_DATA(0x01,0x01); // PLTON
20
// безтолку
21
*/
22
23
// LCD_Write_COM_DATA(0x16,0b00000000); // MY,MX,MV,ML(239or431) , BGR,000 // чтобы перевернуть верх и низ, и еще отзеркалить, надо 0b01000000 , ML=1 почемуто не позволил с комбинциями переворачиваний и зеркал , сдвинуть экран с 400 к 320
24
25
LCD_Write_COM_DATA(0x18,0x07);
// RADJ[3:0]=0111=0x07, Display frame rate 60Hz
26
LCD_Write_COM_DATA(0x19,0x01);
// OSC_EN=1, start OSC
27
LCD_Write_COM_DATA(0x1C,0x06);
// AP[2:0]=110, High OPAMP current (default 011)
28
LCD_Write_COM_DATA(0x01,0x00);
// DSTB=0, out deep sleep
29
LCD_Write_COM_DATA(0x1F,0x88);
// STB=0
30
delay(5);
31
LCD_Write_COM_DATA(0x1F,0x80);
// DK=0
32
delay(5);
33
LCD_Write_COM_DATA(0x1F,0x90);
// PON=1
34
delay(5);
35
LCD_Write_COM_DATA(0x1F,0xD0);
// VCOMG=1
36
delay(5);
37
LCD_Write_COM_DATA(0x17,0x05);
// IFPF[2:0]=101, 16-bit/pixel
38
39
// Panel Configuration
40
41
// безтолку
42
/*
43
LCD_Write_COM_DATA(0x02,0x50); // +80пикс
44
LCD_Write_COM_DATA(0x03,0x00);
45
LCD_Write_COM_DATA(0x04,0x00); //
46
LCD_Write_COM_DATA(0x05,0xEF); //
47
LCD_Write_COM_DATA(0x80,0x00);
48
LCD_Write_COM_DATA(0x81,0x50); //+80пикс
49
LCD_Write_COM_DATA(0x82,0x01); //
50
LCD_Write_COM_DATA(0x83,0xAF); //
51
*/
52
53
LCD_Write_COM_DATA(0x36,0b00001001);
// REV_PANEL=1, SM_PANEL=1, GS_PANEL=1, SS_PANEL=1
54
// хотя было 0x11 , поставил 0b00001001 SM_PANEL=1-перевернул и отзеркалил , SS_PANEL=1-сделал правильную цветопередачу
55
56
LCD_Write_COM_DATA(0x29,0x27);
// NL[5:0]=110001, было 400 lines (399=110001xxx=0x31) // тогда 320 линий это 319-> 100111xxx =0x27
57
// смена с 400 линий на 320 почемуто не позволило с комбинциями переворачиваний и зеркал , сдвинуть экран с 400 к 320
58
59
// LCD_Write_COM_DATA(0x2A,0x0F); // типа задание старта сканирования, но с ним и с активацией в других регистрах - нифига
60
61
//LCD_Write_COM_DATA(0x71,0x1A); // RTN0 Frame control register
62
//Gamma 2.2 Setting
63
LCD_Write_COM_DATA(0x40,0x00);
64
LCD_Write_COM_DATA(0x41,0x45);
65
LCD_Write_COM_DATA(0x42,0x45);
66
LCD_Write_COM_DATA(0x43,0x04);
67
LCD_Write_COM_DATA(0x44,0x00);
68
LCD_Write_COM_DATA(0x45,0x08);
69
LCD_Write_COM_DATA(0x46,0x23);
70
LCD_Write_COM_DATA(0x47,0x23);
71
LCD_Write_COM_DATA(0x48,0x77);
72
LCD_Write_COM_DATA(0x49,0x40);
73
LCD_Write_COM_DATA(0x4A,0x04);
74
LCD_Write_COM_DATA(0x4B,0x00);
75
LCD_Write_COM_DATA(0x4C,0x88);
76
LCD_Write_COM_DATA(0x4D,0x88);
77
LCD_Write_COM_DATA(0x4E,0x88);
78
79
LCD_Write_COM_DATA(0x28,0x38);
//GON=1; DTE=1; D[1:0]=10
80
delay(40);
81
LCD_Write_COM_DATA(0x28,0x3C);
//GON=1; DTE=1; D[1:0]=11
82
// TODO: Turn on backlight
83
84
LCD_Write_COM(0x22);
85
break
;
01
case
HX8352A:
02
// подменен на 320x240 HX8352C
03
// работает без этого:
04
// закомент ускоряет тест 8bit HX8352C UTFT c 48,8сек до 41,9сек
05
// LCD_Write_COM_DATA(0x02,x1>>8); //
06
LCD_Write_COM_DATA(0x03,x1);
07
// LCD_Write_COM_DATA(0x04,x2>>8); //
08
LCD_Write_COM_DATA(0x05,x2);
09
10
LCD_Write_COM_DATA(0x06,y1>>8);
11
LCD_Write_COM_DATA(0x07,y1);
12
// LCD_Write_COM_DATA(0x08,y2>>8); //
13
// LCD_Write_COM_DATA(0x09,y2); //
14
15
LCD_Write_COM(0x22);
16
break
;
Обьясни пожалуйста человеку далекому от програмирования. У меня такая же история со сдвигом картинки, дисплей TFT_320qvt_9341 Arduino Mega 2560 (китай). У себя в примерах строку myGLCD.print("START", ) я не нашел. Куда мне ее вписать ? Спасибо.
Обьясни пожалуйста человеку далекому от програмирования. У меня такая же история со сдвигом картинки, дисплей TFT_320qvt_9341 Arduino Mega 2560 (китай). У себя в примерах строку myGLCD.print("START", ) я не нашел. Куда мне ее вписать ? Спасибо.
Это же просто строка из скетча. На примере так сказать. Что проще оказалось в скетче везде подобавлять(подписать) к координатам Х +80 . Это решение универсальное, ну и для попавшегося контроллера и матрицы дисплея. В других случаях проще помагало просто немного изменить инициализацию , не исправляя весь скетч. Для этого надо вам изучить PDF к контроллеру, и посмотреть какие регистры ответственны за сдвиг картинки.
Чтоб не загаживать тему, и т.к. здесь отсутствует личка, можете, написать на емайл segun . яндekc.ру . Раз у вас есть тема http://arduino.ru/forum/apparatnye-voprosy/tekst-na-tft320qvt-vverkh-nogami то можно уже в неё, по умолчанию оповещение приходит всем ответившим. Собственно можете и не заморачиваться, а отписаться в ней как получилось с простым сдвигом +80, в вашем примере.
.
прочитайте внимательно тему, я приводил методы поиска. можно было ещё прозвонить какие кондёры имеют разветвлённые дорожки и выходят на разъем, значит там "+" . и на каких сайтах много распиновок.
даже просто погуглив " TFT LCD 24 pin " можно найти похожую на вашу расниговку
db17...db10 это соответственно в вашем случае db7...db0 (просто у разных контроллерах поразному используются 18бит при переводе в 8бит). А может быть даже на распиновке не db17...d10 а очередность db0...db7
http://kupinatao.com/pages/item_detail.aspx?ItemId=yh9jr/gbDNeTPtR8HOa/Ew==&Nick=%E6%B7%B1%E5%9C%B3%E5%AE%89%E9%91%AB
неговоря ещё про другие сайты указанные выше, на которых много распиновок и докумментации на них.
Как узнать какой контроллер:
- либо погуглить похожий, посмотреть фотки.
- либо подрубить можете даже к UNO , установив в библиотеке UTFT везде 8 битность, и закомментировав отключение возможных контроллеров (оставить SSD1963, ... ибо все иниты не влезут в память UNO ), и тупо перебрать от 0 до 31 инициализаации.
- либо подключить к UNO как адафруитский шилд, к примеру 2.4"(на али и этом сайте много фоток-распиновок этих шилдов) , залить тест графики , и в монитор порте глянуть какой он выдаст ID (в основном библиотека определяет по 0 адресу)
- либо залить читалку ID в Мегу , прочитать ей. ( Самая первая читалка немного корявая но работала, здесь последняя версия, но для 16 бит http://arduino.ru/forum/apparatnye-voprosy/35-tft-lcd-krasnyi-megovskii-mega-2560-r3-resheno-kak-reshit-drugie , в принципе для некоторых 8ми битных контроллеров годится, но чтоб для всех, надо её допиливать)
Здравствуйте!
В сервис мануале нашел такую схему на коннектор.
Подскажите пожалуйста, как подключить к ардуино уно дисплей от телефона самсунг gt-e1100
В ардуино еще новичок, ногами не пинайте:-)
Нарисуйте схемку подключения, если не трудно и какую библиотеку и скетч использовать.
Я думаю информация поможет не только мне, а и другим начинающим ардуинщикам. Дисплей очень распространенный.
Ты не пробовал запитывать подсветку? Работает? У меня чето нет. Такой же дисплей, тоже от HP M425
Здравствуйте!
Подскажите пожалуйста, как подключить к ардуино уно дисплей от телефона самсунг gt-e1100 ....
Если в инете нет информации , то почему бы не сделать её самому. Потратить время , разобраться и выложить. Поищите ещё здесь Дисплеи от сотиков http://vrtp.ru/index.php?showtopic=1120
Ты не пробовал запитывать подсветку? Работает? У меня чето нет. Такой же дисплей, тоже от HP M425
Такой же какой?! (значение уже неимеет) у дисплеев бывает светодиоды подключены не параллельно , а последовательно , тогда можно запитывать большим напряжением, с ограничительным резистором подобранным на ток 10-20 мА . Также применял преобразователи со старых тлф (сименс, самсунг,...), они сразу поддерживают нужный ток, повышая для этого напряжение. Попробуйте подключить 15-20в (к примеру от зарядки ноутбучной) через резистор 1..10ком . Замеренное падение напряжения на подсветке / 3в и будет равно количеству светодиодов.
Добрый день! у меня есть экранчик от Sony Ericsson k750i и Arduino UNO только что пришло MEGA328P-PU...
Вот данные экранчика с стороннего сайта
Sony Ericsson K750 display
R61500 - вот на него даташит если я правильно нашел ))
R61503 - это по моему даташит на экранчик от SE k530i если я не ошибаюсь если кому надо
Как мне все это хозяйство подключить запустить, подскажите пожалуйста...
slider а вы можете адаптировать программу по определения ID контроллера дисплея для ARDUINO DUE?
Под рукой есть Мега и ДУЕ. С ДУЕ было бы удобнее - там 3.3 вольта, не нужно городить делители. Можно конечно и Мегу использовать - но у меня просто нет столько резисторов одинакового номинала :( Живу в селе и в радимагазине бываю очень редко... Потому адаптация программы под ДУЕ спасла бы, но я в этом не понимаю...
При попытке прошить ДУЕ выдает ошибку:
1
Test_tft.ino: In function
'void draw()'
:
2
Test_tft:31: error:
'PORTA'
was not declared
in
this
scope
3
Test_tft:31: error:
'PORTC'
was not declared
in
this
scope
4
Test_tft:37: error:
'DDRA'
was not declared
in
this
scope
5
Test_tft:37: error:
'DDRC'
was not declared
in
this
scope
6
'PORTA'
was not declared
in
this
scope