i2c + TFT на Arduino Uno

switch
Offline
Зарегистрирован: 07.12.2015

Есть arduino uno с дисплеем 3.2 дюйма TFT. Проблема простая: не хватает ног. Одна нога  занята для 1-wire, как я понял еще свободна  одна нога - A5. Мне конечно для управления нужно больше, я поставил расширитель через i2c на PCF8574. Только вот как я понял порт А4 тоже занят диплеем:

#define YP A2  
#define XM A1 
#define YM  6 
#define XP  7 
 
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);
UTFT myGLCD(31,A2,A1,A3,A4);
Кто-нибудь знает можно ли перекинуть на  другой порт вместо A4? Кто-нибудь может сказать, сколько там пинов занято вообще? Я думаю для Uno все дисплеи примерно одинаковые. У меня такое чудо:
switch
Offline
Зарегистрирован: 07.12.2015

Товарищи, подскажите, кто знает. Можно ли сигнал в инициализации UTFT myGLCD(31,A2,A1,A3,A4); перенести на  другой пин? Какие пины тут вообще свободны у ардуины?

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

все можно перенести .  подменив аппаратно и програмно (в вызовах тача и дисплея). 

//

дополнительно  можно вообще выкинуть LCD_RD -A0 ,  LCD_CS -A3 , LCD_RST -A4 ,.   как раз на UTFT так делал и выкладывал в теме про диспы.  Оставить только необходимые для вывода графики  LCD_WR -A1  и LCD_CD(RS)  -A2  и , на них к стати и тач висит. 

//// если карту памяти не используете то с этим шилдом свободны 7(9)пинов  D0 , D1 ,  D10 ,  D11 , D12 , D13 . A5 (A6 A7- выведены в нано, мини, и некоторых уно) 

при аппаратном и програмном вырезании RD CS RST получаете свободными 10(12) пинов.

switch
Offline
Зарегистрирован: 07.12.2015

Спасибо большое за ответ. Я пробую припаять пин RST с A4 на 10-й. В конструктор класса передаю вместо

UTFT myGLCD(31,A2,A1,A3,A4); 

вот это

UTFT myGLCD(31,A2,A1,A3,10);

Но  результат - белый экран. Причем даже с этими изменениями если пин возвращаю на место - начинает работать. Я так понимаю где-то в библиотеке жестко определен этот пин? Куда посмотреть?

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

1. попробуйте оставить как было UTFT myGLCD(31,A2,A1,A3,A4);  , и просто загните пин RST , проводком на шилде соедените RST c RST ардуино (при подаче питания на ардуину, она сама даст нужный короткий лог1 , для диспа этого хватит)

выкл/вкл питание - дисп должен запуститься , проверьте. 

2. обычно так, в скетче после вызова  либы графики и инита  (она настроит и воспользуется пином A4  , далее используйте вызов инита вашей либы (она перестроит пин A4 под себя и будет им пользоваться дальше ) // в вашем случае вроде этот пункт делать не надо , I2C сам подтягивается при первом обращении.

void setup()
{
.....
  myGLCD.InitLCD();
 <вызов инита своей либы>
....
}
 
 
slider
Offline
Зарегистрирован: 17.06.2014
3. также можете загнуть пин RD (A0) , а на шилде диспа его подключить на +3.3в или +5в   // при ините этой копанной UTFT , она настраивает его на выход и подает лог.1 на него и больше им не разу не воспользуется. Поэтому после инита  myGLCD.InitLCD();  вы можете его перенастраивать как угодно и пользоваться им. 
 
//// все это можно отнести почти ко всем таким адафруитским LCD TFT шилдам , используемыми на либе UTFT зоточенной под них.
switch
Offline
Зарегистрирован: 07.12.2015

slider, спасибо большое! Вечером попробую!

В принципе мне достаточно I2C, я туда поставил расширитель GPIO на PCF8574, четырех входов и четырех выходов мне  в этом проекте более чем достаточно. Если что - можно расширить еще одной микросхемой.

Я тут в прошлой теме задавал  вопрос почему не работает дисплей на Arduino Mega. Мне кто-то сказал потому что SPI у меги в другом месте. Но как я понимаю конкретно этот дисплей не использует SPI вообще. Что тогда может быть?

Сейчас конечно этот дисплей на меге не очень актуален так как портов с расширителем будет достаточно. Только вот боюсь не хватит памяти. Сейчас свободно всего 6 кб, а мне еще кнопочки на  экран прилепить надо для управления этим хозяйством...

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

именно для этого шилда SPI не причем. 

дело в библиотеке , а именно в файле UTFT\hardware\avr\HW_ATmega1280.h

что идет после строчек 

case 8:
#if defined(....       USE_UNO_SHIELD_ON_MEGA
 
-должно быть автоматом, надо смотреть что в вашей версии библиотеке там.
-ежели там есть похожее условие переброса на правильные пины для этого шилда ,
 то думаю достаточно в файле  UTFT.cpp , вверху указать #define USE_UNO_SHIELD_ON_MEGA 1 , (а то из скетча может не увидется #define 
-или просто указать правильную кострукцию между case 8:   и break;
 
switch
Offline
Зарегистрирован: 07.12.2015

slider, Спасибо большое! Я повесил RST на сигнал RST ардуино и i2c заработал. Теперь почти нет преград для завершения проекта!