Dva displeje ST7735

Odpovědět
petouf
Příspěvky: 18
Registrován: 28 zář 2017, 13:41
Reputation: 0

Dva displeje ST7735

Příspěvek od petouf » 06 dub 2018, 12:32

Ahoj, řeším problém:
Potřebuji řídit dva displeje jedním Arduinem Mega. Podle návodů na netu https://forum.arduino.cc/index.php?topic=382489.0 jsem sesmolil kod:

#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#include <SPI.h>

#define TFT_CS1 10 // pro první displej
#define TFT_CS2 7 // pro druhý displej
#define TFT_RST 9
#define TFT_DC 8
#define TFT_SCLK 11 //nemohu používat "originál" SPI pin52 - tam mi "visí" něco jiného
#define TFT_MOSI 12 //nemohu používat "originál" SPI pin51 - tam mi "visí" něco jiného

Adafruit_ST7735 tft1 = Adafruit_ST7735(TFT_CS1, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST); //nastavení prvního displeje
Adafruit_ST7735 tft2 = Adafruit_ST7735(TFT_CS2, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST); //nastavení druhého displeje

void setup(void)
{
tft1.initR(INITR_BLACKTAB); //inicializace prvního displeje
tft1.setRotation(1);
tft1.fillScreen(ST7735_BLACK);

tft2.initR(INITR_BLACKTAB); //inicializace druhého displeje
tft2.setRotation(1);
tft2.fillScreen(ST7735_BLACK);
}

void loop()
{
tft1.setTextColor(ST7735_RED);
tft1.setTextSize(2);
tft2.setCursor(0, 0);
tft1.print("Displej 1");

tft2.setTextColor(ST7735_RED);
tft2.setTextSize(2);
tft2.setCursor(0, 0);
tft2.print("Displej 2");

}

No, a funguje jen druhý displej. První displej po startu zčerná, pal zbělá a nenapíše nic. Druhý displej pak zčerná a napíše text Displej 2. Jakoby inicializace druhého displeje ten první zastavila. Pokud smáznu inicializaci druhého displeje, první mi funguje, ale druhý samozřejmě ne.
Ale dva displeje fungují: https://learn.adafruit.com/animated-ele ... 1/overview Bohužel jsem začátečník a kód z tohoto příkladu jsem nerozlousknul. A má Angličtina je na tom mizerně.

Tak pokud někdo dokáže poradit, nakopnout mě tím správným směrem, budu rád.
Dík a přeji pěkný den!

ohruska
Příspěvky: 235
Registrován: 08 pro 2017, 20:56
Reputation: 0

Re: Dva displeje ST7735

Příspěvek od ohruska » 06 dub 2018, 12:58

Myslím, že tady je chyba:

Kód: Vybrat vše

tft1.setTextColor(ST7735_RED);
tft1.setTextSize(2);
tft2.setCursor(0, 0);
tft1.print("Displej 1");
Mělo by být všechno "tft1.";
Třeba to není ono, uvidíš...

petouf
Příspěvky: 18
Registrován: 28 zář 2017, 13:41
Reputation: 0

Re: Dva displeje ST7735

Příspěvek od petouf » 06 dub 2018, 13:40

Omlouvám se, to byl překlep, který jsem neopravil. Bohužel to není ono, ale dík za snahu...

jankop
Příspěvky: 1030
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: Dva displeje ST7735

Příspěvek od jankop » 06 dub 2018, 13:46

Mě se ještě nelíbí, že se to mele ve smyčce loop pořád dokola. Dal bych tam aspoň nějakou prodlevu, respektive střídání nápisů, ať vidíš že to něco dělá.

Kód: Vybrat vše

void setup(void)
{
tft1.initR(INITR_BLACKTAB); //inicializace prvního displeje
tft1.setRotation(1);
tft1.fillScreen(ST7735_BLACK);

tft2.initR(INITR_BLACKTAB); //inicializace druhého displeje
tft2.setRotation(1);
tft2.fillScreen(ST7735_BLACK);

tft1.setTextColor(ST7735_RED);
tft1.setTextSize(2);
tft2.setTextColor(ST7735_RED);
tft2.setTextSize(2);
}

void loop()
{
tft1.setCursor(0, 0);
tft1.print("Displej 1");
tft2.setCursor(0, 0);
tft2.print("Displej 2");
delay(1000)
tft1.setCursor(0, 0);
tft1.print("Ahoj    1");
tft2.setCursor(0, 0);
tft2.print("Ahoj    2");
delay(1000)
}

petouf
Příspěvky: 18
Registrován: 28 zář 2017, 13:41
Reputation: 0

Re: Dva displeje ST7735

Příspěvek od petouf » 06 dub 2018, 17:56

Jasně, v pondělí to zkusím, ale myslím, že jsem s tímto již také experimentoval. Asi si píchnu oscoloskop na ty CS1 a CS2 a kouknu, zda "pracují". Jakoby se navolil při inicializaci nejprve CS1, zinicializoval se 1. displej, pak se nahodí CS2, zinicializuje se druhý displej, ale CS1 se pak už nenahodí. Je to jen taková myšlenka, vyzkoušim v pondělí, bude-li čas. Co by pomohlo? jiné piny pro CS? Rozpitvat knihovnu? Ale pochybuji, že něco objevim,
z C++ znám jen základy. Ale musí to kruci jít, ne? No, uvidíme :)

petouf
Příspěvky: 18
Registrován: 28 zář 2017, 13:41
Reputation: 0

Re: Dva displeje ST7735

Příspěvek od petouf » 09 dub 2018, 09:27

Tak výstupy CS1 a Cs2 jsou funkční. Proč se tedy první displej po inicializaci druhého displeje zablokuje, to mi není jasné... :evil:
Třeba by to vyřešil nějaký převodník na I2C, ale nevim, zda něco takového vůbec existuje. Další věc je použít 2 arduina, ale to se mi také moc nechce. Ještě zabádám, ale moc nadějí si nedávám... :(

Uživatelský avatar
SkullKeep
Příspěvky: 290
Registrován: 23 srp 2017, 18:51
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: Dva displeje ST7735

Příspěvek od SkullKeep » 09 dub 2018, 10:10

Podle mne bych jeste zkusil dat na samostany piny TFT_RST a TFT_DC u kazdeho displaye. Snad se ukaze kde je chyba.
:twisted: :?: :arrow: :geek: P. Q. M.

petouf
Příspěvky: 18
Registrován: 28 zář 2017, 13:41
Reputation: 0

Re: Dva displeje ST7735

Příspěvek od petouf » 09 dub 2018, 12:13

No, krucipísek. Stačilo dát TFT_RST na samostatný pin a běhá to (zatím :) ) jako po másle. Jak jednoduché. Díky za postrčení....

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 4 hosti