кто ж знал то что дисплей предназначен для Uno, но не беда!!! с мегой работает вполне!!! переделка минимальна а входов выходов остается достаточно! Там в отзывах есть библиотека для уно с небольшими проблемами (инверсия цвета, зеркальное изображение, не рабочий тач, у меги спи на других ногах), я их пофиксил и сейчас все работает. так что все велком покупать платку. :))) у меня пример есть с фотками и сырцами. куда класть архивчик?
продован адекватный отвечает быстро, товар пришел чуть меньше месяца. правда отслеживался только во второй половине пути.
кто ж знал то что дисплей предназначен для Uno, но не беда!!! с мегой работает вполне!!! переделка минимальна а входов выходов остается достаточно! Там в отзывах есть библиотека для уно с небольшими проблемами (инверсия цвета, зеркальное изображение, не рабочий тач, у меги спи на других ногах), я их пофиксил и сейчас все работает. так что все велком покупать платку. :))) у меня пример есть с фотками и сырцами. куда класть архивчик?
продован адекватный отвечает быстро, товар пришел чуть меньше месяца. правда отслеживался только во второй половине пути.
сюда с фоткой с описаловом что менялось, ссылка на архив скинутый в яндкс диск
Помогите подружить сенсорный дисплей tft lcd 2.4 с часами ds3231. Дисплей подключен к ардуине уно с помощью бибоиотеки https://github.com/samuraijap/TFTLCD-Library
Пришлось ее немного поправить, так как были косяки с инверсией оси Х. Аналоговый пин 4 занят под lcd_reset. Если подключить часы паралельно, то эгран начинает моргать и не запускается. Пробывал подключить lcd_reset к пину ресет на ардуино, а в скетче изменить #define LCD_RESET с A4 на 0, как советуют тут https://forums.adafruit.com/viewtopic.php?f=47&p=184358
не помогло, экран не запускается. У меня на уно есть еще дополнительные выводы A6 и A7, пробовал переназначить LCD_RESET на один из них, так же дисплей не запустился.
Помогите пожалуйста освободить i2c интерфейс
Есть библиотека Soft-I2C, позволяет интерфейсить на любых дижитал выводах когда те которые хардваре заняты, я бы использовал пины 10-13, карта SD не должна использоваться в проэкте, естественно.
Спасибо за подсказку, я уже думал о таком решении так как видел упоминание про библиотеку ds1307 на программных пинах, искал для ds3231, не нашел, а про библиотеку soft-i2c не знал. Попробую подключить rtc к пинам A6 и A7, но хотелось бы все таки именно освободить пин A4 от дисплея, а не отказаться от него.
Не понимаю почему в библиотеке нет упоминаний про A4, единственное объявление идет в самом скетче, но при переназначении его на другой пин, дисплей отказывается запускаться... Я конечно еще начинающий ардуинщик и знаком с микроконтроллерами от силы месяц, но подозреваю что надо править порты в библиотеке
Чтобы переделать программно надо сначала ногу РЕСЕТ платы ЛСД которая идет на А4 ардуино физически оторвать и подключить к ноге ресет контроллера, из кода убрать все что дергает ногу а4 и дисплей будет перегружаться с контроллером. минус в том, что сразу как контроллер загрузился дисплей может быть еще недогружен... но на глаз перезагрузка происходит приблизительно одинаковое время. Это значит что сразу как контроллер загрузился не надо начинать сразу дергать дисплей, можно проинициализировать другие нужные вещи.
видел такое описание где то на буржуйских сайтах. Ногу кста необязательно выпаивать, можно подогнуть как я подгибал. см выше.
А зачем ногу ресет выпаивать чтоб переделать ее с A4 на ардуинский ресет? Я проводами подключаю, кидаю провод от lcd_reset к a4. Загвоздка в том что в библе вобще нет упоминаний про a4, там номер этого пина указывается при инициализации дисплея и если его изменить, у меня ничего не запускается. Подозреваю что этот ресет указан как явный порт в библе, но знаний чтоб разобраться с этим пока не хватает.
Часы у меня и есть ds3231. Не вижу смысла заказывать постоянно отстающие ds1307 за эти же деньги
Прошу извинить за задержку с ответами. Давно не смотрел форум. И давно не занимался экранчиками. Вот рабочий код барографа для пары ТФТ2.4 +УНО. Чем могу.
У продавана в описании написано что тип контроллера SPFD5408. Но при использовании данной либы имеем белый экран., как и при загрузке других либ. Продавану уже отписался с просьбой выслать либу или название чипа. Но, боюсь, толку не будет.
Посему прошу помощи тут. Ардуинщик я начинающий, потому сильно не пинайте. Мну главное понять жив ли экран? Есть ли смысл открывать спор? Потому что полосатая часть изоброжения напоминает мне "битую" матрицу, да и цвета какие-то пересвеченные, чтоли.. Хотя запакован товар был хорошо.
До этого приехал похожий набор, только с Мегой и экраном 3,2*. Там тоже пришлось поплясать, вплоть до использования ИДЕшки 1.0.6 но экран и тач запустить удалось.
.... Потому что полосатая часть изоброжения напоминает мне "битую" матрицу,........
похоже на битую матрицу.
ссылка на видос таже что и на фото, прилжте правильную . когда запускаете скетч для определения типа контроллера то нужная инфа - это то что скетч выдает в сериал порт (монитор порта), а не на экран. Можно было скопировать ответ и приложить сюда.
Скачал предложенную вами либу. Загрузил ид реадер, получил такую инфу
Read Registers on MCUFRIEND UNO shield
controllers either read as single 16-bit
e.g. the ID is at readReg(0)
or as a sequence of 8-bit values
in special locations (first is dummy)
Моя плата тоже все регистры выдает на чтение ноль :). я подбирал библиотеку методом тыка, но добрался. выше есть ссылки на используемые мной библиотеки, и как подключать, попробуй мож поможет.
судя по видосу и фоткам (библиотеку вы нашли! какая либа подошла? что она в терминал отвечала?), что вверху весь тест кажет идеально, а дальше все в цветных полосах - это матрица битая 99% . Можно выбрасывать, не стоит время терять.
// или использовать её разъем microSD и тачскрин . Или поменять дисплей на какой-нибудь как в соседней теме "дисплеи от сотиков".
Вы не гадайте а запросите у продавца модель контроллера. Я в свое время намаялся с 2,4 дисплеями, перепробовал много бибилиотек, тоже кроме полос - ничего, уже собирался выбрасывать, и запросил у продавца - ili9341 и все заработало.
Всем привет! Либа от ЛДж4535 не пошла, белый экран. Из неее запустился только скетч для идентификации контроллера. Подошла либа TFTLCD. В ней всего три примера: паинт, графиктест и еще чтото, результат вы видели. Сегодня продаван прислал кучу инфы, но все на китайском. Там главный "фигурант" ili 9341.Надо разбираться. Завтра притащу на работу Мегу 2560. Буду пробовать большие примеры на ней.
Попробовал этот дисплей с мегой- не завелся, белый экран. Из всех библиотек, предложенных в этой теме, экран завелся только с уно и с TFTLCD. Библиотека от lg не пошла. Маловато всетаки у меня знаний.... У меня есть еще 8 дней защиты покупателя..надо или запустить экран, или открывать спор и требовать возвращения денег. Хз что делать
To negavoid спасибо огромное за ссылки! Экран ожил с либой из второй ссылки. Из первой, честно говоря, не пробовал.
Правда, остался вопрос: после калибровки у тача особенность- чем дальше от центра тем ближе к краю сработка... Мож что не так калибранул?..
Negavoid, мерси боку Вам. Получил сегодня "подарок" 4535, до этого имел дело с 0154 9325 9327 9341 9486 и другими, думал что собаку сьел. Но этот фрукт, 3 часа библы искал, кучу времени потратил и всё ардуино разворушил- те что раньше запускались теперь обратно настраивать придётся.
Тоже долго возился с подбором библиотек. Дисплей с кодом 0x0154 +UNO. Тоже уже почти решил, что труп - но заработал. Графические библиотеки от 5408_....master, библиотека тача от Адафрут - только пины тача нестандартные, А1, А2, 7, 6. Калибровка пока ни одна не заработала - примерно подобрал значения - пример paint работает (точки вместо линий - но это похоже просто быстродействия не хватает). Изображение приходится разворачивать на 90 градусов - иначе тач и изображение не совпадают (оси перепутаны). SD не проверял еще.
Некоторое время назад купил 2.4 на ILI9341, запустил с SPDF 5408 на УНО. Всё работало и экран и тач скрин.
Так как на УНО не портов свободных, а МЕГИ не было отложил на будующее.
Появилась МЕГА и решил проверить на УНО перед переносом. Не то что бы не работает, работает очень коряво.
Нарисовал на экране линию от 0,0 до 320,240 начало и конец соответствует координатам, а в середине линии расположенны параллейно основной, но раскиданны отрезками в случайно порядке. Поробовал поменять библиотеки, но получается то же самое.
1. вероятней контакт иль сопилюшка и 2. библиотека, сама UNO. пробуйте библиотеку адафруит, mcufriend ili9341 8bit (не SPI). смотрите что выдал в терминал пример с библиотеки. пробуйте на Меге.
1. прозвоните мультимертом
2. сотрите библиотеки дисплеев и графики из моих документов- ардуино - библиотеки
и распакуйте заново. (а то , мало ли . ставили поверх библиотеки длчя работы с маленькими экранами), а при компиляции , они случайно могут подтягиваться как выше по расположению папки.
Здравствуйте. А кто-нибудь добивался работы Atmega128 и дисплея tft 2.4 на ili9341? Библиотека "SPFD5408-master" c гит хаба. https://github.com/JoaoLopesF/SPFD5408 ( Кстати, на 328 атмеге все чудесно работает с этой библиотекой, но свободных пинов почти не остается.). Ковырял ее долго. Но опыта маловато. Исправлял файлы библиотеки и "pin_magic.h" и "SPFD5408_Adafruit_TFTLCD.cpp". Не помогло. Может кто подскажет как Atmega128 с TFT 2.4 на ili9341 поженить. На данный момент при загрузке график теста из примеров экран мерцает и видно, что процесс идет. Но, похоже, не происходит инициализации дисплея и картинки нет, только мерцание. В Atmega128 загрузчик MegaCore с гит хаба (https://github.com/MCUdude/MegaCore). Исправленная мной библиотека здесь https://yadi.sk/d/HlwgoRtS3HYgNZ .
что именно правили? делал на Atmega128 и дисплее tft ili9341 spi , библиотеку использовал UTFT . подправить пришлось её - это просто добавил коммент atmega128 к существующему atmega2560, и стер лишнее про не существующиие порты оставшиеся от atmega2560.
Доброго вечера!
Имел такой же опыт, все закончилось получением от продавца Большого архива в котором Одна нужная строка
"identifier=0x9341;" и все заработало и экран и touch и SD. Но остались вопросы:
1. Можно ли программно управлять уровнем подсветки или на край -включать/отключать?
2. Какие пины остаются после подключения к Уно, можно ли как увеличить их количество, например оторвать touch?
Спасибо и надеюсь на ответ.
Дружище а не дашь файлик от продавца, или ссылку.
Мучаюсь уже хз сколько.
Уже начинаю подумывать что то не так с самим экраном
Нашел правильные библиотеки.....
Может кому пригодиться https://github.com/samuraijap/TFTLCD-Library
Разрешение экрана меняется в TFTLCD-Library-master - > Adafruit_TFTLCD.cpp
Нашел правильные библиотеки.....
Может кому пригодиться https://github.com/samuraijap/TFTLCD-Library
Разрешение экрана меняется в TFTLCD-Library-master - > Adafruit_TFTLCD.cpp
Спасибо.
Ссылка на библиотеку очень помогла!!!
Долго возился ИМЕННО вот с таким дисплеем:
http://ru.aliexpress.com/item/2-4-inch-TFT-touch-LCD-Screen-Module-For-Arduino-UNO-R3-Free-Shipping/1814799101.html?detailNewVersion=2
Дрова нашлись тут:
http://www.elecrow.com/24-inch-tft-touch-shield-for-arduino-p-1383.html
Все другие библиотеки не работали, только одна давала "снег" на экране, эта заработала на ура.
Чип оказался ili9341, по ссылке есть схема и описание.
Русифицировал похожий TFT Touch Shield:
http://arduino.ru/forum/programmirovanie/rusifikatsiya-biblioteki-adafru...
купил дисплей
http://ru.aliexpress.com/item/Free-Shipping-1pcs-2-4-inch-TFT-touch-LCD-Screen-Module-For-Arduino-UNO-R3/2034511569.html
с контроллером Mega 2560
http://ru.aliexpress.com/item/FREE-SHIPPING-1PCS-LOT-ega-2560-R3-Mega2560-REV3-ATmega2560-16AU-Board-NO-with-USB-Cable/32401858891.html
кто ж знал то что дисплей предназначен для Uno, но не беда!!! с мегой работает вполне!!! переделка минимальна а входов выходов остается достаточно! Там в отзывах есть библиотека для уно с небольшими проблемами (инверсия цвета, зеркальное изображение, не рабочий тач, у меги спи на других ногах), я их пофиксил и сейчас все работает. так что все велком покупать платку. :))) у меня пример есть с фотками и сырцами. куда класть архивчик?
продован адекватный отвечает быстро, товар пришел чуть меньше месяца. правда отслеживался только во второй половине пути.
купил дисплей
http://ru.aliexpress.com/item/Free-Shipping-1pcs-2-4-inch-TFT-touch-LCD-Screen-Module-For-Arduino-UNO-R3/2034511569.html
с контроллером Mega 2560
http://ru.aliexpress.com/item/FREE-SHIPPING-1PCS-LOT-ega-2560-R3-Mega2560-REV3-ATmega2560-16AU-Board-NO-with-USB-Cable/32401858891.html
кто ж знал то что дисплей предназначен для Uno, но не беда!!! с мегой работает вполне!!! переделка минимальна а входов выходов остается достаточно! Там в отзывах есть библиотека для уно с небольшими проблемами (инверсия цвета, зеркальное изображение, не рабочий тач, у меги спи на других ногах), я их пофиксил и сейчас все работает. так что все велком покупать платку. :))) у меня пример есть с фотками и сырцами. куда класть архивчик?
продован адекватный отвечает быстро, товар пришел чуть меньше месяца. правда отслеживался только во второй половине пути.
сюда с фоткой с описаловом что менялось, ссылка на архив скинутый в яндкс диск
https://drive.google.com/file/d/0B3Vep_H7Gv1aTnFybzhBUXdCN0U/view?usp=sh...
картинки отдельно.. как сюда вставить так и не понял
https://drive.google.com/folderview?id=0B3Vep_H7Gv1aVDlJOTBWUlFsakE&usp=...
Попробуй здесь:http://eseal.ru/index.php/stati/arduino/spravochnye-dannye/moduli-dlya-arduino/38-2-4-tft-lcd-displej
Помогите подружить сенсорный дисплей tft lcd 2.4 с часами ds3231. Дисплей подключен к ардуине уно с помощью бибоиотеки https://github.com/samuraijap/TFTLCD-Library
Пришлось ее немного поправить, так как были косяки с инверсией оси Х. Аналоговый пин 4 занят под lcd_reset. Если подключить часы паралельно, то эгран начинает моргать и не запускается. Пробывал подключить lcd_reset к пину ресет на ардуино, а в скетче изменить #define LCD_RESET с A4 на 0, как советуют тут https://forums.adafruit.com/viewtopic.php?f=47&p=184358
не помогло, экран не запускается. У меня на уно есть еще дополнительные выводы A6 и A7, пробовал переназначить LCD_RESET на один из них, так же дисплей не запустился.
Помогите пожалуйста освободить i2c интерфейс
Есть библиотека Soft-I2C, позволяет интерфейсить на любых дижитал выводах когда те которые хардваре заняты, я бы использовал пины 10-13, карта SD не должна использоваться в проэкте, естественно.
Спасибо за подсказку, я уже думал о таком решении так как видел упоминание про библиотеку ds1307 на программных пинах, искал для ds3231, не нашел, а про библиотеку soft-i2c не знал. Попробую подключить rtc к пинам A6 и A7, но хотелось бы все таки именно освободить пин A4 от дисплея, а не отказаться от него.
Не понимаю почему в библиотеке нет упоминаний про A4, единственное объявление идет в самом скетче, но при переназначении его на другой пин, дисплей отказывается запускаться... Я конечно еще начинающий ардуинщик и знаком с микроконтроллерами от силы месяц, но подозреваю что надо править порты в библиотеке
Чтобы переделать программно надо сначала ногу РЕСЕТ платы ЛСД которая идет на А4 ардуино физически оторвать и подключить к ноге ресет контроллера, из кода убрать все что дергает ногу а4 и дисплей будет перегружаться с контроллером. минус в том, что сразу как контроллер загрузился дисплей может быть еще недогружен... но на глаз перезагрузка происходит приблизительно одинаковое время. Это значит что сразу как контроллер загрузился не надо начинать сразу дергать дисплей, можно проинициализировать другие нужные вещи.
видел такое описание где то на буржуйских сайтах. Ногу кста необязательно выпаивать, можно подогнуть как я подгибал. см выше.
Еще... дело каждого, но чет я таймер когда заказывал читал что DS1307 нестабильный, и лучше DS3231.
А зачем ногу ресет выпаивать чтоб переделать ее с A4 на ардуинский ресет? Я проводами подключаю, кидаю провод от lcd_reset к a4. Загвоздка в том что в библе вобще нет упоминаний про a4, там номер этого пина указывается при инициализации дисплея и если его изменить, у меня ничего не запускается. Подозреваю что этот ресет указан как явный порт в библе, но знаний чтоб разобраться с этим пока не хватает.
Часы у меня и есть ds3231. Не вижу смысла заказывать постоянно отстающие ds1307 за эти же деньги
Прошу извинить за задержку с ответами. Давно не смотрел форум. И давно не занимался экранчиками. Вот рабочий код барографа для пары ТФТ2.4 +УНО. Чем могу.
http://arduino.ru/forum/apparatnye-voprosy/deshevyi-tft-24-displei-na-spfd5408?page=1#comment-133716
StrangerM, all
Этот проект где-то есть вцелом?
Всем доброго времени суток! Брошу и я свои 5 копеек...
Купил сие "чудо" ( писать маты небуду)
https://yadi.sk/i/Yrp0RkT8ujGFy
https://yadi.sk/i/VG3C_RM2ujGgh
https://yadi.sk/i/Hz93XNTMujH8T
Потратил кучу времени, перепробовал разные либы. Максимальный результат такой
https://yadi.sk/i/hrwoXFu0ujFWx
А это при загрузке скетча для определения типа контроллера
https://yadi.sk/i/OnfE4l9IujFa8
Видео 31 мб grafictest
https://yadi.sk/i/OnfE4l9IujFa8
У продавана в описании написано что тип контроллера SPFD5408. Но при использовании данной либы имеем белый экран., как и при загрузке других либ. Продавану уже отписался с просьбой выслать либу или название чипа. Но, боюсь, толку не будет.
Посему прошу помощи тут. Ардуинщик я начинающий, потому сильно не пинайте. Мну главное понять жив ли экран? Есть ли смысл открывать спор? Потому что полосатая часть изоброжения напоминает мне "битую" матрицу, да и цвета какие-то пересвеченные, чтоли.. Хотя запакован товар был хорошо.
До этого приехал похожий набор, только с Мегой и экраном 3,2*. Там тоже пришлось поплясать, вплоть до использования ИДЕшки 1.0.6 но экран и тач запустить удалось.
}
.....
А это при загрузке скетча для определения типа контроллера
https://yadi.sk/i/OnfE4l9IujFa8
Видео 31 мб grafictest
https://yadi.sk/i/OnfE4l9IujFa8
........
.... Потому что полосатая часть изоброжения напоминает мне "битую" матрицу,........
похоже на битую матрицу.
ссылка на видос таже что и на фото, прилжте правильную . когда запускаете скетч для определения типа контроллера то нужная инфа - это то что скетч выдает в сериал порт (монитор порта), а не на экран. Можно было скопировать ответ и приложить сюда.
попробуйте еще для интереса от LG4535 http://arduino.ru/forum/apparatnye-voprosy/mcufriend-shield-0x4535-slabaya-yarkost
Пардон. вот правильная ссылка
https://yadi.sk/i/wtDNMXokujGAS
В монитор порта он выдает ID 0x4535 . на сайте http://misc.ws/2015/01/24/lcd-touch-screen-information/
инфы про такой ид нету...
Скачал предложенную вами либу. Загрузил ид реадер, получил такую инфу
Read Registers on MCUFRIEND UNO shield
controllers either read as single 16-bit
e.g. the ID is at readReg(0)
or as a sequence of 8-bit values
in special locations (first is dummy)
reg(0x0000) 45 35 ID: ILI9320, ILI9325, ILI9335, ...
reg(0x0004) 00 00 00 00 Manufacturer ID
reg(0x0009) 00 00 00 00 00 Status Register
reg(0x000A) 00 00 Get Powsr Mode
reg(0x000C) 00 00 Get Pixel Format
reg(0x0061) 00 00 RDID1 HX8347-G
reg(0x0062) 00 00 RDID2 HX8347-G
reg(0x0063) 00 00 RDID3 HX8347-G
reg(0x0064) 00 00 RDID1 HX8347-A
reg(0x0065) 00 00 RDID2 HX8347-A
reg(0x0066) 00 00 RDID3 HX8347-A
reg(0x0067) 00 00 RDID Himax HX8347-A
reg(0x0070) 00 00 Panel Himax HX8347-A
reg(0x00A1) 00 00 00 00 00 RD_DDB SSD1963
reg(0x00B0) 00 00 RGB Interface Signal Control
reg(0x00B4) 00 00 Inversion Control
reg(0x00B6) 00 00 00 00 00 Display Control
reg(0x00B7) 00 00 Entry Mode Set
reg(0x00BF) 00 00 00 00 00 00 ILI9481, HX8357-B
reg(0x00C0) 00 00 00 00 00 00 00 00 00 Panel Control
reg(0x00C8) 00 00 00 00 00 00 00 00 00 00 00 00 00 GAMMA
reg(0x00CC) 00 00 Panel Control
reg(0x00D0) 00 00 00 Power Control
reg(0x00D2) 00 00 00 00 00 NVM Read
reg(0x00D3) 00 00 00 00 ILI9341, ILI9488
reg(0x00DA) 00 00 RDID1
reg(0x00DB) 00 00 RDID2
reg(0x00DC) 00 00 RDID3
reg(0x00E0) 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 GAMMA-P
reg(0x00E1) 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 GAMMA-N
reg(0x00EF) 00 00 00 00 00 00 ILI9327
reg(0x00F2) 00 00 00 00 00 00 00 00 00 00 00 00 Adjust Control 2
reg(0x00F6) 00 00 00 00 Interface Control
что это означает?
остальные скетчи этой либы или кривые (выдают разные ошибки компиляции) или большие...
Думаю.. мож к меге этот экран подключить и попробовать через нее проверить?
Моя плата тоже все регистры выдает на чтение ноль :). я подбирал библиотеку методом тыка, но добрался. выше есть ссылки на используемые мной библиотеки, и как подключать, попробуй мож поможет.
.....
В монитор порта он выдает ID 0x4535
......
что это означает?
попробуйте еще для интереса от LG4535 http://arduino.ru/forum/apparatnye-voprosy/mcufriend-shield-0x4535-slabaya-yarkost
ID 0x4535 это и есть LG4535
судя по видосу и фоткам (библиотеку вы нашли! какая либа подошла? что она в терминал отвечала?), что вверху весь тест кажет идеально, а дальше все в цветных полосах - это матрица битая 99% . Можно выбрасывать, не стоит время терять.
// или использовать её разъем microSD и тачскрин . Или поменять дисплей на какой-нибудь как в соседней теме "дисплеи от сотиков".
Вы не гадайте а запросите у продавца модель контроллера. Я в свое время намаялся с 2,4 дисплеями, перепробовал много бибилиотек, тоже кроме полос - ничего, уже собирался выбрасывать, и запросил у продавца - ili9341 и все заработало.
Всем привет! Либа от ЛДж4535 не пошла, белый экран. Из неее запустился только скетч для идентификации контроллера. Подошла либа TFTLCD. В ней всего три примера: паинт, графиктест и еще чтото, результат вы видели. Сегодня продаван прислал кучу инфы, но все на китайском. Там главный "фигурант" ili 9341.Надо разбираться. Завтра притащу на работу Мегу 2560. Буду пробовать большие примеры на ней.
Попробовал этот дисплей с мегой- не завелся, белый экран. Из всех библиотек, предложенных в этой теме, экран завелся только с уно и с TFTLCD. Библиотека от lg не пошла. Маловато всетаки у меня знаний.... У меня есть еще 8 дней защиты покупателя..надо или запустить экран, или открывать спор и требовать возвращения денег. Хз что делать
пробовал MCUFRIEND_KBV-master? мне помогла, только сенсор теперь ковыряю
Не помогла эта библиотека
Zloy_Kot, попробуйте вот эти библиотеки:
в первом посте здесь: http://forum.arduino.cc/index.php?topic=314912.0
и почти такая же здесь: http://ceezblog.info/2015/04/20/240x320-28-tft-shield-driver-4535-for-arduino
To negavoid чтото нужно будет изменять в них? Или они так должны пойти?
To negavoid спасибо огромное за ссылки! Экран ожил с либой из второй ссылки. Из первой, честно говоря, не пробовал.
Правда, остался вопрос: после калибровки у тача особенность- чем дальше от центра тем ближе к краю сработка... Мож что не так калибранул?..
Zloy_Kot, попробуйте вот эти библиотеки:
в первом посте здесь: http://forum.arduino.cc/index.php?topic=314912.0
и почти такая же здесь: http://ceezblog.info/2015/04/20/240x320-28-tft-shield-driver-4535-for-arduino
2-я ссылка просто класс, спс.
доброго времени суток всем
перебрался на новое место и достал комплектики из коробок, сделал термометр, но вот проблема
платка про мини
экран тфт 2.4" библиотеку качал тут, и одна из них полошла
тайч и ридер не задействовал и даже не пытался, нет нужды
сделал датчик температуры
собирал на уно+lcd1602 изначально, месяц отработал отлично без глюков
пересобрал на Uno + tftlcd 2.4" - неделя, полет нормальный
пересобрал на макетной плате Pro Mini 328 (5V, 16MHz) + TFT LCD 2.4" + питание из зарядки (5в 1А) - неделя, полет нормальный
спаял все как на макетке - глючил как то, то не показывает, от только опдсветка работает, прошил вторую платку Про мини, все ок заработало
НО! оставил на ночь, все отлично показывало, а утром белый экран
Reset не реагирует не на экране, не на плате
выключение питания помогает на пару минут
выключил на пол дня, включил, прорабоатл пару часов и опять белый экран
проверил все контакты, непонимание в общем,
уже грешу на код, может забивает память какую нить?
#include <Adafruit_GFX.h> // Core graphics library #include "SWTFT.h" // Hardware-specific library #include <OneWire.h> //DS18B20 temperature sensor support #include <DallasTemperature.h> //DS18B20 sensor pin #define ONE_WIRE_BUS 10 // Setup a oneWire instance to communicate with any OneWire devices // (not just Maxim/Dallas temperature ICs) OneWire oneWire(ONE_WIRE_BUS); // Pass our oneWire reference to Dallas Temperature. DallasTemperature sensors(&oneWire); // Assign human-readable names to some common 16-bit color values: #define BLACK 0x0000 #define BLUE 0x001F #define RED 0xF800 #define GREEN 0x07E0 #define CYAN 0x07FF #define MAGENTA 0xF81F #define YELLOW 0xFFE0 #define WHITE 0xFFFF #define orange 0xFBE0 #define orange2 0xFD20 SWTFT tft; // If using the shield, all control and data lines are fixed, and // a simpler declaration can optionally be used: // SWTFT tft; float last_t; void setup(void) { tft.reset(); sensors.begin(); uint16_t identifier = tft.readID(); tft.begin(identifier); //Добавлено delay(1000); tft.fillScreen(BLACK); delay(1000); tft.fillScreen(BLACK); //конец добавленого } void loop() { tft.setRotation(1); sensors.requestTemperatures(); //Read first sensor int temp = sensors.getTempCByIndex(0); tft.setCursor(80, 20); tft.setTextColor(WHITE); tft.setTextSize(2); tft.println("TEMPERATURA"); tft.setCursor(100, 100); if( abs(last_t-temp)>=1 ) { tft.setCursor(100, 100); tft.fillRect(50, 50, 400, 200, BLACK); tft.setTextColor(RED); tft.setTextSize(20); tft.setCursor(50, 50); tft.print(temp); } else { tft.setCursor(100, 100); tft.fillRect(50, 50, 400, 200, BLACK); tft.setTextColor(BLUE); tft.setTextSize(20); tft.setCursor(50, 50); tft.print(temp); } delay(10000); }не стал перезагружать, просто висел включенный, заработал сам, 3 часа уже работает, пока все ок
не понятно
Тоже долго возился с подбором библиотек. Дисплей с кодом 0x0154 +UNO. Тоже уже почти решил, что труп - но заработал. Графические библиотеки от 5408_....master, библиотека тача от Адафрут - только пины тача нестандартные, А1, А2, 7, 6. Калибровка пока ни одна не заработала - примерно подобрал значения - пример paint работает (точки вместо линий - но это похоже просто быстродействия не хватает). Изображение приходится разворачивать на 90 градусов - иначе тач и изображение не совпадают (оси перепутаны). SD не проверял еще.
аналоговые часы, переписал под UNO + SPFD5408 (chip ILI9328): https://youtu.be/aF2mSPtxEW0
Взято отсюда http://arduino-project.net/analog-clock-arduino-mega/
//Подключение библиотек #include <Adafruit_TFTLCD.h> #include <DS1307.h> //#include <Wire.h> #define LCD_CS A3 #define LCD_CD A2 #define LCD_WR A1 #define LCD_RD A0 //#define LCD_RESET A4 //перерезана дорожка на LCD_RST на плате LCD #define TFT_BLACK 0x0000 #define TFT_BLUE 0x001F #define TFT_RED 0xF800 #define TFT_GREEN 0x07E0 #define TFT_CYAN 0x07FF #define TFT_MAGENTA 0xF81F #define TFT_YELLOW 0xFFE0 #define TFT_WHITE 0xFFFF #define TFT_GREY 0x5AEB Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, 1); //Подключение модуля DS1307 DS1307 rtc(A4, A5); Time t; //Центральные координаты для рисования стрелочных часов int clockCenterX = 119; int clockCenterY = 159; int oldsec = 0; void setup() { // Serial.begin(9600); Serial.println("Initializing ..."); tft.reset(); uint16_t idLCD = tft.readID(); Serial.print(F("Found LCD driver ")); Serial.println(idLCD, HEX); tft.begin(idLCD); //SPFD5408 id 9325/9328/9341 Adafruit_TFTLCD.h tft.setRotation(0);; // вертикальное отображение // яркость дислея TFT SPFD5408 ??? //analogWrite(5, 100); // // для максимальной яркости значение 100 меняем на 150, а для минимальной на 5 rtc.halt(false); /*Для установки времени, введите ваши параметры и раскомментируйте 3 строки ниже и загрузите скетч на ардуино,а потом назад закомментируйте обратно*/ // rtc.setTime(23, 59, 55); // rtc.setDate(11, 12, 2016); // rtc.setDOW(SUNDAY); } void drawDisplay() { // Очистка дисплея tft.fillScreen(TFT_BLACK); // Рисуем циферблат tft.setTextColor(TFT_CYAN); for (int i = 0; i < 5; i++) { tft.drawCircle(clockCenterX, clockCenterY, 119 - i, TFT_CYAN); } for (int i = 0; i < 5; i++) { tft.drawCircle(clockCenterX, clockCenterY, i, TFT_WHITE); } //Отображаем числа на циферблате tft.setTextColor(TFT_WHITE); tft.setTextSize(2); tft.setCursor(clockCenterX + 99, clockCenterY - 7); tft.print("3"); tft.setCursor(clockCenterX - 7, clockCenterY + 95); tft.print("6"); tft.setCursor(clockCenterX - 109, clockCenterY - 7); tft.print("9"); tft.setCursor(clockCenterX - 9, clockCenterY - 109); tft.print("12"); //Рисуем метки часов for (int i = 0; i < 12; i++) { if ((i % 3) != 0) drawMark(i); } t = rtc.getTime(); printData(); drawMin(t.min); drawHour(t.hour, t.min); drawSec(t.sec); oldsec = t.sec; } void drawMark(int h)//Отрисовка меток { float x1, y1, x2, y2; h = h * 30; h = h + 270; x1 = 114 * cos(h * 0.0174532925); y1 = 114 * sin(h * 0.0174532925); x2 = 100 * cos(h * 0.0174532925); y2 = 100 * sin(h * 0.0174532925); tft.drawLine(x1 + clockCenterX, y1 + clockCenterY, x2 + clockCenterX, y2 + clockCenterY, TFT_WHITE); } void printData() //print Data&Day { //Отображение текущей даты tft.setTextSize(2); tft.setTextColor(TFT_WHITE, TFT_BLACK); tft.setCursor(clockCenterX - 60, 10); tft.print(rtc.getDateStr()); //Отображение дня недели tft.fillRect(clockCenterX-9*12/2, tft.height()-25, 9*12, 16, TFT_BLACK); //erase String DoW = rtc.getDOWStr(); tft.setTextColor(TFT_WHITE, TFT_BLACK); tft.setCursor(clockCenterX-DoW.length()*12/2, tft.height()-25); tft.print(DoW); } void drawDigClock() //Draw Mini Dclock { int xpos = clockCenterX - 47; int ypos = clockCenterY + 70; tft.drawRoundRect(xpos - 4, ypos - 4, 102, 22, 5, TFT_CYAN); // рамка tft.setTextColor(TFT_WHITE, TFT_BLACK); tft.setTextSize(2); tft.setCursor(xpos, ypos); tft.print(rtc.getTimeStr()); } void drawSec(int s) //отрисовка секундной стрелки { float x1, y1, x2, y2; int ps = s - 1; if (ps == -1) ps = 59; ps = ps * 6; ps = ps + 270; x1 = 95 * cos(ps * 0.01745); y1 = 95 * sin(ps * 0.01745); x2 = 5 * cos(ps * 0.01745); y2 = 5 * sin(ps * 0.01745); tft.drawLine(x1 + clockCenterX, y1 + clockCenterY, x2 + clockCenterX, y2 + clockCenterY, TFT_BLACK); s = s * 6; s = s + 270; x1 = 95 * cos(s * 0.01745); y1 = 95 * sin(s * 0.01745); x2 = 5 * cos(s * 0.01745); y2 = 5 * sin(s * 0.01745); tft.drawLine(x1 + clockCenterX, y1 + clockCenterY, x2 + clockCenterX, y2 + clockCenterY, TFT_RED); } void drawMin(int m) //отрисовка минутной стрелки { float x1, y1, x2, y2, x3, y3, x4, y4; int pm = m - 1; int w = 5; // толщина стрелки, было 4 if (pm == -1) pm = 59; pm = pm * 6; pm = pm + 270; x1 = 80 * cos(pm * 0.01745); y1 = 80 * sin(pm * 0.01745); x2 = 5 * cos(pm * 0.01745); y2 = 5 * sin(pm * 0.01745); x3 = 30 * cos((pm + w) * 0.01745); y3 = 30 * sin((pm + w) * 0.01745); x4 = 30 * cos((pm - w) * 0.01745); y4 = 30 * sin((pm - w) * 0.01745); tft.drawLine(x1 + clockCenterX, y1 + clockCenterY, x3 + clockCenterX, y3 + clockCenterY, TFT_BLACK); tft.drawLine(x3 + clockCenterX, y3 + clockCenterY, x2 + clockCenterX, y2 + clockCenterY, TFT_BLACK); tft.drawLine(x2 + clockCenterX, y2 + clockCenterY, x4 + clockCenterX, y4 + clockCenterY, TFT_BLACK); tft.drawLine(x4 + clockCenterX, y4 + clockCenterY, x1 + clockCenterX, y1 + clockCenterY, TFT_BLACK); m = m * 6; m = m + 270; x1 = 80 * cos(m * 0.01745);// Длина стрелки y1 = 80 * sin(m * 0.01745); x2 = 5 * cos(m * 0.01745); y2 = 5 * sin(m * 0.01745); x3 = 30 * cos((m + w) * 0.01745); y3 = 30 * sin((m + w) * 0.01745); x4 = 30 * cos((m - w) * 0.01745); y4 = 30 * sin((m - w) * 0.01745); tft.drawLine(x1 + clockCenterX, y1 + clockCenterY, x3 + clockCenterX, y3 + clockCenterY, TFT_WHITE); tft.drawLine(x3 + clockCenterX, y3 + clockCenterY, x2 + clockCenterX, y2 + clockCenterY, TFT_WHITE); tft.drawLine(x2 + clockCenterX, y2 + clockCenterY, x4 + clockCenterX, y4 + clockCenterY, TFT_WHITE); tft.drawLine(x4 + clockCenterX, y4 + clockCenterY, x1 + clockCenterX, y1 + clockCenterY, TFT_WHITE); } void drawHour(int h, int m) //отрисовка часовой стрелки { float x1, y1, x2, y2, x3, y3, x4, y4; int ph = h; int color = TFT_CYAN;// цвет стрелки int w = 7; // толщина стрелки, было + 4 if (m == 0) { ph = ((ph - 1) * 30) + ((m + 59) / 2); } else { ph = (ph * 30) + ((m - 1) / 2); } ph = ph + 270; x1 = 60 * cos(ph * 0.01745); y1 = 60 * sin(ph * 0.01745); x2 = 5 * cos(ph * 0.01745); y2 = 5 * sin(ph * 0.01745); x3 = 20 * cos((ph + w) * 0.01745); y3 = 20 * sin((ph + w) * 0.01745); x4 = 20 * cos((ph - w) * 0.01745); y4 = 20 * sin((ph - w) * 0.01745); tft.drawLine(x1 + clockCenterX, y1 + clockCenterY, x3 + clockCenterX, y3 + clockCenterY, TFT_BLACK); tft.drawLine(x3 + clockCenterX, y3 + clockCenterY, x2 + clockCenterX, y2 + clockCenterY, TFT_BLACK); tft.drawLine(x2 + clockCenterX, y2 + clockCenterY, x4 + clockCenterX, y4 + clockCenterY, TFT_BLACK); tft.drawLine(x4 + clockCenterX, y4 + clockCenterY, x1 + clockCenterX, y1 + clockCenterY, TFT_BLACK); h = (h * 30) + (m / 2); h = h + 270; x1 = 60 * cos(h * 0.01745);// Длина стрелки y1 = 60 * sin(h * 0.01745); x2 = 5 * cos(h * 0.01745); y2 = 5 * sin(h * 0.01745); x3 = 20 * cos((h + w) * 0.01745); y3 = 20 * sin((h + w) * 0.01745); x4 = 20 * cos((h - w) * 0.01745); y4 = 20 * sin((h - w) * 0.01745); tft.drawLine(x1 + clockCenterX, y1 + clockCenterY, x3 + clockCenterX, y3 + clockCenterY, color); tft.drawLine(x3 + clockCenterX, y3 + clockCenterY, x2 + clockCenterX, y2 + clockCenterY, color); tft.drawLine(x2 + clockCenterX, y2 + clockCenterY, x4 + clockCenterX, y4 + clockCenterY, color); tft.drawLine(x4 + clockCenterX, y4 + clockCenterY, x1 + clockCenterX, y1 + clockCenterY, color); } void loop()//основной цикл работы стрелочных часов { int x, y; t = rtc.getTime(); drawDisplay(); Serial.print(rtc.getTimeStr());Serial.println(" 0 printData"); while (true) { if (oldsec != t.sec) { int t1 = 0; int t2 = 0; int t3 = 0; if (t.hour >= 12) { t1 = (t.hour - 12) * 5; } else { t1 = t.hour * 5; } t2 = t.min / 12; t3 = t1 + t2; int a = t.min + 1; int b = t.min + 2; int c = t.min + 3; int d = t3 + 1; int e = t3 + 2; int f = t3 + 3; int g = t3 + 4; if ((t.sec == d) || (t.sec == e) || (t.sec == f) || (t.sec == g)) { drawHour(t.hour, t.min); } if ((t.sec == a) || (t.sec == b) || (t.sec == c)) { drawMin(t.min); } if (t.sec == 0) { drawMin(t.min); drawHour(t.hour, t.min); if ((t.hour == 0) && (t.min == 0)) { printData(); } } drawSec(t.sec); drawDigClock(); oldsec = t.sec; } delay(10); t = rtc.getTime(); } }еще добавлю маленький барограф на трое суток
Привет народ, посоветуйте безпроблемный экран с тачскрином для метеостанции, желаемый размер 3-4 дюйма...
Хочу выводить время, давление, температуру, содержание СО2... Контроллер или МЕГА или УНО, скорее всего МЕГА.
на 3-4 - это точно МЕГА...
Некоторое время назад купил 2.4 на ILI9341, запустил с SPDF 5408 на УНО. Всё работало и экран и тач скрин.
Так как на УНО не портов свободных, а МЕГИ не было отложил на будующее.
Появилась МЕГА и решил проверить на УНО перед переносом. Не то что бы не работает, работает очень коряво.
Нарисовал на экране линию от 0,0 до 320,240 начало и конец соответствует координатам, а в середине линии расположенны параллейно основной, но раскиданны отрезками в случайно порядке. Поробовал поменять библиотеки, но получается то же самое.
Экран на выброс?
Экран на выброс?
Если тесты экран проходит, то тачскрин
1. вероятней контакт иль сопилюшка и 2. библиотека, сама UNO. пробуйте библиотеку адафруит, mcufriend ili9341 8bit (не SPI). смотрите что выдал в терминал пример с библиотеки. пробуйте на Меге.
1. прозвоните мультимертом
2. сотрите библиотеки дисплеев и графики из моих документов- ардуино - библиотеки
и распакуйте заново. (а то , мало ли . ставили поверх библиотеки длчя работы с маленькими экранами), а при компиляции , они случайно могут подтягиваться как выше по расположению папки.
Вот примеры тестов.
Такое впечатление, что переставляюся блоки пикселей.
Судя по тому что эффекты поворачиваются при логическом повороте экрана- проблема с библами... контакты скорее всего нипричем.
У меня spfd5408 все примеры работают, но экран разделен на 2 части и все изображения работают синхронно, и даже татч, где глюк?? спасибо!!
размер экрана?
внимание на эти строки
Здравствуйте. А кто-нибудь добивался работы Atmega128 и дисплея tft 2.4 на ili9341? Библиотека "SPFD5408-master" c гит хаба. https://github.com/JoaoLopesF/SPFD5408 ( Кстати, на 328 атмеге все чудесно работает с этой библиотекой, но свободных пинов почти не остается.). Ковырял ее долго. Но опыта маловато. Исправлял файлы библиотеки и "pin_magic.h" и "SPFD5408_Adafruit_TFTLCD.cpp". Не помогло. Может кто подскажет как Atmega128 с TFT 2.4 на ili9341 поженить. На данный момент при загрузке график теста из примеров экран мерцает и видно, что процесс идет. Но, похоже, не происходит инициализации дисплея и картинки нет, только мерцание. В Atmega128 загрузчик MegaCore с гит хаба (https://github.com/MCUdude/MegaCore). Исправленная мной библиотека здесь https://yadi.sk/d/HlwgoRtS3HYgNZ .
что именно правили? делал на Atmega128 и дисплее tft ili9341 spi , библиотеку использовал UTFT . подправить пришлось её - это просто добавил коммент atmega128 к существующему atmega2560, и стер лишнее про не существующиие порты оставшиеся от atmega2560.
все робит без проблем.
// лучше конечно выкладывать свои решения в соответсвующей существующей теме про atmega128 crumbuino/megacore http://arduino.ru/forum/apparatnye-voprosy/crumbuino-128-svoimi-rukami .
как сделаете, напишите как и что . тогда можно нов. тему создать с готовыми решениями про MegaCore и допиливание под нее либ.
//// от пинов 8/16 битного дисплея можно избавиться максимум от 3-х : reset , cs , rd . вытерев их из либы . так делал на UTFT http://arduino.ru/forum/apparatnye-voprosy/arduino-i-displei-ot-sotikov-mobilnykh-telefonov?page=1#comment-167595
Если не трудно где это?
Я заливаю spfd5408_graphicstest.
У меня на UNO заработал дисплей только с "SPFD5408-master". Вот и решил его ковырять. В pin_magic.h оставил только для Atmega128.
#ifndef _pin_magic_ #define _pin_magic_ // Shield pin usage: // LCD Data Bit : 7 6 5 4 3 2 1 0 // Digital pin #: 7 6 13 4 11 10 9 8 // Uno port/pin : PD7 PD6 PB5 PD4 PB3 PB2 PB1 PB0 // Mega port/pin: PH4 PH3 PB7 PG5 PB5 PB4 PH6 PH5 // Leo port/pin : PE6 PD7 PC7 PD4 PB7 PB6 PB5 PB4 // Due port/pin : PC23 PC24 PB27 PC26 PD7 PC29 PC21 PC22 // Breakout pin usage: // LCD Data Bit : 7 6 5 4 3 2 1 0 // Uno dig. pin : 7 6 5 4 3 2 9 8 // Uno port/pin : PD7 PD6 PD5 PD4 PD3 PD2 PB1 PB0 // Mega dig. pin: 29 28 27 26 25 24 23 22 // Mega port/pin: PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0 (one contiguous PORT) // Leo dig. pin : 7 6 5 4 3 2 9 8 // Leo port/pin : PE6 PD7 PC6 PD4 PD0 PD1 PB5 PB4 // Due dig. pin : 40 39 38 37 36 35 34 33 // Due port/pin : PC8 PC7 PC6 PC5 PC4 PC3 PC2 PC1 (one contiguous PORT. -ish…) // Modified for SPFD5408 by Joao Lopes to work with SPFD5408 #define DELAY7 \ asm volatile( \ "rjmp .+0" "\n\t" \ "rjmp .+0" "\n\t" \ "rjmp .+0" "\n\t" \ "nop" "\n" \ ::); #define __AVR_ATmega128__ #define USE_ADAFRUIT_SHIELD_PINOUT // LCD control lines: // RD (read), WR (write), CD (command/data), CS (chip select) #define RD_PORT PORTF /*pin A0 */ #define WR_PORT PORTF /*pin A1 */ #define CD_PORT PORTF /*pin A2 */ #define CS_PORT PORTF /*pin A3 */ #define RD_MASK B00000001 #define WR_MASK B00000010 #define CD_MASK B00000100 #define CS_MASK B00001000 // These are macros for I/O operations... // Write 8-bit value to LCD data lines #define write8inline(d) { \ PORTD = (PORTD & B00000000) | ((d) & B11111111); \ WR_STROBE; } // STROBEs are defined later // Read 8-bit value from LCD data lines. The signle argument // is a destination variable; this isn't a function and doesn't // return a value in the conventional sense. #define read8inline(result) { \ RD_ACTIVE; \ DELAY7; \ result = (PIND & B11111111); \ RD_IDLE; } #define setWriteDirInline() { DDRD |= B11111111;} #define setReadDirInline() { DDRD &= ~B11111111;} #define write8 write8inline // #elif defined(__AVR_ATmega128__) || defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega1280__) // When using the TFT breakout board, control pins are configurable. #define RD_ACTIVE *rdPort &= rdPinUnset #define RD_IDLE *rdPort |= rdPinSet #define WR_ACTIVE *wrPort &= wrPinUnset #define WR_IDLE *wrPort |= wrPinSet #define CD_COMMAND *cdPort &= cdPinUnset #define CD_DATA *cdPort |= cdPinSet #define CS_ACTIVE *csPort &= csPinUnset #define CS_IDLE *csPort |= csPinSet // Data write strobe, ~2 instructions and always inline #define WR_STROBE { WR_ACTIVE; WR_IDLE; } // These higher-level operations are usually functionalized, // except on Mega where's there's gobs and gobs of program space. // Set value of TFT register: 8-bit address, 8-bit value #define writeRegister8inline(a, d) { \ CD_COMMAND; write8(a); CD_DATA; write8(d); } // Set value of TFT register: 16-bit address, 16-bit value // See notes at top about macro expansion, hence hi & lo temp vars #define writeRegister16inline(a, d) { \ uint8_t hi, lo; \ hi = (a) >> 8; lo = (a); CD_COMMAND; write8(hi); write8(lo); \ hi = (d) >> 8; lo = (d); CD_DATA ; write8(hi); write8(lo); } // Set value of 2 TFT registers: Two 8-bit addresses (hi & lo), 16-bit value #define writeRegisterPairInline(aH, aL, d) { \ uint8_t hi = (d) >> 8, lo = (d); \ CD_COMMAND; write8(aH); CD_DATA; write8(hi); \ CD_COMMAND; write8(aL); CD_DATA; write8(lo); } #endif // _pin_magic_И в "SPFD5408_Adafruit_TFTLCD.cpp" указал:
(это малая часть кода)
Jamesу
Где найти эти строки
_width = WIDTH;