Помогите подключить: Arduino DUE + 3.2" TFT (SSD1289)
- Войдите на сайт для отправки комментариев
Добрый вечер.
Есть вот такой экран:
Вот информация по очень похожему дисплею: Ссылка
Рекомендуемое на этом сайте подключение:
Я подключил как и советовали:
(01) CS ---> pin D40 (02) RS ---> pin D38 (03) WR ---> pin D39 (04) RD ---> 3.3v (05) RST---> pin D41 -------------------- (06) DB0 ---> pin D37 (07) DB1 ---> pin D36 (08) DB2 ---> pin D35 (09) DB3 ---> pin D34 (10) DB4 ---> pin D33 (11) DB5 ---> pin D32 (12) DB6 ---> pin D31 (13) DB7 ---> pin D30 -------------------- (14) DB8 ---> pin D22 (15) DB9 ---> pin D23 (16) DB10---> pin D24 (17) DB11---> pin D25 (18) DB12---> pin D26 (19) DB13---> pin D27 (20) DB14---> pin D28 (21) DB15---> pin D29 -------------------- (22) SDCS (23) BL_CTR ---> 3.3v -------------------- (24) VDO ---> 3.3v (25) VDO ---> 3.3v (26) GND ---> GND (27) GND ---> GND -------------------- (28) NC -------------------- (29) MISO (30) MOSI (31) T_PEN (32) F_CS (33) T_CS (34) t_CLK
Результат: Белый экран. Непонятно с этим дисплеем. Написано что он, вроде, 5-ти вольтовый, но в схеме подключения нигде нет пяти вольт. Потом там же - напутано с шиной данных если присмотреться: на дисплее пины называются DB0-DB15, а на схеме: DB1-DB8 и DB10-DB17. DB9, почему-то пропущено. Это тоже странно.
Тач и SD не подключал пока что - нет смысла. Хочу найти схему переходного шилда для 34-х пинового разъёма что бы посмотреть так ли я всё подключил, потому что я подключал всё напрямую, по схеме. Но ничего не работает.
Перебрал все возможные варианты в UTFT, где используется чип SSD1289 - с тем же результатом.
Листал форум в надежде найти похожую проблему и ее решение. Случайно зашёл на тему по дисплею 3.5" Ссылка, где прочитал совет попробовать в строке инициализации поставить "R61581" или "ILI9327". С обоими переменными, как ни странно, экран заветился. Однако в случае с "R61581" изображение сильно сдвинуто условно влево и отображено зеркально. Условно, потому что при использовании "ILI9327" изображение получается перевернутым на 180 градусов, но сдвиг, если не трогать дисплей, получается всёравно влево. Однако сдвиг уже не такой большой что даже при запуске "UTFT_Demo_400x240", заполняется полностью экран, но всё равно пару символов остаётся "за кадром".
Я сделал два видео с примеров "UTFT_Demo_320x240" и "UTFT_Demo_400x240" с заменой строки на "UTFT myGLCD(ILI9327,38,39,40,41);" :ILI9327_320x240 и ILI9327_400x240
Что можно сделать с этим сдвигом?
Кому интересно: проблема, вроде бы, решилась редактированием файла "UTFT.cpp":
Строка:
была заменена на:
Как видно, второй элемент массива изменен на 319 вместо 399. В результате пример "UTFT_Demo_320x240" стал отображаться корректно.
Значит это был всё-таки "ILI9327"
Тачскрин "победился" с первого раза.
SD - под вопросом. Написано что SD и тач совместно используют MISO и MOSI. Однако судя из их пояснений "SCK(pin34)" и "DCLK(pin34)" тоже висят на одном пине. Так что, скорее всего, юзать в одном скетче карту памяти и тач, уже не получится. Хотя - кто их знает?...
Вернемся к нашим баранам.
Не давала покоя мне мысль что я-таки неправильно соединил дисплей с ардуиной и теперь она превратилась в уверенность.
Например вот распиновка этого 34-х пинового разъёма дисплея:
У меня тут конфликт тача с SD и я, тогда, кое-как запустил тач в ущерб SD-слоту.
Тач подключается так: UTouch myTouch (52, 43, 51, 50, 46);
Простенькая програмка показывает что SD-карту следует подключать вот так:
Как бы всё хорошо, никто никому не мешает. Но выводы дисплея SPI_MOSI, SPI_MISO и SPI_CLK я подключил фиг знает куда и вообше не сильно задумывался тогда куда их надо подключать - свободных пинов на DUE навалом. В общем совершенно случайно, методом научного тыка, мне повезло запустить тачскрин, но только и всего. Сейчас же я хочу запустить и SD-слот...
Чуть позже продолжу - надо на работу лететь...
В SPI кроме MISO/MOSI/SCK есть еще проводок, подключаемый к CS(он же SS). Переводится как Chip Select или Slave Select. Есть у вас какие-либо соображения по поводу его роли в обеспечении работы нескольких устройств на одной шине SPI?
В SPI кроме MISO/MOSI/SCK есть еще проводок, подключаемый к CS(он же SS). Переводится как Chip Select или Slave Select. Есть у вас какие-либо соображения по поводу его роли в обеспечении работы нескольких устройств на одной шине SPI?
Соображения есть у автора этой статьи: "Touch Screen and SD Card share the MOSI and MISO, and they are controlled through T_CS and SD_CS separately.When T_CS is enabled,Touch Screen works;when SD_CS is enabled,SD Card works."
Тачскрин и SD совместно используют MOSI и MISO но управляются через пины "T_CS" и "SD_CS" раздельно. Когда открыт "T_CS" - работает тачскрин. Когда открыт "SD_CS" - SD карта.
Однако что куда цеплять - еще надо разобраться... на всякий случай сохраню тут распиновку DUE что бы не искать ее потом:
Вернемся к нашим баранам.
Не давала покоя мне мысль что я-таки неправильно соединил дисплей с ардуиной и теперь она превратилась в уверенность.
Например вот распиновка этого 34-х пинового разъёма дисплея:
Очень похоже, что у дисплея не один интерфейс, а более. Т.е. вероятно, что ему можно передавать данные как по SPI, так и по параллельному интерфейсу. Последнее явно быстрее. Поэтому я советую посмотреть дэйташит на предмет того, может и вообще лучше забыть об SPI для этого дисплея.
У меня тут конфликт тача с SD и я, тогда, кое-как запустил тач в ущерб SD-слоту.
Тач подключается так: UTouch myTouch (52, 43, 51, 50, 46);
Не знаю, откуда Вы взяли такую распиновку. Вероятно, она приведена для 2560-й Меги. По крайней мере, в Меге SPI именно на указанных контактах. В отличие от Due.
Простенькая програмка показывает что SD-карту следует подключать вот так:
[/quote]
Что-то странное. Я вообще не видел у Ардуино ног с номерами 7х.
Как бы всё хорошо, никто никому не мешает. Но выводы дисплея SPI_MOSI, SPI_MISO и SPI_CLK я подключил фиг знает куда и вообше не сильно задумывался тогда куда их надо подключать - свободных пинов на DUE навалом. В общем совершенно случайно, методом научного тыка, мне повезло запустить тачскрин, но только и всего. Сейчас же я хочу запустить и SD-слот...
Видте ли, обычно у микроконотроллеров разные пины имеют различные функции, но почти каждый из них можно использовать в качестве простого порта ввода/вывода. SPI можно реализовать как аппаратно, так и программно. В первом случае - только на строго определенных пинах, причем эти пины разные для разных моделей Ардуино. Во втором случе - на любых, но скорость передачи в этом случае будет намного ниже.
Я еле нашёл вообще какую-то информацию по подключению. На даташит я и не расчитывал. По SPI тут работает только SD и тачскрин, насколько я понял, но я не имею ни малейшего представления как должен быть подключен тачскрин для работы с UTouch и как SD-слот для работы со стандартными библиотеками: по SPI, IIC или еще как...
Тач подключается так: UTouch myTouch (52, 43, 51, 50, 46);
Не знаю, откуда Вы взяли такую распиновку. Вероятно, она приведена для 2560-й Меги. По крайней мере, в Меге SPI именно на указанных контактах. В отличие от Due.
Мега хоть внешне похожа на DUE, поэтому зту распиновку я нигде не брал, а распаял сам, потому что у меня 34-х пиновый шилд, на который я нигде не нашёл ни распиновок ни пояснений что куда и зачем. Поэтому на какие пины DUE пришлось, на такие и расписал потом в "UTouch myTouch". Выход был только такой. Но меня сейчас интересуют другие 2 вопроса:
1. Работает ли, обычно, тач по шине SPI?
2. Если не работает, то можно ли MOSI и MISO использовать как обычные пины, применительно к пинам для UTouch? Потому что судя по всему и SD и тач используют эти пины совместно.
Ну так посмотрите на распиновку DUE одним постом выше, там их 87цифровых и 144 последовательных.
Ну вот часть ответа на второй вопрос уже, кое-как, забрезжила... Насколько я понимаю, в библиотеках для работы с SD, SPI всегда выбирается аппаратный, потому что у меня уже были попытки переназначить выводы SPI на другие контакты - ничего не удаётся, даже копая библиотеки. Вот поэтому и получается, что подключить этот шилд, задействуя все его возможности, одним шлейфом - не выйдет. SPI, как правило, распаяны отдельной группой контактов.
для SD есть либа програмного SPI (соответственно на любые пины можно) и аппаратного.
для тача на XPT2046 встречал только аппаратную.
http://arduino.ru/forum/apparatnye-voprosy/35-tft-lcd-krasnyi-megovskii-mega-2560-r3-resheno-kak-reshit-drugie#comment-204256
но без проблем стыкуются 2 аппаратных дергая своими CS (ChipSelect)
http://arduino.ru/forum/apparatnye-voprosy/kak-podklyuchit-displei-32-lcd-module?page=1#comment-156177
, в инете проектов на таких и похожих шилдах д.б. полно
для SD есть либа програмного SPI (соответственно на любые пины можно) и аппаратного.
для тача на XPT2046 встречал только аппаратную.
http://arduino.ru/forum/apparatnye-voprosy/35-tft-lcd-krasnyi-megovskii-mega-2560-r3-resheno-kak-reshit-drugie#comment-204256
но без проблем стыкуются 2 аппаратных дергая своими CS (ChipSelect)
http://arduino.ru/forum/apparatnye-voprosy/kak-podklyuchit-displei-32-lcd-module?page=1#comment-156177
, в инете проектов на таких и похожих шилдах д.б. полно
млин, ошибся
.....
для тача на XPT2046 встречал только аппаратную.
......
там програмный SPI (думал програмный, написал аппаратный :) ) вызов UTouch myTouch( 6, 5, 4, 3, 2); - на этих пинах не может быть аппаратного ни на Уно , ни на Меге , он там на других разных пинах.
Buzzer2010 , обратите внимание , по 1 ссылке , шилды не требующие шилдов переходников. Это значит , что для подключения вашего диспа к Меге напрмую - необходимы резисторы. номиналы там можно увидеть.
млин, ошибся
.....
для тача на XPT2046 встречал только аппаратную.
......
там програмный SPI (думал програмный, написал аппаратный :) ) вызов UTouch myTouch( 6, 5, 4, 3, 2); - на этих пинах не может быть аппаратного ни на Уно , ни на Меге , он там на других разных пинах.
Buzzer2010 , обратите внимание , по 1 ссылке , шилды не требующие шилдов переходников. Это значит , что для подключения вашего диспа к Меге напрмую - необходимы резисторы. номиналы там можно увидеть.
А нафига искать выводы SPI, когда они и так указаны на распиновке, в моём случае - DUE ?
У меня не мега, у меня DUE!
Распаял наконец-то как положено SD-пины и:
Ну SS (которое всегда висит на 10-м пине) - это я проверял и на 10 и на отвольном 42-м пине. Работает и на 10 и на 42, так что - не принципиально.
Кстати писать #include SPI.h - это значит использовать програмный SPI? Потому что у меня и без него работает:
Как я и предполагал - тачскрин после переноса на SPI - не заработал ((((
А всё потому что никто так и не сказал: нужно ли аппаратное SPI для работы тачскрина или нет и можно ли его пины использовать для работы с тачскрином. ((((
что вам сдался аппаратный SPI ? выводов у Дуе нехватат ?
Utouch примеры под програмный SPI .
а чтобы все собрать на аппаратный, надо знать тонкости использования библиотек. (они же под себя настраивают регистры, частоты,.... в начале программы) и вы хотите при работе одной либы , потом влезть другой.
тогда уж используйте либу SD от того-же UTFT , а не адафруита (хотя не понял чья у вас либа). либы разные, их возможности и инструменты разные.
на сайте http://rinkydinkelectronics.com/library.php?id=51 и форумах можно узнать про совместное использование либ.
пробуйте это
URTouch http://rinkydinkelectronics.com/library.php?id=92
+
tinyFAT http://rinkydinkelectronics.com/library.php?id=37
но прийдется пробовать не на DUE , или подшаманить под нее
Или всё-же повешайте тач на програмный, где он и должен быть.
Та блин же! Вот что вы все только последний пост читаете и возмущаетесь потом?
Вот специально для "slider": SD и тачскрин совместно используют три провода: MOSI, MISO и SPI_CLK. Но дело в том что SD не работает ни на каких других пинах, кроме как на аппаратных MOSI, MISO и SPI_CLK! А теперь на этом SPI не работает тачскрин. Я вообще-то спрашиваю совсем о другом и никто не отвечает на вопрос, а советуют всякие непоянтные способы усложнить себе жизнь. Можно услышать членораздельный ответ на вопрос: обязательно ли SPI для работы UTouch или URTouch и если нет - почему нельзя использовать пины SPI под другие задачи? Я ведь читал где-то, что выводы SPI могут выполнять любые функции как обычные другие пины ардуино.
И вот, кстати, о том же "tinyFAT" пишут: "The SD card should be connected to the SPI-pins on your Arduino." Ну и что теперь получается? Для использовния SD распаивать надо под SPI, а для тача - на другие пины что ли? Это же фигня какая-то.
Интересное наблюдение: мешает только SPI_CLK. MOSI и MISO можно оставить на tdin и tdout: myTouch.dataAvailable() возвращает единицу, но X всегда 319, а Y - 239 (разрешение 320х240) . Принудительная запись единицы в tcs (pin D43) - ничего не даёт.
Вот же блин... Как заставить работать и тач и SD одновременно?
Кстати писать #include SPI.h - это значит использовать програмный SPI? Потому что у меня и без него работает:
1. Наоборот - аппаратный.
2. А почему Вы решили, что "и без него работает"?
Можно услышать членораздельный ответ на вопрос: обязательно ли SPI для работы UTouch или URTouch и если нет - почему нельзя использовать пины SPI под другие задачи? Я ведь читал где-то, что выводы SPI могут выполнять любые функции как обычные другие пины ардуино.
Могут - но не одновременно.
Ну и как бы общая информация: любое SPI устройство может работать как с программным SPI, так и с аппаратным. Ему все равно. Но в конкретной библиотеке может быть предусмотрен только один вполне конкретный вариант. Соответственно, необходимо либо учитывать эту особенность конкретной библиотеки, либо не пользоваться ею, а писать свою.
1. Наоборот - аппаратный.
2. А почему Вы решили, что "и без него работает"?
Так. Тогда непонятно кое-что: Если #include SPI.h это аппаратный, то программный тогда как запускается?
Почему я решил что работает: Взял кусочек скетча из примера "SD.h", где проверяется наличие карты и результатом его работы теперь являются слова, что SD-карта обнаружена. Может я, конечно и как всегда, немного не правильно этот кусок выхватил, но уже, думаю, пора бы мне и с большим пониманием ковырять чужие скетчи:
Можно услышать членораздельный ответ на вопрос: обязательно ли SPI для работы UTouch или URTouch и если нет - почему нельзя использовать пины SPI под другие задачи? Я ведь читал где-то, что выводы SPI могут выполнять любые функции как обычные другие пины ардуино.
Могут - но не одновременно.
Так мне одновременно и не нужно! Мне, хотя бы, не перепаивать туда-сюда провода каждый раз, в зависимости что потребуется: SD или тач.
А обязательно для UTouch запускать SPI или нет? И что-то я ни разу нигде не встречал что бы SPI применялось с библиотекой UTouch. Для SD - понятно что надо, ("надо", в моём понимании это: #include <SPI.h>) И кстати непонятно с этим SPI опять никак. На фото распиновки DUE и на самой плате есть 6 штырьков, подписаных SPI, и MOSI с остальными находятся там же... А вот нашёл только что такую информацию:... и тут уже про какое-то ICSP пишут... Все эти моменты меня путают!
Так велосипед изобретать - кому это нужно? Мне только и всего надо, что бы уже правильно наконец распаять этот шилд и забыть про него как про страшный сон.
В общем текущее положение вещей таково: После переноса выводов шилда MOSI, MISO и SPI_CLK на соответсвующие контакты DUE, перестал работать тачскрин. Понятно что строку создания элемента класса UTouch myTouch я откорректировал в соответствии с внесенными изменениями. Однако - воз и ныне там (((
Buzzer2010, чтобы прояснить для себя отношение между SPI.h и SD.h, загляните в последний. Возможно тогда Вы поймете, что для того, чтобы ипользовать SPI (а равно любое другое устройство) далеко не всегда необходимо явно включать ссылку на него в скетч.
Что такое UTouch, я не знаю, никогда им не пользовался. Но совет остается прежним: хотите что-нибудь про него узнать, загляните в его исходник. Благо они все открытые.
Да, на Due SPI, насколько мне известно, выведен только на специальный разъем, и не дублируется среди "обычных" контактов, как на других моделях Ардуино.
По последнему абзацу: посмотрите все подключаемые Вами библиотеки. Вероятнее всего, хотя бы одна из них использует аппаратный SPI, что не дает возможности организовать на нем программный для UTouch.
Но в своих примерах они его явно включают... Ну да. Они там его, таки, включают. И не только его:
SD.h :
UTouch.h - библиотека для работы с тачскрином. В заголовке ничего такого про SPI не говорится:
В UTouch.cpp тоже никакого намёка на SPI нет пока что, но у них есть странные переменные, вроде P_CLK, T_CLK, B_CLK, P_CS и B_CS, что наводит на мысль о том, что какой-то протокол они всё-же там используют.
UTouch.cpp :
Да вот далеко ходить и не надо. Если я в одном скетче задумаю использовать и SD.h и UToch.h, то скорее всего SD.h победит...
Но это еще не так критично, как то, что даже не включая в скетч ничего, чему бы мог потребоваться SPI.h, я всё равно не могу заставить работать на этих пинах тачскрин, который, как оказалось: "Touch Screen and SD Card share the MOSI and MISO".