Подключение двух tft дисплеев.
- Войдите на сайт для отправки комментариев
Втр, 06/02/2018 - 16:20
Здравствуйте. Пробовал искать, но гугл таких запросов не видел, только по 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); }
Не знаю, что у Вас за библиотека (и чего вы все секретность разводите), я смотрел вот этот файл, если у Вас другая - ищите сами примерно тоже.
Вы в строках 36 и 37 Вы вызываете initR. Он, в свою очередь, в строке 387 библиотеки вызывает commonInit. А commonInit в строке 362 устанавливает CS в LOW на кой-то хрен (то ли Луна в квадратном круге была, то ли Водолей Раком на Весы встал, но вот зачем-то автор это сделал). В результат Ваш второй initR слушают уже ОБА дисплея.
Вставьте в строку 372 библиотеки CS_HIGH(); и попробуйте. Будет глючить, ищите ещё такие же подарки от автора библиотеки. Так-то я глянул, вроде после всех операций он его обратно в HIGH ставит, но мож где чего и спряталось.
Не помогло.
Есть еще такая библиотека https://github.com/Bodmer/TFT_ST7735
Но там вообще потьма для меня пробовал в user_setup прописывать...не загружает в мегу. Всяк поразному попробовал, вообще тишина.
Не помогло, значит ищите ещё подобный косяк, я Вам говорил, что он там не один. Раз автор позволил себе такое раз, позволит и ещё раз. Принцип Вы теперь понимаете - в каждый момент времени, только один CS может быть LOW. Вот и ищите. Для начала я бы подключил оба CS к двум каналам осциллографа и посмотрел бы действительно ли они оба в какой-то моент в LOW переходят? Да, кстати, в Вашей-то программе перед строкой 36 загоните их в HIGH-то!
Вроде попроверил, дальше ошибок не нашел..
Ну, не нашёл, значит, не нашёл. Поймите, если два дисплей одновременно показывают одно и тоже (хотя бы частично) может означать ровно две вещи: или Вы им передаёте одно и тоже, или в момент передачи одному, у другого CS тоже находится в состоянии LOW. Других вариантов просто нет. Так что ищите внимательно.
Ну, не нашёл, значит, не нашёл. Поймите, если два дисплей одновременно показывают одно и тоже (хотя бы частично) может означать ровно две вещи: или Вы им передаёте одно и тоже, или в момент передачи одному, у другого CS тоже находится в состоянии LOW. Других вариантов просто нет. Так что ищите внимательно.
Они показывают одно и тоже при инициализации 1-го дисплея. При вписывании 2-го, показывает только один, второй молчит(там при ресете сразу не надолго что-то рисует и все-белый экран)
А в самой библиотеке CS только один должен числится или там тоже надо как-то разделять?
Вы до сих пор не сказали мне что у Вас за библиотека. Та, что я смотрел? Или другая? Давайте ссылку. Только пожалуйста, не надо писать: "я пробовал с 10-ю" - я не буду смотреть 10. Дайте одну ссылку.
и если не трудно фотку, чего там как подключено.
Вы до сих пор не сказали мне что у Вас за библиотека. Та, что я смотрел? Или другая? Давайте ссылку. Только пожалуйста, не надо писать: "я пробовал с 10-ю" - я не буду смотреть 10. Дайте одну ссылку.
Да библиотека которую Вы смотрели.
и если не трудно фотку, чего там как подключено.
Вот так оба CS на разные ноги.
Так вот работает сейчас:
https://www.youtube.com/watch?v=PGCXw58qX5Q&feature=youtu.be
нет доступа на видео !
нет доступа на видео !
Открыл.
мне кажется странным выбор ног для сигналов CS
на них висит SPI, попробуйте уйти к ногам 48,49
мне кажется странным выбор ног для сигналов CS
на них висит SPI, попробуйте уйти к ногам 48,49
Тоже самое
хорошо, тестер есть, ткнуть в CS1 и CS2 (прям где шлейф) и простенький скетч LOW/HIGH на эти ноги
да и еще, а если поменять местами CS1 СS2 левый экран оживает или что происходит ?
хорошо, тестер есть, ткнуть в CS1 и CS2 (прям где шлейф) и простенький скетч LOW/HIGH на эти ноги
да и еще, а если поменять местами CS1 СS2 левый экран оживает или что происходит ?
Да, левый оживает, правый наоборот)) Можно попроще что на тестере и что мерять..и пример скетча(на словах)
....далек я еще от программирования...только втягиваюсь
не ну если так, не надо ничего мерить.
хорошо, если закоментировать строки касающиеся правого экрана, левый оживет ?
не ну если так, не надо ничего мерить.
хорошо, если закоментировать строки касающиеся правого экрана, левый оживет ?
Оба диспа рисуют одно и тоже синхронно.
провод CS с левого выдерните, перестает показывать ?
провод CS с левого выдерните, перестает показывать ?
Нет, так же синхронно
так ептит, это говорит о том что CS1 и СS2 замкнуты на плате, или оба притянуты к земле.
выдерните CS у второго экрана, если кажут, то CS у обоих на земле.
эта типа делители для 3.3 в ?
куда верхнии выводы подлючены ?
так ептит, это говорит о том что CS1 и СS2 замкнуты на плате, или оба притянуты к земле.
выдерните CS у второго экрана, если кажут, то CS у обоих на земле.
эта типа делители для 3.3 в ?
куда верхнии выводы подлючены ?
Да показывают если оба CS выдернуты.
Да делители. Верхние на земле. Тоесть оба убрать с земли?
уберите верние сопротивления на CS1 и CS2
хотя подождите, номиналы резисторов верхних и нижних на ногах CS какие ?
уберите верние сопротивления на CS1 и CS2
хотя подождите, номиналы резисторов верхних и нижних на ногах CS какие ?
Пардон.. верхние 1000 Ом нижние 390
тока на свой страх и риск !!!
я работал с этими дисплеями напрямую от 5 вольт, хотя везде пишут ахтунг 3.3 вольта !!
уберите верние сопротивления на CS1 и CS2 (НА СВОЙ СТРАХ И РИСК !!!!!!!!!!)
СТОППП !!!
тока на свой страх и риск !!!
я работал с этими дисплеями напрямую от 5 вольт, хотя везде пишут ахтунг 3.3 вольта !!
уберите верние сопротивления на CS1 и CS2 (НА СВОЙ СТРАХ И РИСК !!!!!!!!!!)
СТОППП !!!
Что стоп?
для делителя я бы поставил верхний 20к нижний 10k.
простор проверил, да я подключал к 5 вольтам, только шилд, все работало.
попробуйте....
для делителя я бы поставил верхний 20к нижний 10k.
простор проверил, да я подключал к 5 вольтам, только шилд, все работало.
попробуйте....
Дак пробовать менять резисторы или убирать верхний?
убрать верхний
убрать верхний
Верхний убрал, нижний поставил 10 кОм. Теже яйца...
Работвет только левый хоть как, даже при отключенных CS/
Если в скетче поменять CS местами, то только правый
Нет больше мыслей, что делать?
Нубский вопрос... В библиотеке надо что-то менять, чтобы прописывать второй дисп. Или там так и должен значится один CS и остальное?
Он там не один. Там он свой на каждый экземпляр.
А мысли есть, Вам их выскахывают, только Вы не делаете.
Для начала я бы подключил оба CS к двум каналам осциллографа и посмотрел бы действительно ли они оба в какой-то моент в LOW переходят?
Он там не один. Там он свой на каждый экземпляр.
А мысли есть, Вам их выскахывают, только Вы не делаете.
Для начала я бы подключил оба CS к двум каналам осциллографа и посмотрел бы действительно ли они оба в какой-то моент в LOW переходят?
Осциллографа нет. Без него как то могу померять?
Ну, подумайте, Вам нужно поймать момент, когда оба они LOW и понять почему они оба сваливаются в LOW
Ну, подумайте, Вам нужно поймать момент, когда оба они LOW и понять почему они оба сваливаются в LOW
Ок. Попробую киповцам завтра снести, у них всяко есть. Потом отпишусь. А аппаратно тоже может быть где ошибка? Или нет, по схеме выше.
Не знаю. Но на данном этапе это неважно. Вы не прыгайте через ступеньки.
Давайте для начала убедимся (или опровергнем), что в какой-то моент оба CS ложатся в LOW. Эсли это так, то вот тогда начнём искать почему и при каких обстоятельствах и там уж будем смотреть программно или аппаратно.
А вот если эот не так, то будем дальше думать.
Не знаю. Но на данном этапе это неважно. Вы не прыгайте через ступеньки.
Давайте для начала убедимся (или опровергнем), что в какой-то моент оба CS ложатся в LOW. Эсли это так, то вот тогда начнём искать почему и при каких обстоятельствах и там уж будем смотреть программно или аппаратно.
А вот если эот не так, то будем дальше думать.
Короче с осциллографом проблемы... В двух сервисах одноканальные, в двух-сервисмены настолько грамотные, что сказали, что померять могут только конденсаторы...большее не умеют.
Заметил тут такую штуку, при подключении питания, на обоих появляется мусор(инициализация проходит?), потом один уходит в ресет и далее выводит инфу, а второй просто гаснет(остается только подсветка). Это может что-нибудь подсказать?
Где-то проблем с инициализацией..Двигаю эту строку, дисплей оживает до инициализации второго.
Короче с осциллографом проблемы... В двух сервисах одноканальные, в двух-сервисмены настолько грамотные, что сказали, что померять могут только конденсаторы...большее не умеют.
а если вот такая глупая идея вместо осциллографа- просто завести два пина CS на другой МК и написать простенький скетч, который постоянно бы проверял уровень на этих пинах, и если они одновременно LOW - зажигал бы светодиод?
Короче с осциллографом проблемы... В двух сервисах одноканальные, в двух-сервисмены настолько грамотные, что сказали, что померять могут только конденсаторы...большее не умеют.
а если вот такая глупая идея вместо осциллографа- просто завести два пина CS на другой МК и написать простенький скетч, который постоянно бы проверял уровень на этих пинах, и если они одновременно LOW - зажигал бы светодиод?
Вторая плата ардуино есть, загвоздка только в том, что программист из меня пока только где-то в самом начале пути)
а если вот такая глупая идея вместо осциллографа- просто завести два пина CS на другой МК и написать простенький скетч, который постоянно бы проверял уровень на этих пинах, и если они одновременно LOW - зажигал бы светодиод?
Хорошая идея.
Только 2354resd, не забудьте земли этих ардуин объединить вместе.
Может так правильно?
Может так правильно?
Пробовал..
а если вот такая глупая идея вместо осциллографа- просто завести два пина CS на другой МК и написать простенький скетч, который постоянно бы проверял уровень на этих пинах, и если они одновременно LOW - зажигал бы светодиод?
Хорошая идея.
Только 2354resd, не забудьте земли этих ардуин объединить вместе.
Что то типа этого? http://arduino.ru/forum/proekty/vyzhimaem-maksimum-usb-ostsillograf-na-arduino
или http://compcar.ru/forum/showthread.php?t=4457
Если несложно, подскажите как на 2 канала сделать?
Что то типа этого? http://arduino.ru/forum/proekty/vyzhimaem-maksimum-usb-ostsillograf-na-arduino
или http://compcar.ru/forum/showthread.php?t=4457
Если несложно, подскажите как на 2 канала сделать?
Да зачем???? Эк куда хватили!
Читаете один пин CS, читаете другой - если оба LOW - зажигаете светодиод. Строк 10 максимум... Ща напишу.
CS от обоих дисплеев подключаете к пинам 4 и 5 (или переопределите в первых строчках). Обе платы должны быть на одно напряжение - либо обе 5в, либо 3.3. Пины 5в (для 5в плат, или 3.3 для 3.3 плат) двух плат соединяете, GND обоих плат тоже. Питание подавать только на одну плату. Светик используется встроенный.
Начинает моргать сразу при включении шнура, потом когда появляется мусор 1-го диспа, не моргает
Всяко попробовал поперетыкать, ничо не получается. Что ещё можно попробовать?
Уважаемые Гуру, подскажите что дальше то сделать можно? Или докупить второй контроллер и непариться?__)
Сейчас попробовал проверить оба диспа поотдельности (все кроме CS в параллели)на ардуино нано.(хз почему раньше не делал). Получилась такая штука: подключаю 1-ый дисплей полностью...ничего не происходит(горит подсветка и все). Перекидываю CS на второй дисп= первый начинает играть тест, второй так и остается молчать...
Проверил все по схеме вроде все контачит, нигде не коротит.
Попробуйте соединить CS .
Возможно CS - 0 один экран
CS -1 второй