#1 2018-06-05 09:42:25

Plumazh
Учасник
Зареєстрований: 2017-03-17
Повідомлень: 24

2.8" 240x320 TFT LCD SPI модуль работа с SD

Добрый день! Помогите подружить 2.8" 240x320 TFT LCD SPI модуль
Источник http://arduino.ua/prod1539-2-4-tft-lcd-spi-displei
с его же SD картой
По одному по SPI и то и другое работает нормально :
Экран прописывает текст, очищается и т. д.
Но как только прошло обращение к SD карте экран прекращает реагировать на что-либо.
Имея малюсенький опыт понимаю что связано это с сигналами CS экрана и карты. Может неправильно соединяю?
У SD свои пины SPI у экрана свои, я их соединил соосно, SD экрана подал на 10 пин Ардуино УНО а CS_SD на 2-й.
в скетче следующее :


#include <SPI.h>
#include <SD.h>

#include "Adafruit_GFX.h"     // Библиотека обработчика графики#include "Adafruit_ILI9341.h" // Программные драйвера для дисплеев ILI9341
#include "URTouch.h"          // Библиотека для работы с сенсорным экраном
#define TFT_DC 9              // Пин подключения вывода D/C дисплея
#define TFT_CS 10             // Пин подключения вывода CS дисплея
#define TFT_RST 8             // Пин подключения вывода RESET
#define TFT_MISO 12           // Пин подключения вывода дисплея SDO(MISO)
#define TFT_MOSI 11           // Пин подключения вывода дисплея SDI(MOSI)
#define TFT_CLK 13            // Пин подключения вывода дисплея SCK
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);
#define t_SCK 3               // Пин подключения вывода дисплея T_CLK
#define t_CS 4                // Пин подключения вывода дисплея T_CS
#define t_MOSI 5              // Пин подключения вывода дисплея T_DIN
#define t_MISO 6              // Пин подключения вывода дисплея T_DOUT
#define t_IRQ 7               // Пин подключения вывода дисплея T_IRQ
URTouch ts(t_SCK, t_CS, t_MOSI, t_MISO, t_IRQ);
#define SD_CS 2

......

void setup(){ 
Serial.begin(9600); 
tft.begin();                       
tft.setRotation(1);         
ts.InitTouch();         
ts.setPrecision(PREC_EXTREME); 
tft.setTextColor(ILI9341_WHITE); 
tft.setTextSize(2);                 
tft.setCursor(55,5);             
tft.print(utf8rus("Тестируем") + " TouchTFT");   
tft.setTextColor(ILI9341_GREEN); 
tft.setCursor(10,25);               
tft.print("Initializing SD card...");   
tft.setCursor(10,205);   
if (!SD.begin(SD_CS)) {   tft.print("failed!");  } else {    tft.print("\nOK!");} 
tft.setCursor(20,220);           
tft.print(utf8rus("Экран и карта готовы ") );   
}

   Надписи failed или ОК не отображаются.

   Где я не прав! Как их вместе заставить заработать?

Остання редакція Plumazh (2018-06-05 09:45:14)

Неактивний

#2 2018-06-05 11:05:41

Вячеслав Азаров
Учасник
Зареєстрований: 2017-05-25
Повідомлень: 1,732

Re: 2.8" 240x320 TFT LCD SPI модуль работа с SD

Plumazh пише:

Добрый день! Помогите подружить 2.8" 240x320 TFT LCD SPI модуль
Источник http://arduino.ua/prod1539-2-4-tft-lcd-spi-displei
с его же SD картой
По одному по SPI и то и другое работает нормально :
Экран прописывает текст, очищается и т. д.
Но как только прошло обращение к SD карте экран прекращает реагировать на что-либо.
Имея малюсенький опыт понимаю что связано это с сигналами CS экрана и карты. ... Может неправильно соединяю? Где я не прав! Как их вместе заставить заработать?

Все правильно работает, так как и должно. Во время работы SD не работает TFT и наоборот. Руководствуясь бытовой логикой, очевидно, что необходимо что-бы эти программные модули работали параллельно. Для этого нужен, как минимум, многозадачный мониор или какая нибудь многозадачная ОС. Касательно Ардуино, можете попробовать применить библиотеку Thread или FreeRTOS или uMT, на ваш "вкус". И не забудьте про необходимость взаимно исключающего арбитража доступа к SPI и достаточное количество памяти для стеков.

Неактивний

#3 2018-06-05 11:28:33

Plumazh
Учасник
Зареєстрований: 2017-03-17
Повідомлень: 24

Re: 2.8" 240x320 TFT LCD SPI модуль работа с SD

Спасибо! Решил несколько по другому, библиотека Adafruit_ILI9341.h для TFT использует программный SPI который и не дает работать аппаратному или наоборот. назначил пины TFT_SPI 15,14,16 (пришлось использовать аналоговые, цифровых не хватило ) а контроллер SD посадил на аппаратный SPI. Все заработало. Но за совет спасибо прислушаюсь попробую разобраться с "арбитражем доступа к SPI и достаточное количество памяти для стеков" хотя пока звучит СТРАШНО и НЕПОНЯТНО.

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму