Arduino и дисплеи от сотиков мобильных телефонов

slider
Offline
Зарегистрирован: 17.06.2014

Brat4791 пишет:

Всем привет народ
не пинайте сразу т.к впервые этим занялся 
подкл к Ардуино Нано дисплей от Fly IQ239 TFT035K120FPC VER01    
DB0 connects  pin 2 Nano
DB1 connects  pin Nano
DB2 connects  pin 5 Nano
DB3 connects  pin 6 Nano
DB4 connects  pin 7 Nano
DB5 connects  pin 8 Nano
DB6 connects  pin 9 Nano
DB7 connects  pin 10 Nano
define LCD_CS A3  Nano
define LCD_CD A2 (RS)  Nano
define LCD_WR A1   Nano
define LCD_RD A0   Nano
define LCD_RESET A4   Nano
через 10к
A0 - A7 через 10k
.....
D0 - D7 в читалке прописал согласно распиновки подключения к Нано
....
 
Неправильно подключили . Подключайте как в описании пока ничего не выдумывая , шина данных не переназначается , там прямая запись/чтение в цельный порт D0-D7 цельного байта.  Ещё прозвоните соседние пины на резисторах , не коротнули ли чего там , или не оборвали ли резисторы.
 // В других своих сообщениях , кликните если доступно "изменить" , кликнуть на код , на {...}  ,  и в его свойствах поставить галку сворачивать по умолчанию. 
//// если хотите сэкономить пины , то потом можете подключить по типу как в #118 Explay N1 . FMARK никуда не надо подключать. По дисплею Fly IQ239 , есть вероятность , позже его изучу , опишу как что его подключать, это 3.5" 480x320. 
/////// сайт лагает по длинным темам, очень долго отправляет сообщение , поэтому достаточно один раз нажать "отправить" , и если хотите потом секунд через 20-30 , проверить его появление соседней вкладкой.
zbot
Offline
Зарегистрирован: 15.03.2020

Winnie-The-Pooh пишет:

Добрый день, уважаемые коллеги!

Купил дисплей EXPLAY N1. С некоторыми усилиями завел его от stm32f103c8t6 (blue pill).

На полном ините не работает, слегка помаргивает но и только. Заработал на минимальном ините.

void LCDINIT1()
{
  
  digitalWrite(_write_pin, HIGH);
  digitalWrite(_rs_pin, LOW);
  delay(10);
  digitalWrite(_rs_pin, HIGH);
  delay(50);

//InitLCD_n1();

/*
// minimal ili9488 explay N1
        0x11, 0,
       TFTLCD_DELAY, 120,
  0x36,  1, 0x48,
  0x3A,  1, 0x55,
  0x29,  0,
  0x2C,  0,
*/

  SendCom(SWRESET); //SWRESET     0x01 
    delay(150);
    SendCom(SLPOUT); //SLPOUT      0x11
    delay(150);
  
//  SendCom(0x36);  // очень важен, иначе перевернуто и цветопередача не та
//  SendDat(0xE8);
//  SendCom(0x3A);  // очень важен, иначе черно-белые кракозябры
//  SendDat(0x05);


//send_sommomd(0x36);
//switch(rotate) {
//default:
//case ROTATE_0:      send_data(0x58);   briok;
//case ROTATE_90:      send_data(0x28);   briok;
//case ROTATE_180:   send_data(0x88);   briok;
//case ROTATE_270:   send_data(0xE8);   briok;
    
    SendCom(MADCTR); //Memory Access control 0x36 08 48 88 C8 28 68 A8 E8
    SendDat(0x08); //0x48 1C 18

    SendCom(0x3A); //COLMOD (Interface Pixel Format)
    SendDat(0x07); //55 8-bits data bus for 24-bits/pixel (RGB 8-8-8-bits input), 16M-colors, 3AH=”07h”
//                 //There is 1-pixel (3 sub-pixels) per 3-bytes.
    
    SendCom(DISPON); //DISPON      0x29
    SendCom(NOP); //NOP         0x00
    
 //   LCD_Clear();
//    LCD_Window(0,0,SCREEN_HORIZONTAL_RESOLUTION-1,SCREEN_VERTICAL_RESOLUTION-1); 
    LCD_Window(0,0,WIDTH-1,HEIGHT-1); 
    }

Сделал все что хотел - работает ориентация и все такое.

Купил второй дисплей. Сделал второй модуль. Не работает совсем. Проверил все: 

зная, что может быть два контроллера (ILI9488 или HX8357-D) - проверил команды инициализации. Для минимального инита они совпадают.

Дисплеи разные: надпись на шлейфе рабочего Bomin, а нерабочего CXS (или XS). На фото рабочий - нижний.

Прошу помощи: почему не работает? Мои кривые руки? Неверный инит? Неисправный дисплей?

 

Попробуй: 

ADDR_CMD = 0x11; //Exit Sleep
HAL_Delay(100);
ADDR_CMD = 0x36;  // очень важен, иначе перевернуто и цветопередача не та
ADDR_DATA = 0xE8;
ADDR_CMD = 0x3A;  // очень важен, иначе черно-белые кракозябры
ADDR_DATA = 0x05;
ADDR_CMD = 0x29; //display on
ADDR_CMD = 0x2C; //display on
 
исправь только на sendcom senddat как у тебя в листинге.
PavelP
Offline
Зарегистрирован: 16.02.2021

slider.

Есть Explay N1 Bomin TXDT350DH-129 8357DA107, как я понял что бы перевести на SPI надо подлесть к недостающим выводам на шлейфе(IM и SPI)  у самого кристалла , можно поподробней как их найти справа слева от чего. Нужен большой дисплей по SPI.

Спасибо.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

PavelP пишет:

Нужен большой дисплей по SPI.

Ну, большой дисплей и SPI - это вещи почти взаимоисключающие. Надеюсь, когда (если?) Вам удастся совместить одно с другим, форум не будет завален вопросами "А почему так медленно работает?", "А почему изображение мерцает?" и тому подобными.

PavelP
Offline
Зарегистрирован: 16.02.2021

andriano.

Уже стоит на 2.4" ili9341 240*320 SPI на ESP32 работает быстро.  У Explay N1 чутка поболе разрешение, видео обещаю не смотреть.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

PavelP пишет:

andriano.

Уже стоит на 2.4" ili9341 240*320 SPI на ESP32 работает быстро.  У Explay N1 чутка поболе разрешение, видео обещаю не смотреть.

"Быстро" - это сколько?

Сколько, например, времени нужно для заливки экрана одним цветом?

Сколько времени нужно для переноса изображения с SD карты на дисплей?

Вот я сам недавно перепаял экран с параллельного интерфейса на SPI http://arduino.ru/forum/proekty/bibliotechka-dlya-oled-displeya-ssd1322-4-wire-spi-256x64-16-ottenkov-serogo

но сразу пришлось позаботиться и о скорости работы, которая, на мой взгляд, осталась приемлемой: 13.7 мс для вывода изображения на весь экран.

Watashi
Offline
Зарегистрирован: 16.02.2021

nic2015 пишет:
Да я в курсе что нельзя, на самой красной плате перемычкой якобы можно переключить) И на входе шлейфа меняется с + на -, дальше дорожки нет, бутафория.

Похоже ваш дисплей на ILI9488

рабочая библиотека http://www.lcdwiki.com/res/Program/Arduino/3.95inch/Mega2560_8BIT_ILI948...

zbot
Offline
Зарегистрирован: 15.03.2020

PavelP пишет:

andriano.

Уже стоит на 2.4" ili9341 240*320 SPI на ESP32 работает быстро.  У Explay N1 чутка поболе разрешение, видео обещаю не смотреть.

чутка это в 2 раза, допускаю что 10 кадров в сек достижимо при условии работоспособности шины spi на частоте 25mhz

Winnie-The-Pooh
Offline
Зарегистрирован: 21.10.2016

Попробовал. Все равно  не работает. ПРинял решение считать дисплей неисправным и отложить вопрос до момента покупки еще одного. У меня магазин ПРофи по дороге на дачу :)

mr. Monk
Offline
Зарегистрирован: 06.12.2019

storm134 пишет:

Библиотека U8g2    

Cледующий дисплей FCA6071-51/E1110DX9 на таком же контроллере ST7565.    

Распиновка : 9 pin 

1-CS (CSN)
2-RST (Reset)
3-DC (A0)
4-SCK (SCL)
5-SI (Data)
6- +3,3v
7- gnd
8- LED+
9- LED-

Такой же, FCA6071-51/E0914DX9 (SDIA6071-51/A090226A) Вынул из pin-pad POS-терминала.

Подключил к Wemos-d1.


#include <Arduino.h>
#include <U8g2lib.h>  // github.com/olikraus/U8g2-2.28.10.zip

#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif

#define D3  0
#define TX  1
#define D4  2
#define RX  3
#define D2  4
#define D1  5
#define D6  12
#define D7  13
#define D5  14
#define D8  15
#define D0  16

  U8G2_ST7565_KS0713_F_4W_SW_SPI u8g2(U8G2_R2, /* clock=*/ D2, /* data=*/ D1, /* cs=*/ TX, /* dc=*/ RX, /* reset=*/ D4);

int u8g2_font_cnt = 0;

const uint8_t* u8g2_font_[] = { // 22 "русских" шрифта в библиотеке
u8g2_font_4x6_t_cyrillic,
u8g2_font_5x7_t_cyrillic,
u8g2_font_5x8_t_cyrillic,
u8g2_font_6x12_t_cyrillic,
u8g2_font_6x13_t_cyrillic,
u8g2_font_6x13B_t_cyrillic,
u8g2_font_7x13_t_cyrillic,
u8g2_font_8x13_t_cyrillic,
u8g2_font_9x15_t_cyrillic,
u8g2_font_10x20_t_cyrillic,
u8g2_font_cu12_t_cyrillic,
u8g2_font_unifont_t_cyrillic,
u8g2_font_haxrcorp4089_t_cyrillic,
u8g2_font_inr24_t_cyrillic,
u8g2_font_inr27_t_cyrillic,
u8g2_font_inr30_t_cyrillic,
u8g2_font_inr33_t_cyrillic,
u8g2_font_inr38_t_cyrillic,
u8g2_font_inr42_t_cyrillic,
u8g2_font_inr46_t_cyrillic,
u8g2_font_inr49_t_cyrillic,
u8g2_font_inr53_t_cyrillic
};

void setup(void) {
  u8g2.begin();
  u8g2.enableUTF8Print();		// enable UTF8 support for the Arduino print() function
  //u8g2.setFlipMode(1);    // Зеркало
  //u8g2.setDisplayRotation(U8G2_R2); // Поворот экрана. Есть в конструктое. U8G2_R0-U8G2_R1-U8G2_R2
}

void loop(void) {
  u8g2.setFont(u8g2_font_[u8g2_font_cnt]);
  u8g2.setFontDirection(0);
  u8g2.clearBuffer();
  u8g2.setCursor(20, 20);
  u8g2.print(String(u8g2_font_cnt));
  u8g2.setCursor(30, 60);
  u8g2.print("Здравствуй, страна!");
  u8g2.sendBuffer();
  
  delay(1000);
  u8g2_font_cnt++;
  if (u8g2_font_cnt == 23) u8g2_font_cnt = 0;
}

Подсветка от 3,3 вольт не заработала. Подключил напрямую к 5 вольтам.

zon63
Offline
Зарегистрирован: 20.02.2021

Есть дисплей от Fli IQ238 Интересует что за сигнал на 46 ноге LCD_ID_ADC

slider
Offline
Зарегистрирован: 17.06.2014

в продолжение темы #118, про подключение дисплея EXPLAY N1 3.5" 480x320 

 

                                  Подключение дисплея EXPLAY N1 по SPI

 

PavelP пишет:

slider.

Есть Explay N1 Bomin TXDT350DH-129 8357DA107, как я понял что бы перевести на SPI надо подлезть к недостающим выводам на шлейфе(IM и SPI)  у самого кристалла , можно поподробней как их найти справа слева от чего. Нужен большой дисплей по SPI.

Спасибо.

Всё очень просто , много раз говорилось в теме , и размещали фото . Вкратце берёте из даташита распиновку предполагаемого кристалла: 

и прикладываете к фотке своего дисплея:

Дорожки резать (синие полоски) ,  ( олды вспомнят как на сименсах резали для прошивки и анлока :)  , или отверстия разработать с той стороны на эту , чтоб дорожки разорвать на ту сторону.
IM2 надо подключить на + , как и IM0 IM1 для перевода в режим SPI 4пин. 
SDA это к MOSI, проще перекинуть на пин ID шлейфа дисплея , т.к. он не используется ( выпаяв ID резистивный делитель  R1 R2 , они нужны были чтоб сотовый телефон АЦП распознал что это якобы его дисплей от его производителя и под его прошивку, или возможно чтоб если прошивка не может командами считать какой контроллер поставили в дисплей,  то чтоб по резистивному дисплею распознавала какая партия дисплеев с другими контроллерами по договоренности с фабрикой (на случай если закончились одни контроллеры , ставят другие). Для этого в последующих прошивках телефонов ещё предусматривают иниты для нескольких возможных контроллеров в дисплеях  ) 
SDA (MOSI) , CS , DC , WR (CLK) -  это и есть 4 пин SPI . Ещё Reset , +3.3 , gnd . Катоды светодиодов подключил через резистор 10ом (можно 2..5 Ом) . 

Для сигналов SPI использовал делитель 1ком+2ком .

Распиновка получилась такая (распиновка в примерах библиотек для ардуин на atmega328) :

SDA  MOSI  - D11 (для скетчей аппаратного SPI не указывается)
+3.3v
+3.3v
CS         - D10 ( может переназначаться )
DC (RS)    - D9  ( может переназначаться )
WR / SCK   - D13 (для скетчей аппаратного SPI не указывается)
 
RST        - D8  ( может переназначаться )

 
  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
+ 3.3v
IM1 + 3.3v
IM0 + 3.3v
GND
K5
K4
K3
K2
K1
 
A
GND

// можно избавится еще от DC ( DataCommand , RS )  , и от Reset , но это другая история со своими + и - . Лучше использовать 4SPI+reset.

Библиотек под SPI ili9488 в инете много и для разного железа.
 Для Arduino UNO заработали:
1. UTFT (софтовый SPI) http://www.rinkydinkelectronics.com/library.php?id=51

для быстрого старта, проверки дисплея:
в memorysaver.h оставляем закомментированный дизейбл только //#define DISABLE_ILI9341_S5P , остальные раскомментить.
Запустить пример пример \UTFT\examples\Arduino (AVR)\UTFT_Demo_320x240_Serial
в нём UTFT myGLCD(ILI9341_S5P,MOSI,SCK,10,8,9);
 //      ( ILI9341_S5P, sda, scl, cs, rst , dc )
//UTFT myGLCD(ILI9341_S5P,MOSI,SCK,10,NOTINUSE,9);
  UTFT myGLCD(ILI9341_S5P,MOSI,SCK,10,8,9);


// так-то софтовый SPI очень медленный . надо переводить на аппаратный , желательно поменять инит на ili9488, поставить разрешение 480х320

2. Adafruit ILI9488 SPI (аппаратный SPI)   https://www.google.com/search?q=Adafruit+ILI9488+SPI    ( https://github.com/jaretburkett/ILI9488 , https://learn.adafruit.com/adafruit-3-5-color-320x480-tft-touchscreen-breakout/spi-wiring-and-test , https://www.instructables.com/Arduino-and-35-Inch-320x480-TFT-LCD-ILI9488-SPI-In/ , http://www.lcdwiki.com/3.5inch_SPI_Module_ILI9488_SKU:MSP3520 )

пример ILI9488-master\examples\graphicstest
в нём расписать куда подключено управление TFT_CS TFT_DC TFT_RST 
#include "SPI.h"
#include <Adafruit_GFX.h>
#include <ILI9488.h>

#define TFT_CS         10 // PA1
#define TFT_DC         9 // PB3
// #define TFT_LED     7 // PB0
#define TFT_RST       8 //  PB4

// Use hardware SPI (on Uno, #13, #12, #11) and the above for CS/DC
ILI9488 tft = ILI9488(TFT_CS, TFT_DC, TFT_RST);
// If using the breakout, change pins as desired
//Adafruit_ILI9488 tft = Adafruit_ILI9488(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);

3. LCDWIKI_SPI (аппаратный SPI) , https://github.com/lcdwiki/LCDWIKI_SPI + https://github.com/lcdwiki/LCDWIKI_gui

поддерживает контроллеры 
ILI9325 
ILI9328 
ILI9341 
HX8357D 
HX8347G 
HX8347I 
ILI9486 
ST7735S 
SSD1283A

Пример LCDWIKI_SPI\Example\Example_01_clear_screen
строчка запуска  LCDWIKI_SPI mylcd(ILI9486,10,9,8,A3); //hardware spi,cs,cd,reset

Пример LCDWIKI_SPI\Example\Example_02_colligate_test\colligate_test
строчка запуска  LCDWIKI_SPI my_lcd(ILI9486,10,9,8,A3); //hardware spi,cs,cd,reset

Пример LCDWIKI_SPI\Example\Example_03_display_string\display_string 
строчка запуска LCDWIKI_SPI mylcd(ILI9486,10,9,8,A3);

Пример LCDWIKI_SPI\Example\Example_04_display_picture\display_picture 
строчка запуска LCDWIKI_SPI my_lcd(ILI9486,10,9,8,A3); 

Пример LCDWIKI_SPI\Example\Example_05_display_scroll\display_scroll
строчка запуска LCDWIKI_SPI my_lcd(ILI9486,10,9,8,A3);
.............

// заводится ещё на её инитах если указывать - ILI9341 , HX8357D , ST7735S . но надо подредактировать её инит ILI9486 - отзеркалить , а лучше применить нормальный или минимальный инит от ili9488

4. TFT_eSPI    (в User_Setup : выбрать контроллер и пины, выключить лишние шрифты чтоб памяти хватило) https://github.com/Bodmer/TFT_eSPI   ( https://www.arduino.cc/reference/en/libraries/tft_espi/ , https://www.arduinolibraries.info/libraries/tft_e-spi )

5. тэсты из 3.5inch_SPI_Module_ILI9488_MSP3520_V1.1 , и simple test не требующий библиотек
http://www.lcdwiki.com/res/Program/Common_SPI/3.5inch/SPI_ILI9488_MSP3520_V1.1/3.5inch_SPI_Module_ILI9488_MSP3520_V1.1.zip ( взято с этой странички http://www.lcdwiki.com/3.5inch_SPI_Module_ILI9488_SKU:MSP3520 )

//This application does not rely on any libraries and it is for ILI9488

//This program is a demo of clearing screen to display black,white,red,green,blue.

//when using the BREAKOUT BOARD only and using these hardware spi lines to the LCD,
//the SDA pin and SCK pin is defined by the system and can't be modified.
//if you don't need to control the LED pin,you can set it to 3.3V and set the pin definition to -1.
//other pins can be defined by youself,for example
//pin usage as follow:
//              SCK  SDI/MOSI  CS  DC/RS  RESET      VCC     GND    
//Arduino Uno   13     11      10    9      8      5V/3.3V   GND

//Remember to set the pins to suit your display module!
/********************************************************************************
* @attention
*
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
* TIME. AS A RESULT, QD electronic SHALL NOT BE HELD LIABLE FOR ANY
* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 
* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
**********************************************************************************/
#include <SPI.h>
   
#define CS    10        
#define RS    9      
#define RESET 8


void setup()
{
  SPI_Init();
  pinMode(CS,OUTPUT);
  pinMode(RS,OUTPUT);
  pinMode(RESET,OUTPUT);
  digitalWrite(CS, HIGH);
  digitalWrite(RS, HIGH);
  digitalWrite(RESET, HIGH);
  Lcd_Init();  
}

void loop()
{  
   // закрашивание экрана
   LCD_Clear(0xf800); // f800 красный 
   LCD_Clear(0x07E0); // 07E0 зеленый
   LCD_Clear(0x001F); // 001F синий 
   LCD_Clear(0xFFFF); // FFFF белый
   LCD_Clear(0x0);    // 0    чёрный
  
  // прямоугольники рандомные 
  for(int i=0;i<500;i++)
  {
    Rect(random(300),random(300),random(300),random(300),random(65535)); // rectangle at x, y, with, hight, color
  }

}



void Lcd_Writ_Bus(unsigned char d)
{
  SPI.transfer(d);
}

void Lcd_Write_Com(unsigned char VH)  
{   
  *(portOutputRegister(digitalPinToPort(RS))) &=  ~digitalPinToBitMask(RS);//LCD_RS=0;
  Lcd_Writ_Bus(VH);
}

void Lcd_Write_Data(unsigned char VH)
{
  *(portOutputRegister(digitalPinToPort(RS)))|=  digitalPinToBitMask(RS);//LCD_RS=1;
  Lcd_Writ_Bus(VH);
}

void Lcd_Write_Com_Data(unsigned char com,unsigned char dat)
{
  Lcd_Write_Com(com);
  Lcd_Write_Data(dat);
}

void Address_set(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2)
{
  Lcd_Write_Com(0x2a);
	Lcd_Write_Data(x1>>8);
	Lcd_Write_Data(x1);
	Lcd_Write_Data(x2>>8);
	Lcd_Write_Data(x2);
  Lcd_Write_Com(0x2b);
	Lcd_Write_Data(y1>>8);
	Lcd_Write_Data(y1);
	Lcd_Write_Data(y2>>8);
	Lcd_Write_Data(y2);
	Lcd_Write_Com(0x2c); 							 
}

void SPI_Init(void)
{   // настройка аппаратного SPI
    SPI.begin();
    SPI.setClockDivider(SPI_CLOCK_DIV2); // при 16мгц : SPI_CLOCK_DIV2  =8MHz  , SPI_CLOCK_DIV4  =4MHz 
    SPI.setBitOrder(MSBFIRST);           // (наименьший разряд(бит) первый
    SPI.setDataMode(SPI_MODE0);          // Уровень сигнала (CPOL)-0	Фаза (CPHA)-0
}

void Lcd_Init(void)
{
  digitalWrite(RESET,HIGH);
  delay(5); 
  digitalWrite(RESET,LOW);
  delay(15);
  digitalWrite(RESET,HIGH);
  delay(15);
  
  digitalWrite(CS,LOW);  //CS
  
    Lcd_Write_Com(0xF7);  
    Lcd_Write_Data(0xA9); 
    Lcd_Write_Data(0x51); 
    Lcd_Write_Data(0x2C); 
    Lcd_Write_Data(0x82);  

    Lcd_Write_Com(0xC0);  
    Lcd_Write_Data(0x11); 
    Lcd_Write_Data(0x09); 

    Lcd_Write_Com(0xC1);  
    Lcd_Write_Data(0x41); 

    Lcd_Write_Com(0xC5);  
    Lcd_Write_Data(0x00); 
    Lcd_Write_Data(0x0A); 
    Lcd_Write_Data(0x80);
 
    Lcd_Write_Com(0xB1);  
    Lcd_Write_Data(0xB0); 
    Lcd_Write_Data(0x11); 

    Lcd_Write_Com(0xB4);  
    Lcd_Write_Data(0x02); 
  
    Lcd_Write_Com(0xB6);    
    Lcd_Write_Data(0x02);
    Lcd_Write_Data(0x22);  
 
    Lcd_Write_Com(0xB7);    
    Lcd_Write_Data(0xC6);  

    Lcd_Write_Com(0xBE);    
    Lcd_Write_Data(0x00);   
    Lcd_Write_Data(0x04); 
 
    Lcd_Write_Com(0xE9);    
    Lcd_Write_Data(0x00);   
 
    Lcd_Write_Com(0x36);  
    Lcd_Write_Data(0x08);   

    Lcd_Write_Com(0x3A);    
    Lcd_Write_Data(0x66); 

    Lcd_Write_Com(0xE0);    
    Lcd_Write_Data(0x00);  
    Lcd_Write_Data(0x07); 
    Lcd_Write_Data(0x10); 
    Lcd_Write_Data(0x09); 
    Lcd_Write_Data(0x17); 
    Lcd_Write_Data(0x0B); 
    Lcd_Write_Data(0x41); 
    Lcd_Write_Data(0x89); 
    Lcd_Write_Data(0x4B); 
    Lcd_Write_Data(0x0A); 
    Lcd_Write_Data(0x0C); 
    Lcd_Write_Data(0x0E); 
    Lcd_Write_Data(0x18); 
    Lcd_Write_Data(0x1B); 
    Lcd_Write_Data(0x0F); 

    Lcd_Write_Com(0xE1);    
    Lcd_Write_Data(0x00);  
    Lcd_Write_Data(0x17); 
    Lcd_Write_Data(0x1A); 
    Lcd_Write_Data(0x04); 
    Lcd_Write_Data(0x0E); 
    Lcd_Write_Data(0x06); 
    Lcd_Write_Data(0x2F); 
    Lcd_Write_Data(0x45); 
    Lcd_Write_Data(0x43); 
    Lcd_Write_Data(0x02); 
    Lcd_Write_Data(0x0A); 
    Lcd_Write_Data(0x09); 
    Lcd_Write_Data(0x32); 
    Lcd_Write_Data(0x36); 
    Lcd_Write_Data(0x0F); 

    Lcd_Write_Com(0x11);    //Exit Sleep 
    delay(120); 			
    Lcd_Write_Com(0x29);    //Display on 

    digitalWrite(CS,HIGH);
}

void H_line(unsigned int x, unsigned int y, unsigned int l, unsigned int c)                   
{	
  unsigned int i,j;
  digitalWrite(CS,LOW);
  Lcd_Write_Com(0x02c); //write_memory_start
  //digitalWrite(RS,HIGH);
  l=l+x;
  Address_set(x,y,l,y);
  j=l*2;
  for(i=1;i<=j;i++)
  {
      Lcd_Write_Data((c>>8)&0xF8);
      Lcd_Write_Data((c>>3)&0xFC);
      Lcd_Write_Data(c<<3);
  }
  digitalWrite(CS,HIGH);   
}

void V_line(unsigned int x, unsigned int y, unsigned int l, unsigned int c)                   
{	
  unsigned int i,j;
  digitalWrite(CS,LOW);
  Lcd_Write_Com(0x02c); //write_memory_start
  //digitalWrite(RS,HIGH);
  l=l+y;
  Address_set(x,y,x,l);
  j=l*2;
  for(i=1;i<=j;i++)
  { 
      Lcd_Write_Data((c>>8)&0xF8);
      Lcd_Write_Data((c>>3)&0xFC);
      Lcd_Write_Data(c<<3);
  }
  digitalWrite(CS,HIGH);   
}

void Rect(unsigned int x,unsigned int y,unsigned int w,unsigned int h,unsigned int c)
{
  H_line(x  , y  , w, c);
  H_line(x  , y+h, w, c);
  V_line(x  , y  , h, c);
  V_line(x+w, y  , h, c);
}

void Rectf(unsigned int x,unsigned int y,unsigned int w,unsigned int h,unsigned int c)
{
  unsigned int i;
  for(i=0;i<h;i++)
  {
    H_line(x  , y  , w, c);
    H_line(x  , y+i, w, c);
  }
}

int RGB(int r,int g,int b)
{
  return r << 16 | g << 8 | b;
}

void LCD_Clear(unsigned int j)                   
{	
  unsigned int i,m;
  digitalWrite(CS,LOW);
  Address_set(0,0,320,480);
  
  for(i=0;i<320;i++)
    for(m=0;m<480;m++)
    {
      Lcd_Write_Data((j>>8)&0xF8);
      Lcd_Write_Data((j>>3)&0xFC);
      Lcd_Write_Data(j<<3);
    }
  digitalWrite(CS,HIGH);   
}

6. быстрая SPI либа Adafruit_ILI9341 закрашивающая любой цвет за 0.54сек  https://github.com/adafruit/Adafruit_ILI9341  + GFX старенькие графич. функции v1.5.3.  https://github.com/adafruit/Adafruit-GFX-Library/releases/tag/1.5.3 . В файле Adafruit_ILI9341.h изменить разрешение 240->320 , 320->480  . В примере Adafruit_ILI9341\examples\graphicstest , перед tft.begin(); прописать RESET -  pinMode(8, OUTPUT); delay(15); digitalWrite(8, HIGH);delay(15); 
Либа работает быстро, благодаря функции yield(); которая передает выполнение программы дальше , не дожидаясь пока закончится выполнение основной медленной функции. На осциллографе видно что между пакетами SPI=1мкс проходит время паузы равное 0.5-1 пакету , а не как в других либах до 4х времён пакетов.

// 7. навороченная библиотека GxTFT , вот её на SPI не проверял (а оно там есть). Там много настроек надо из-за её универсальности. https://github.com/ZinggJM/GxTFT

// На STM32 BluePill , ESP8266 , ESP32 пока некогда проверить , библиотек подходящих также много.   

 

andriano пишет:

... "Быстро" - это сколько? ...

Одинаково ! Если сравнить на Arduino UNO  8бит UTFT , 8 Бит Adafruit   с  библиотеками SPI , имеем те же 1.7сек (или даже 0.5сек в зависимости от SPI либы) на заливку цветом 320x480 . Заливка чёрным и белым на 8бит грубо в 0.5сек. В общем получаем что некоторые библиотеки SPI закрашивают экран быстрее чем в режиме 8бит !  
// сам удивился , узнав что в Атмеге328 нет аппаратного ускорителя SPI, и на каждый бит SPI приходится минимум 2такта процессора, когда чтоб передать сразу 8бит в цельный порт , требуется столько же времени. Мож чего где просмотрел.
 16бит же на ArduinoMega  заливка в 0.2-0.3сек независимо от цвета. 

 

zon63 пишет:

Есть дисплей от Fli IQ238 Интересует что за сигнал на 46 ноге LCD_ID_ADC ....

Для нас незачем.  Но вы можете придумать своё , чтоб к примеру только дисплеи от вас, подходили к вашему серийному устройству , типа защита от дурака ; или распознавание дисплея какой драйвер использовать  . Чуть выше описал в этом же сообщении.

 

PavelP
Offline
Зарегистрирован: 16.02.2021

Спасибо slider за фото.

Разводка дорожек на шлейфе совпадает. Вроде все понятно, думал будет сложней. 

Подключать буду к ESP32 там аппаратный SPI до 40Мгц.  В сети много видео про ESP32 и дисплеи на SPI, на глаз скорость меня устраивает.

m.dr
Offline
Зарегистрирован: 21.02.2021

Здравствуйте!

Прошу помочь. Имел ли ктото опыт подключения TFT8K1073FPC-A1-E  ?

К сожалению по нему нашел лишь частичное упоминание в интернете (снятый лот в алиэкспрессе) без указания выводов для подключения. 

 

 

 

croc19
Offline
Зарегистрирован: 17.02.2017

ФОТО

m.dr
Offline
Зарегистрирован: 21.02.2021

Прилагаю еще фото

m.dr
Offline
Зарегистрирован: 21.02.2021

Прилагаю еще фото

m.dr
Offline
Зарегистрирован: 21.02.2021

Прилагаю еще фото

croc19
Offline
Зарегистрирован: 17.02.2017

0,1,2,3  это  CS, DS, WR, RD или наоборот.

Фотка замыленная. Не видно проводников, поэтому сказать про переключение

8-16 бит по этой фотке не подскажу. Посмотри нормальные фотки в ветке.

Например пост 3338.

Извини, забыл про фотку.

croc19
Offline
Зарегистрирован: 17.02.2017

croc19
Offline
Зарегистрирован: 17.02.2017

Эти места поподробнее сфоткай.

mr. Monk
Offline
Зарегистрирован: 06.12.2019

SSD1283A + Wemos D1.

Не уверен, что он от "сотиков", но все же. Кому нибудь пригодится.

"Русификация" библиотеки - http://arduino.ru/forum/programmirovanie/rusifikatsiya-biblioteki-adafruit-gfx-i-vyvod-russkikh-bukv-na-displei-v-kodi?page=9#comment-546891

Кстати, "\n" (принудительный перенос строки) в gfx->println работает.

gfx->println(utf8rus("Я тебя целую В твой холодный носик. \nДо свиданья, Киска! Твой любимый пёсик."));


#include <Arduino_GFX_Library.h>  // github.com/moononournation/Arduino_GFX
//#include <font/TimesNRCyr10.h>

#define D3  0
#define TX  1
#define D4  2
#define RX  3
#define D2  4
#define D1  5
#define D6  12
#define D7  13
#define D5  14
#define D8  15
#define D0  16

        #define TFT_CS    TX
        #define TFT_RST   RX
        #define TFT_DC    D1
        #define TFT_SDA   D2
        #define TFT_SCK   D3
        #define TFT_BL    D4
        #define TFT_rot   0

// General software SPI
  Arduino_DataBus *bus = new Arduino_SWSPI(TFT_DC, TFT_CS, TFT_SCK /* SCK */, TFT_SDA /* MOSI */, -1 /* MISO */);

// SSD1283A OLED 130x130
  Arduino_SSD1283A *gfx = new Arduino_SSD1283A(bus, TFT_RST, TFT_rot /* rotation */);

void setup(void)
{
    gfx->begin();
    gfx->cp437(true);
    gfx->fillScreen(BLACK);
    //gfx->setFont(&TimesNRCyr10pt8b);

#ifdef TFT_BL
    pinMode(TFT_BL, OUTPUT);
    digitalWrite(TFT_BL, HIGH);
#endif

    gfx->setCursor(10, 2);
    gfx->setTextColor(RED);
    gfx->println(utf8rus("АБВГДЕЁЖЗИйКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"));
    gfx->setCursor(10, 20);
    gfx->setTextColor(GREEN);
    gfx->println(utf8rus("абвгдеёжзийклмнопрстуфхцчшщъыьэюя"));
    gfx->setCursor(10, 30);
    gfx->setTextColor(BLUE);
    gfx->setTextSize(1 /* x scale */, 3 /* y scale */, 3 /* pixel_margin */);
    gfx->println(utf8rus("Я тебя целую В твой холодный носик. До свиданья, Киска! Твой любимый пёсик."));

    delay(10000); // 5 seconds
}

void loop()
{
    gfx->setCursor(random(gfx->width()), random(gfx->height()));
    gfx->setTextColor(random(0xffff));
    gfx->setTextSize(random(9) /* x scale */, random(9) /* y scale */, random(3) /* pixel_margin */);
    //gfx->println("Hello World!");
    gfx->println(utf8rus("Доброе утро, страна!"));
    delay(2000); // 1 second
    gfx->fillScreen(BLACK);
    
}

 

mr. Monk
Offline
Зарегистрирован: 06.12.2019

Помогите опознать дисплеи.

TM18156ACCWGWC и TM18140ACCWGWC.

Второй 181х40 точек. Первый наверное (было бы логично) 181х56. Из телефонных аппаратов Avaya.

Шлейф

Нашел что-то похожее по подключению.

Если такое подключение, значит надо еще 5 конденсаторов подключать. 

oldman
Offline
Зарегистрирован: 27.03.2020

Решил воспользоваться инфо от slider (пост #3362) и попробовать подключить дисплей от Explay #1 по SPI.

Но! Оказалось, что на шлейфах всех пяти моих дисплеев точки подключения к шинам SDO и IM2 жестко "пришиты" к GND. Пришлось резать дорожки GND с обратной стороны шлейфа, заодно там образовались удобные точки подключения.

 Где резал, отмечено красным. Уважаемый slider, прошу извинить - воспользовался Вашим снимком.

SDA выведена на 1-й pin шлейфа (резисторы R1, R2 отпаяны), IM2 на 40-й pin FPC адаптера.

 

m.dr
Offline
Зарегистрирован: 21.02.2021

Надеюсь, так лучше видно. Подскажите пожалуйста, если ориентироваться со стороны, где прописана модель дисплея, откуда идет отсчет пинов?  Питание планируется от 3.3 вольт от Mega2560. На каждый вывод надо ставить сопротивление? Какое сопротивление желательно? Есть ли еще какая-то обвязка?  Заранее благодарю за ответ!

croc19
Offline
Зарегистрирован: 17.02.2017

Посмотри пост 3362. Там вырезка из даташита. На ней видна последовательность выводов.

Выводы RD, WR, RS, CS  могут выходить наоборот. Это зависит от контроллера.

Нужно пробывать и так и наоборот. 

Теперь про шину данных 8-16 бит. Посмотри пост 3328. Там таблица для вариантов подключения

сигналов IM. Сопоставь свой дисплей и поймешь как включена у тебя шина. На 8 бит или на 16 бит.

Соответственно перепаяв IM0 можешь переключаться на 8 или 16 бит. IM2 всегда 0.

Это то место, которое ты нормально не сфоткал. Не видно.

Подключения есть в библиотеках, которые будешь использовать и в документации к ним.

Запусти читалку. Она определит контроллер. Я не работаю с ардуиной, подсказать не могу.

Если ардуина на 5 вольт, то делители нужны. Подсветку тоже через резисторы.

Прочитай хотя бы 10 страниц форума с начала. Там СЛАЙДЕР многое описывает.

Удачи.

zbot
Offline
Зарегистрирован: 15.03.2020

Сегодня попала в руки крайне прелюбопытная вещь - электронный ценник:

Есть какая либо информация по данному экрану и контроллеру?

oldman
Offline
Зарегистрирован: 27.03.2020

  to alls  Подскажите чем можно смыть или размягчить покрытие меди (дорожек) на шлейфе дисплея.

Ivan1995z
Offline
Зарегистрирован: 27.02.2021

Друзья помогите разобратся как подключить TFT Дисплей к стм32 распиновку дисплея нашел но совместить с распиновкай контролера у меня не получается нет опыта в таких делах 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Ivan1995z пишет:

Друзья помогите разобратся как подключить TFT Дисплей к стм32 распиновку дисплея нашел но совместить с распиновкай контролера у меня не получается нет опыта в таких делах 

А в чем проблема то?

Если дисплей подключается по SPI, значит, лучше всего и подключать к аппаратному SPI, а если нет - то вообще без разницы.

криворук
Offline
Зарегистрирован: 04.04.2020

ну да все так и бросились помогать. 8бит 16бит куда ни шло.а поспиай хрен кто поможет

криворук
Offline
Зарегистрирован: 04.04.2020

аппаратный спай как я понял уже настроен на дисплей именно этот. т.е. нужно ковырять то баахло от куда его вынул. по другому читалку пробовал,нет. во первых нужно знать 8 или 16 бит а спаи читалка не берёт. пробовал 3 дисплейчика спай подключить. фига

криворук
Offline
Зарегистрирован: 04.04.2020

я пробовал ковырять те мобилы, от куда вытащил. названия и марку мобил знаю,инфы нет. тупик.вот валяются жирненькие дисплейчики... искал схемы мобил, всё не то, но скачал другие на всякий. где то валяются. короче голяк. хрен запустишь

криворук
Offline
Зарегистрирован: 04.04.2020

аппаратный спай я вспомнил. любая стм хоть один должна иметь. проблема в управлении

croc19
Offline
Зарегистрирован: 17.02.2017

Какой дисплей, к какому стм, по какой шине?????

криворук
Offline
Зарегистрирован: 04.04.2020

так читалка вроде спай не работает или уж другая?

 

криворук
Offline
Зарегистрирован: 04.04.2020

спай

 

криворук
Offline
Зарегистрирован: 04.04.2020

может хоть мне частично поможешь разобраться?

croc19
Offline
Зарегистрирован: 17.02.2017

криворук  не пиши 500 сообщений по два слова, дитя ЕГЕ. Не плоди пятьсот сообщений.

А то всю ветку на 70 страниц расписали, а пользы на 10 страниц. 

Пиши одно сообщение на 500 предложений.

Теперь пиши какие проблемы с подключением. Чем смогу, помогу.

Только не как Ivan1995z. Конкретно пиши.

криворук
Offline
Зарегистрирован: 04.04.2020

я владимир. очень далеко не егэ. слишком старый я. во первых хотел узнать есть ли читалка ардуино именно и в дальнейшем порт спиай. второе, сколько именно используется пинов под дисплеи спай. может я чтото и путаю но там  у меня идёт вроде 11 пинов

croc19
Offline
Зарегистрирован: 17.02.2017

Про читалку лучше спросить у СПАЙДЕРА. Я на ардуине не программирую. 

SPI бывает 3-х проводный или 4-х проводный.

криворук
Offline
Зарегистрирован: 04.04.2020

хорошо, по пинам то как? в смысле количества

криворук
Offline
Зарегистрирован: 04.04.2020

спайдер или слайдер?

mr. Monk
Offline
Зарегистрирован: 06.12.2019

криворук пишет:

хорошо, по пинам то как? в смысле количества

https://ru.wikipedia.org/wiki/Serial_Peripheral_Interface

криворук
Offline
Зарегистрирован: 04.04.2020

вот и я так думал изначально. спаий и аитуси. может перепутал, но там 2 пина в отличии от3 . а у мненя идёт 11 пинов. - 2 пит,2 - подсветка.остаётся 7. не идёт на 8 бит . и каое тогда подключение? обших проводов нет. вроде все используются. ну на крайняк 4 или 6 бит. я хз

croc19
Offline
Зарегистрирован: 17.02.2017

Криворук. Почитай хоть чуть-чуть матчасть. 

Если нет информации по дисплею, то вряд ли подключишь.

криворук
Offline
Зарегистрирован: 04.04.2020

так вот думаю зачем тогда читалка

croc19
Offline
Зарегистрирован: 17.02.2017

Смотри пост 3397

криворук
Offline
Зарегистрирован: 04.04.2020

напомни пж как пост наити.не помню. давно здесь не был

криворук
Offline
Зарегистрирован: 04.04.2020

вот я и говорю. можно подключить 8 битные.можно подключить16 битные при условии или по 16 бит, или что знаешь как перевести 16 на 8. а по другим портам или инфы нет. так что хрень это всё (в большей степени)