Подключение двух tft дисплеев.

2354resd
Offline
Зарегистрирован: 21.11.2017

Здравствуйте. Пробовал искать, но гугл таких запросов не видел, только по l2c :)

Есть два дисплея на ST7735 подключаю параллельно по SPI. Только CS болтаются на разных ногах ардуино. Вообщем, при обычном примере с 1 дисплеем показывают оба одно и тоже. При моих попытках прописать второй дисп, один показывает инфу с 1 и 2-го поверх друг друга, второй при запуске на секунду показывает то что надо, но перевернуто и ч-б цветом, потом тупо подсветка....

Подскажите где и что копать чтоб заработали оба с выводом разной инфы. Заранее спасибо.

 



#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_ST7735.h> // Hardware-specific library
#include <SPI.h>


// For the breakout, you can use any 2 or 3 pins
// These pins will also work for the 1.8" TFT shield
#define TFT1_CS     53
#define TFT2_CS     50
#define TFT1_RST    8  // you can also connect this to the Arduino reset
                      // in which case, set this #define pin to -1!
#define TFT2_RST    8  // you can also connect this to the Arduino reset
                      // in which case, set this #define pin to -1!
#define TFT1_DC     9
#define TFT2_DC     9
// Option 1 (recommended): must use the hardware SPI pins
// (for UNO thats sclk = 13 and sid = 11) and pin 10 must be
// an output. This is much faster - also required if you want
// to use the microSD card (see the image drawing example)
//Adafruit_ST7735 tft1 = Adafruit_ST7735(TFT1_CS,  TFT1_DC, TFT1_RST);
//Adafruit_ST7735 tft2 = Adafruit_ST7735(TFT2_CS,  TFT2_DC, TFT2_RST);

// Option 2: use any pins but a little slower!
#define TFT1_SCLK 52   // set these to be whatever pins you like!
#define TFT2_SCLK 52   // set these to be whatever pins you like!

#define TFT1_MOSI 51   // set these to be whatever pins you like!
#define TFT2_MOSI 51   // set these to be whatever pins you like!
Adafruit_ST7735 tft1 = Adafruit_ST7735(TFT1_CS, TFT1_DC, TFT1_MOSI, TFT1_SCLK, TFT1_RST);
Adafruit_ST7735 tft2 = Adafruit_ST7735(TFT2_CS, TFT2_DC, TFT2_MOSI, TFT2_SCLK, TFT2_RST);

void setup(void) {
  Serial.begin(9600);
  Serial.print("Hello! ST7735 TFT Test");
  // Инициализация TFT
  tft1.initR(INITR_BLACKTAB);   // initialize a ST7735S chip, black tab
  tft2.initR(INITR_BLACKTAB);   // initialize a ST7735S chip, black tab

  Serial.println("Initialized");

  uint16_t time = millis();
  tft1.fillScreen(ST7735_BLACK);
  tft2.fillScreen(ST7735_BLACK);
  time = millis() - time;

  Serial.println(time, DEC);
  delay(500);

  // large block of text
  tft1.fillScreen(ST7735_RED); 
  tft1.setTextSize(3);                              //тут заставка
                                                    //тут заставка
  testdrawtext("HELLO ", ST7735_BLACK);
  delay(4000);
  // large block of text
  tft2.fillScreen(ST7735_BLUE);
  testdrawtext("HELLO", ST7735_BLACK);
  delay(4000); 
  
  Serial.println("done");
  delay(1000);
}

void testdrawtext(char *text, uint16_t color) {
  
  tft1.setCursor(20, 40);
  tft1.setTextColor(color);
  tft1.setTextWrap(true);
  tft1.print(text);
  
  tft2.setCursor(20, 20);
  tft2.setTextColor(color);
  tft2.setTextWrap(true);
  tft2.print(text);
}

void loop() {
digitalWrite(TFT1_CS, HIGH);

digitalWrite(TFT2_CS, HIGH);

 

digitalWrite(TFT1_CS, LOW); // пишем во 2 дисплей

tft1.fillScreen(ST7735_BLUE);

testdrawtext("HELLO PEOPLE ", ST7735_BLACK);

digitalWrite(TFT2_CS, HIGH);



digitalWrite(TFT2_CS, LOW); // пишем в 1 дисплей

tft2.fillScreen(ST7735_RED);

testdrawtext("HELLO WORLD ", ST7735_GREEN);

digitalWrite(TFT1_CS, HIGH);
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

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

Вы в строках 36 и 37 Вы вызываете initR. Он, в свою очередь, в строке 387 библиотеки вызывает commonInit. А commonInit в строке 362 устанавливает CS в LOW на кой-то хрен (то ли Луна в квадратном круге была, то ли Водолей Раком на Весы встал, но вот зачем-то автор это сделал). В результат Ваш второй initR слушают уже ОБА дисплея.

Вставьте в строку 372 библиотеки CS_HIGH(); и попробуйте. Будет глючить, ищите ещё такие же подарки от автора библиотеки. Так-то я глянул, вроде после всех операций он его обратно в HIGH ставит, но мож где чего и спряталось.

2354resd
Offline
Зарегистрирован: 21.11.2017

Не помогло.

Есть еще такая библиотека https://github.com/Bodmer/TFT_ST7735 

Но там вообще потьма для меня пробовал в user_setup прописывать...не загружает в мегу. Всяк поразному попробовал, вообще тишина.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Не помогло, значит ищите ещё подобный косяк, я Вам говорил, что он там не один. Раз автор позволил себе такое раз, позволит и ещё раз. Принцип Вы теперь понимаете - в каждый момент времени, только один CS может быть LOW. Вот и ищите. Для начала я бы подключил оба CS к двум каналам осциллографа и посмотрел бы действительно ли они оба в какой-то моент в LOW переходят? Да, кстати, в Вашей-то программе перед строкой 36 загоните их в HIGH-то!

2354resd
Offline
Зарегистрирован: 21.11.2017

Вроде попроверил, дальше ошибок не нашел..

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, не нашёл, значит, не нашёл. Поймите, если два дисплей одновременно показывают одно и тоже (хотя бы частично) может означать ровно две вещи: или Вы им передаёте одно и тоже, или в момент передачи одному, у другого CS тоже находится в состоянии LOW. Других вариантов просто нет. Так что ищите внимательно.

2354resd
Offline
Зарегистрирован: 21.11.2017

ЕвгенийП пишет:

Ну, не нашёл, значит, не нашёл. Поймите, если два дисплей одновременно показывают одно и тоже (хотя бы частично) может означать ровно две вещи: или Вы им передаёте одно и тоже, или в момент передачи одному, у другого CS тоже находится в состоянии LOW. Других вариантов просто нет. Так что ищите внимательно.

Они показывают одно и тоже при инициализации 1-го дисплея. При вписывании 2-го, показывает только один, второй молчит(там при ресете сразу не надолго что-то рисует и все-белый экран)

А в самой библиотеке CS только один должен числится или там тоже надо как-то разделять?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Вы до сих пор не сказали мне что у Вас за библиотека. Та, что я смотрел? Или другая? Давайте ссылку. Только пожалуйста, не надо писать: "я пробовал с 10-ю" - я не буду смотреть 10. Дайте одну ссылку.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

и если не трудно фотку, чего там как подключено.

2354resd
Offline
Зарегистрирован: 21.11.2017

ЕвгенийП пишет:

Вы до сих пор не сказали мне что у Вас за библиотека. Та, что я смотрел? Или другая? Давайте ссылку. Только пожалуйста, не надо писать: "я пробовал с 10-ю" - я не буду смотреть 10. Дайте одну ссылку.

Да библиотека которую Вы смотрели.

2354resd
Offline
Зарегистрирован: 21.11.2017

xDriver пишет:

и если не трудно фотку, чего там как подключено.

Вот так оба CS на разные ноги.

Так вот работает сейчас:

https://www.youtube.com/watch?v=PGCXw58qX5Q&feature=youtu.be

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

нет доступа на видео !

2354resd
Offline
Зарегистрирован: 21.11.2017

xDriver пишет:

нет доступа на видео !

Открыл.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

мне кажется странным выбор ног для сигналов CS

#define TFT1_CS     53

#define TFT2_CS     50

на них  висит SPI, попробуйте уйти к ногам 48,49

#define TFT1_CS     48

#define TFT1_CS     49

 

2354resd
Offline
Зарегистрирован: 21.11.2017

xDriver пишет:

мне кажется странным выбор ног для сигналов CS

#define TFT1_CS     53

#define TFT2_CS     50

на них  висит SPI, попробуйте уйти к ногам 48,49

#define TFT1_CS     48

#define TFT1_CS     49

 

Тоже самое

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

хорошо, тестер есть, ткнуть в CS1 и CS2  (прям где шлейф) и простенький скетч LOW/HIGH на эти ноги

да и еще, а если поменять местами CS1 СS2 левый экран оживает или что происходит ?

2354resd
Offline
Зарегистрирован: 21.11.2017

xDriver пишет:

хорошо, тестер есть, ткнуть в CS1 и CS2  (прям где шлейф) и простенький скетч LOW/HIGH на эти ноги

да и еще, а если поменять местами CS1 СS2 левый экран оживает или что происходит ?

Да, левый оживает, правый наоборот)) Можно попроще что на тестере и что мерять..и пример скетча(на словах)

....далек я еще от программирования...только втягиваюсь

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

не ну если так, не надо ничего мерить.

хорошо, если закоментировать строки касающиеся правого экрана, левый оживет ?

2354resd
Offline
Зарегистрирован: 21.11.2017

xDriver пишет:

не ну если так, не надо ничего мерить.

хорошо, если закоментировать строки касающиеся правого экрана, левый оживет ?

Оба диспа рисуют одно и тоже синхронно.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

провод CS с левого выдерните, перестает показывать ?

2354resd
Offline
Зарегистрирован: 21.11.2017

xDriver пишет:

провод CS с левого выдерните, перестает показывать ?

Нет, так же синхронно

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

так ептит, это говорит о том что CS1 и СS2 замкнуты на плате, или оба притянуты к земле.

выдерните CS у второго экрана, если кажут, то CS у обоих на земле.

эта типа делители для 3.3 в ?

куда верхнии выводы подлючены ?

2354resd
Offline
Зарегистрирован: 21.11.2017

xDriver пишет:

так ептит, это говорит о том что CS1 и СS2 замкнуты на плате, или оба притянуты к земле.

выдерните CS у второго экрана, если кажут, то CS у обоих на земле.

эта типа делители для 3.3 в ?

куда верхнии выводы подлючены ?

Да показывают если оба CS выдернуты. 

Да делители. Верхние на земле. Тоесть оба убрать с земли?

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

уберите верние сопротивления на CS1 и CS2

хотя подождите, номиналы резисторов верхних и нижних на ногах CS какие ?

2354resd
Offline
Зарегистрирован: 21.11.2017

xDriver пишет:

уберите верние сопротивления на CS1 и CS2

хотя подождите, номиналы резисторов верхних и нижних на ногах CS какие ?

Пардон..  верхние 1000 Ом нижние 390

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

тока на свой страх и риск !!!

я работал с этими дисплеями напрямую от 5 вольт, хотя везде пишут ахтунг 3.3 вольта !!

уберите верние сопротивления на CS1 и CS2 (НА СВОЙ СТРАХ И РИСК !!!!!!!!!!)

 

СТОППП !!!

2354resd
Offline
Зарегистрирован: 21.11.2017

xDriver пишет:

тока на свой страх и риск !!!

я работал с этими дисплеями напрямую от 5 вольт, хотя везде пишут ахтунг 3.3 вольта !!

уберите верние сопротивления на CS1 и CS2 (НА СВОЙ СТРАХ И РИСК !!!!!!!!!!)

 

СТОППП !!!

Что стоп?

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

для делителя я бы поставил верхний 20к нижний 10k.

простор проверил, да я подключал к 5 вольтам, только шилд, все работало.

попробуйте....

2354resd
Offline
Зарегистрирован: 21.11.2017

xDriver пишет:

для делителя я бы поставил верхний 20к нижний 10k.

простор проверил, да я подключал к 5 вольтам, только шилд, все работало.

попробуйте....

Дак пробовать менять резисторы или убирать верхний?

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

убрать верхний

2354resd
Offline
Зарегистрирован: 21.11.2017

xDriver пишет:

убрать верхний

Верхний убрал, нижний поставил 10 кОм. Теже яйца...

Работвет только левый хоть как, даже при отключенных CS/

Если в скетче поменять CS местами, то только правый

2354resd
Offline
Зарегистрирован: 21.11.2017

Нет больше мыслей, что делать? 

Нубский вопрос... В библиотеке надо что-то менять, чтобы прописывать второй дисп. Или там так и должен значится один CS и остальное?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Он там не один. Там он свой на каждый экземпляр.

А мысли есть, Вам их выскахывают, только Вы не делаете.

ЕвгенийП пишет:

Для начала я бы подключил оба CS к двум каналам осциллографа и посмотрел бы действительно ли они оба в какой-то моент в LOW переходят?

2354resd
Offline
Зарегистрирован: 21.11.2017

ЕвгенийП пишет:

Он там не один. Там он свой на каждый экземпляр.

А мысли есть, Вам их выскахывают, только Вы не делаете.

ЕвгенийП пишет:

Для начала я бы подключил оба CS к двум каналам осциллографа и посмотрел бы действительно ли они оба в какой-то моент в LOW переходят?

Осциллографа нет. Без него как то могу померять? 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, подумайте, Вам нужно поймать момент, когда оба они LOW и понять почему они оба сваливаются в LOW

2354resd
Offline
Зарегистрирован: 21.11.2017

ЕвгенийП пишет:

Ну, подумайте, Вам нужно поймать момент, когда оба они LOW и понять почему они оба сваливаются в LOW

Ок. Попробую киповцам завтра снести, у них всяко есть. Потом отпишусь.   А аппаратно тоже может быть где ошибка? Или нет, по схеме выше.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Не знаю. Но на данном этапе это неважно. Вы не прыгайте через ступеньки.

Давайте для начала убедимся (или опровергнем), что в какой-то моент оба CS ложатся в LOW. Эсли это так, то вот тогда начнём искать почему и при каких обстоятельствах и там уж будем смотреть программно или аппаратно.

А вот если эот не так, то будем дальше думать.

2354resd
Offline
Зарегистрирован: 21.11.2017

ЕвгенийП пишет:

Не знаю. Но на данном этапе это неважно. Вы не прыгайте через ступеньки.

Давайте для начала убедимся (или опровергнем), что в какой-то моент оба CS ложатся в LOW. Эсли это так, то вот тогда начнём искать почему и при каких обстоятельствах и там уж будем смотреть программно или аппаратно.

А вот если эот не так, то будем дальше думать.

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

Заметил тут такую штуку, при подключении питания, на обоих появляется мусор(инициализация проходит?), потом один уходит в ресет и далее выводит инфу, а второй просто гаснет(остается только подсветка). Это может что-нибудь подсказать?

Где-то проблем с инициализацией..Двигаю эту строку, дисплей оживает до инициализации второго.

b707
Offline
Зарегистрирован: 26.05.2017

2354resd пишет:

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

а если вот такая глупая идея вместо осциллографа-  просто завести два пина CS на другой МК и написать простенький скетч, который постоянно бы проверял уровень на этих пинах, и если они одновременно LOW - зажигал бы светодиод?

2354resd
Offline
Зарегистрирован: 21.11.2017

b707 пишет:

2354resd пишет:

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

а если вот такая глупая идея вместо осциллографа-  просто завести два пина CS на другой МК и написать простенький скетч, который постоянно бы проверял уровень на этих пинах, и если они одновременно LOW - зажигал бы светодиод?

Вторая плата ардуино есть, загвоздка только в том, что программист из меня пока только где-то в самом начале пути)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

b707 пишет:

а если вот такая глупая идея вместо осциллографа-  просто завести два пина CS на другой МК и написать простенький скетч, который постоянно бы проверял уровень на этих пинах, и если они одновременно LOW - зажигал бы светодиод?

Хорошая идея.

Только 2354resd, не забудьте земли этих ардуин объединить вместе.

GraninDm
Offline
Зарегистрирован: 01.08.2013
digitalWrite(TFT1_CS, HIGH);
digitalWrite(TFT2_CS, HIGH);
digitalWrite(TFT1_CS, LOW); // пишем во 1 дисплей
tft1.fillScreen(ST7735_BLUE);
testdrawtext("HELLO PEOPLE ", ST7735_BLACK);
digitalWrite(TFT1_CS, HIGH);
digitalWrite(TFT2_CS, LOW); // пишем в 2 дисплей
tft2.fillScreen(ST7735_RED);
testdrawtext("HELLO WORLD ", ST7735_GREEN);
digitalWrite(TFT2_CS, HIGH);

Может так правильно?

2354resd
Offline
Зарегистрирован: 21.11.2017

GraninDm пишет:

digitalWrite(TFT1_CS, HIGH);
digitalWrite(TFT2_CS, HIGH);
digitalWrite(TFT1_CS, LOW); // пишем во 1 дисплей
tft1.fillScreen(ST7735_BLUE);
testdrawtext("HELLO PEOPLE ", ST7735_BLACK);
digitalWrite(TFT1_CS, HIGH);
digitalWrite(TFT2_CS, LOW); // пишем в 2 дисплей
tft2.fillScreen(ST7735_RED);
testdrawtext("HELLO WORLD ", ST7735_GREEN);
digitalWrite(TFT2_CS, HIGH);

Может так правильно?

Пробовал..

2354resd
Offline
Зарегистрирован: 21.11.2017

ЕвгенийП пишет:

b707 пишет:

а если вот такая глупая идея вместо осциллографа-  просто завести два пина CS на другой МК и написать простенький скетч, который постоянно бы проверял уровень на этих пинах, и если они одновременно LOW - зажигал бы светодиод?

Хорошая идея.

Только 2354resd, не забудьте земли этих ардуин объединить вместе.

Что то типа этого? http://arduino.ru/forum/proekty/vyzhimaem-maksimum-usb-ostsillograf-na-arduino

или  http://compcar.ru/forum/showthread.php?t=4457

Если несложно, подскажите как на 2 канала сделать? 

b707
Offline
Зарегистрирован: 26.05.2017

2354resd пишет:

Что то типа этого? http://arduino.ru/forum/proekty/vyzhimaem-maksimum-usb-ostsillograf-na-arduino

или  http://compcar.ru/forum/showthread.php?t=4457

Если несложно, подскажите как на 2 канала сделать? 

Да зачем???? Эк куда хватили!

Читаете один пин CS, читаете другой - если оба LOW - зажигаете светодиод. Строк 10 максимум... Ща напишу.

 

b707
Offline
Зарегистрирован: 26.05.2017
#define CS1 4
#define CS2 5
#define LED 13

void setup() {
pinMode(CS1, INPUT_PULLUP);
pinMode(CS2, INPUT_PULLUP);
pinMode(LED, OUTPUT);
}
void loop() {
if (  (! digitalRead(CS1) ) &&  (! digitalRead(CS2) ) ) digitalWrite(LED, HIGH);
else digitalWrite(LED, LOW);
}

CS от обоих дисплеев подключаете к пинам 4 и 5 (или переопределите в первых строчках). Обе платы должны быть на одно напряжение - либо обе 5в, либо 3.3.  Пины 5в (для 5в плат, или 3.3 для 3.3 плат) двух плат соединяете, GND обоих плат тоже. Питание подавать только на одну плату. Светик используется встроенный.

2354resd
Offline
Зарегистрирован: 21.11.2017

Начинает моргать сразу при включении шнура, потом когда появляется мусор 1-го диспа, не моргает

2354resd
Offline
Зарегистрирован: 21.11.2017

Всяко попробовал поперетыкать, ничо не получается. Что ещё можно попробовать?

2354resd
Offline
Зарегистрирован: 21.11.2017

Уважаемые Гуру, подскажите что дальше то сделать можно? Или докупить второй контроллер и непариться?__)

2354resd
Offline
Зарегистрирован: 21.11.2017

Сейчас попробовал проверить оба диспа поотдельности (все кроме CS в параллели)на ардуино нано.(хз почему раньше не делал). Получилась такая штука: подключаю 1-ый дисплей полностью...ничего не происходит(горит подсветка и все). Перекидываю CS  на второй дисп= первый начинает играть тест, второй так и остается молчать...

Проверил все по схеме вроде все контачит, нигде не коротит.

borisych
Offline
Зарегистрирован: 21.02.2018

Попробуйте соединить CS .

Возможно CS - 0 один экран

                CS -1 второй