Хочу поделиться с Вами обзором маленького, но очень перспективного экрана для поделок на Arduino и прочих микроконтроллерах.
После повседневного использования мониторов ПК, экранов телефонов c IPS матрицей, изображения на TFT экранах для Arduino кажутся достаточно убогими. И тут дело не только в цветопередаче, но еще и в разрешении. Недавно у китайцев на Aliexpress появились миниатюрные экраны диагональю всего 1.3", но при этом с разрешением аж 240х240 пикселей, и мало того, матрицей IPS. Я, в свою очередь, понадеялся, что китайцы не обманут и заказал один из таких экранов.
Доставка
Заказываю у данного продавца уже не первый раз, и никогда не было нареканий на качество упаковки, тут придраться не к чему.
Внешний вид и характеристики
Матрица: ZJY130-IPS
Разрешение: 240 x 240
Размер видимой области: 23,4 x 23,4 мм
Размер платы: 28 x 39 мм
Интерфейс подключения: SPI
Контроллер: ST7789
Напряжение питания: 3.3 В
Уровни сигналов: 3.3 В
Углы обзора: великолепные!
Проблемы
Получив экран конечно же я принялся его тестировать. Нашел и скачал библиотеку Adafruit-ST7735-library (которая подходит и для ST7789) и стал подключать экран к Arduino.
Входы экрана рассчитаны на уровни 3.3 В, поэтому обязательно подключайте через резисторы или преобразователь уровней. Я использовал преобразователь TXS0108E. Подключив все выводы, как указано в библиотеке, обнаружилось, что у экрана отсутствует вывод CS. То ли китайцы что-то намудрили, то ли так и надо.
Что такое CS
Для тех, кто не знаком с электроникой: Интерфейс SPI предполагает параллельное подключение всех устройств к шине данных и тактирования. Для того, чтобы общаться с одним из устройств, подключенным к SPI, это устройство необходимо «активировать», подав на вывод CS конкретного устройства низкий уровень сигнала. Вывод CS (Chip Select) переводится как «выбор кристалла». Помимо выбора устройства, без вывода CS проблематично определить начало передачи по интерфейсу SPI.
Стал писать продавцу и узнавать, есть ли примеры кода для этого экрана, на что он мне сразу прислал архив с какими-то проектами, название которых говорило о том, что они для данного экрана, а в коде которых было подключение к OLED экран по шине I2C.
Но не беда, подумал я, отпаял шлейф экрана, разрезал дорожку, подключающую CS к земле, вывел ее на проводок и припаял шлейф обратно. Получилось достаточно колхозно, но фото к сожалению не осталось.
Следующим этапом была проверка работоспособности экрана. С библиотекой Adafruit-ST7735-library все заработало. Но не будут же все проводить такие операции с экраном, тем более среди ардуиньщиков мало кто держал в руках паяльник. И тут родилась идея, написать библиотеку для работы с экраном, у которого отсутствует вывод CS (вернее вывод CS замкнут на землю все время).
Вот собственно и она:
Arduino-ST7789-library
Кстати, уже заметил, что в отзывах на экран куча комментариев, что экран не работает и у него нет вывода CS.
Обзор качественных характеристик
А теперь самое интересное — сравнение с экранами OLED 1.5 SPI 128x128 на контроллере SSD1351 (слева) и TFT 1.44 SPI 128x128 на контроллере ST7735 (в середине). На все три экрана была выведена одинаковая картинка.
Смотрим прямо:
Смотрим снизу:
Смотрим сверху:
У OLED и IPS отличные углы обзора, но OLED проигрывает по яркости и цветопередаче. У TFT идет смещение всей картинки в синий цвет (вероятно, из-за цветовой температуры подсветки). Фотографиями, конечно, не передать всего качества картинки, но можете поверить, на IPS экранчике все прямо как на телефоне — насыщенно, четко, ярко.
UPD
Токи потребления в режиме отображения статической картинки:
OLED: 179 мА
TFT: 18 мА
IPS: 26 мА
Вероятно, step-up на 13В самого модуля, мягко говоря, не эффективен.
ru.aliexpress.com/item/IPS-1-3-3-3-12PIN-SPI-Full-HD-TFT/32859772356.html
Ну и, собственно, проблема-то была в отсутствии библиотеки. Теперь библиотека есть, поэтому без проблем можно использовать тот, который в обзоре, не допиливая его руками.
2. стоить будет дороже (мк мега2560 была добыта хозяином хз где, плату ему знакомец вытравил за 50 рублей, разъемы на все про все 100 рублей, еще и остались, обвяз выпаяли с дешевой уно, реле автомобильные и обвяз к ним был добыт в куче всякого разного хлама).
3. настроек больше.
4. Не возможности мониторить график изменения температуры. Когда к примеру у тебя 30 видяшек и у 29 температура после разъема питания 40, а у 30-й 55… стоит подумать о том что же там не так. Потом дописали быстро запуск приложения с параметрами и утилита временами запускала простой батничек с этими параметрами и хозяин уже сам потом по образу и подобию нашел как отправлять сообщение на почту, потом вроде бы как еще как-то что-то придумал для оповещений. В общем не сравнить.
и
Там мелкий шаг и неизвестная адгезия проводника к шлейфу, т.е. указанный «вариант проще» может оказаться «опять месяц ждать, пока новый экран приедет».
Ссылку на даташит добавил в характеристики дисплея.
У 328-х памяти для анимации практически нет, если на ARM-ах, то можно и почти кино смотреть :)
P.S. «погодных станций» ни разу не понимал зачем они нужны в таком количестве «самоделкиным».
Нормально, да и встроить в любое устройство можно, а иногда даже нужно.
Может под «погодной станцией» — разное понимают? Например, зафиксировать текущую температуру, давление, влажность — это просто. А предугадать погоду на завтра (имея доступ к дополнительным данным), а просчитать — будет ли сегодня голова болеть, или ноги крутить?
Да и термостат в котел соорудить за 2 копейки — все же лучше, чем пробухать эти деньги — верно ведь?
предугадать погодувзять ESP и распарсить погодный сайт или API.Ну или пойти во все тяжкие: изучить метеорологию, построить нейронку и выкачивать ежедневно терабайты данных. В мире нет никого более беспомощного, безответственного и безнравственного, чем терабайты погодных данных. И я знал, что довольно скоро мы в это окунёмся.
А так все в одном месте — и внутри, и снаружи, и дождь, и прогноз.
Заодно и тренировка в создании «цельности из разрозненности».
И еще — создавать архиваторы с игрушками (в одиночку) — это чистейшая математика. А погодная станция — это дизайн и немного программирования. Т.е. направленности все-же разные.
Где Вы такой допотопный сайт нашли? Ладно, шучу, прям точно за окном температуру не узнать, но погрешность в 2 градуса совсем не критична. А вот точность прогноза самодельного и с сайта как самокат и феррари. Причем можно знать будет ли дождь в ближайший час, два, три… можно выйти ровно на час чтобы успеть вернуться до начала дождя.
А температура внутри это уже как героиновая зависимость.
Угу, но только если температура меняется на 2-4 градуса за минуту — значит на улице еще и ветер присутствует.
Значит многие (особенно молодые) родители — приобретают эту зависимость, особенно в первые 3-6 месяцев жизни нового члена семейства.
Известная болезнь: geektimes.com/post/297999/ geektimes.com/post/289453/
Некоторые стараются лечиться: geektimes.com/post/289671/
Выбрал из первого попавшегося, правда не нашел статьи что мне понравилась.
Хотя в первые месяцы возможно надо.
Понятно, что для получения максимально приближенных к средневзвешенным в объеме данных нужно строить короб. Но весь цимес собственноручно построенных метеостанций — именно в процессе, и в возможности испробовать нестандартные приемы для решения своих задач.
На «правильном» градуснике — 26, а на «неправильном» в течении минуты меняется от 35 до 29. Вывод — солнце шпарит, ветерок обдувает. Ребенку получить солнечный «бабах» — как два пальца об асфальт. По-этому мокрая панамка на голову и команда появляться каждые 15 минут, для обновления «охлаждающей жидкости». :)
Почему-то вспомнилось:
— Вам нравятся дети?
— Нет… но сам процесс.
Так и здесь — интересен процесс, а остальное — мелочи :)
Ну и к той-же метеостанции добавляются «правильные» термометры, барометры, гигрометры и данные с разных «погодподземлей» :)
В общем — здесь есть поле, поле обширное, интересное, и имеющее низкий уровень вхождения.
А здесь топикстартер еще и достаточно интересные дисплеи засветил… (вспомнили :))))) )
Вон на радиокоте осциллограф вполне себе отличный GFX завел. Но там железо «чуток» посильнее :)
ARM + нормальная среда и работа по прерываниям — будут.
Ардуина — это отлично для быстрого, но простого протатипирования. Но если нужно выжать максимальную производительность из железа, то это однозначно не ардуина, а спеки, маны и правильная сдк-шка :)
Будет медленно, буквально со скоростью перепрохода этого самого loop-а.
Максимальную скорость SPI на AVR я уже не помню, но вот паузы между байтами ее SPI по-моему делает, и ни о каком DMA из памяти не может быть и речи :) То есть раза в три длительность можно смело умножить — это еще если не отрисовывать что-то сложное типа шрифтов с прозрачностью :)
Для поделок на ардуине еще очень удобны такие дисплейчики, они 128х160 и почти 1,8"
Если бы они были бы еше и IPS — для ардуины небыло бы конкурентов в принципе. :)
Рассмотренный экран отличный, но ОЧЕНЬ мелкий.
Раздавил-каюсь.На шлейфе JL-18CO2-SD-A2
Вроде 1,8 дюйма,26 пинов…
Вот это не он? ru.aliexpress.com/item/1-77-inch-JL18C01-SD-A2-ST7735S-OLED-MP3-game-machine-LCD-screen/32830794125.html?dp=13c47f3a2ff48dda79cbddcd239c1cfe&af=137322&cv=47843&afref=&mall_affr=pr3&aff_platform=aaf&cpt=1525527915485&sk=VnYZvQVf&aff_trace_key=d0195c565c344e18bdcb4ec4f91df0f6-1525527915485-03881-VnYZvQVf&terminal_id=86a85b20937d4f54bc8274682e1a8c83
По фоткам в нете JL18C01 имеет 20пинов, поэтому чешу репу )))
Но, то что начали продавать приличные экранчики по шуточной цене — тенденция хорошая.
Вариант 2: Если для экрана скорости «software» SPI мало, то для него можно задействовать «hardware» SPI, а для всего остального «software» SPI.
В примере скетча, который идет с библиотекой несколько вариантов подключения экрана — с использованием «software» и «hardware» SPI, а также с использованием CS и без.
За труды и популяризацию спасибо. Плюс поставил.
И с чего вдруг bit-bang вдруг костылем стал? Если реализовано что-то программно, а не аппаратно — это сразу костыль что-ли?
В данном случае — да :)
Ну да, ну да, особенно если надо сделать несколько SPI и не стэковать их (например из-за той-же скорости), а аппаратный доступен только один.
Можно, конечно, заюзать STM или MEGA вместо тиньки — но вот это уже тогда — точно костыль.
Можно практический пример девайса на тиньке когда действительно необходимо работать по двум или более SPI?
Только потому что есть железный на борту. Расход ног памяти и тд.
Зачем вам ноги? Щас такие протезы делают, мама дорогая. Увидите и удивитесь.
Это на что там память-то уходит, нука-нука, удивите? Или Вы код считаете? Дак огорчу — очень мало уйдет на программную реализацию, а если на ASM — то вообще копейки — даже для Тиньки13 это несущественно.
А по-поводу «увидите и удивитесь» прежде чем спорить, посмотрите тесты скорости бит-бэнг SPI и аппаратного и потом уже поговорим, если вопросы останутся.
плюсы bit-bang SPI:
+ любое количество (ограничение только ноги)
+ работа на любом проце (в независимости от модели, а если на C — то и в независимости от платформы)
минусы:
— более низкая скорость работы
— затраты времени выполнения
И это уж точно — не костыль а вполне себе фича — мы еще не дожили до времени, когда все платформы будут универсальный и SPI можно будет повесить сколько угодно на какие угодно ноги.
И эта фича дает возможность делать вещи гораздо более дешевым и использовать их на 100%, а не стрелять пушками по воробьям используя тяжелые и дорогие процы и нагружая их на 5% чтобы «лампочкой помигать» — только ради аппаратной реализации протокола связи.
Не смешите вобщем — bit-bang — это инструмент, и как любой инструмент — ему есть время и место для применения и если Вы не овладели навыком работы с ним — так дело в Вас, а не в инструменте.
Так что костыль в таком случае — Вы.
Оба плюса сильно притянуты за уши. Любое количество обычно нафиг не нужно, как и работа на каких-то экзотических микроконтроллерах, не имеющих аппаратного SPI. А если уж очень сильно нужно, то просто надо взять контроллер с двумя SPI.
Забыли еще один немаловажный минус — микроконтроллер во время передачи наглухо занят этой самой передачей и больше ничем (кроме критичных прерываний) заниматься не может.
Это костыль для тех кто не умеет работать с аппаратным или не умеет выбрать подходящий под задачи микроконтроллер :)
UART даже программный прост как две копейки, а I2C нельзя назвать полностью аппаратным в AVR.
А знаете как байт в UART переслать без библиотеки? UDR=data;
(Ну еще можно проверить флаг на занятость, и это без прерываний, и без инициализации, каждое из них займет по 3-5 строк.)
Считать так же: data=UDR;
Вот это аппаратная реализация в отличие от I2C.
Я писал без arduino и сдался реализовывать состояния и обрабатывать зависания при неотвечающих устройствах.
нефиг приплетать сюда формально терминологию, которой 60 лет в обед — при том, что все поняли, в каком смысле использованы автором расхожие определения
поборитесь лучше за чистоту йазыка с литий vs li-ion, там поезд возможно ещё не совсем ушёл;)
Привет, что вы перешли в библиотеку ST7789, чтобы решить проблему отсутствия CS? Спасибо, что поделился!
Это как раз негодующий покупатель, видимо.
Я ввожу в поиск ST7789 и мне выдаёт только два результата:
Странно, сделал такой же запрос, у меня в результатах поиска 30 вариантов.
Пробовал всякие варианты — жать Enter, кликать на рыжую кнопку, выбирать предлагаемые варианты из списка…
После этой «дрочки» алиэкспресс через Tor наконец начал выдавать 30 результатов БЕЗ требования залогиниться!
В моём фаерфоксе по-прежнему выдавало 2 результата.
И только после того как я приказал фаерфоксу «Забыть об этом сайте», мне начало выдавать 30 результатов!
Такое ощущение, что распространённые термины кэшируются и выдаются без регистрации, а редкие НЕ кэшируются и требуют логина. Но если хорошо постараться, можно сделать термин распространённым.
Вопрос требует продолжения экспериментов…
edit: Всё равно не понятно, почему у вас сразу выдавало 30 результатов, может на разных серверах разный кэш…
Особенно заметно, если искать Хиквижинские камеры по названию модели.
Sda — линия даеных pin11
Sdl — тактирование pin13
Dc и reset — pin 8 и 9
Vcc и blk — 3.3v
Gnd — gnd
…
Только вот одна фигня, — мусор на экране и всё. Как-будто запись в буфер экрана не происходит, т.е. при инициализации дисплей мусор из памяти показывает, и дальше экран заливается черным и дальше всё тупо зависает.
Беда видимо из-за обновлений adafruit'овских библиотек. Х.з на какие версии у автора было сделано.
Подобная беда была с олед1306. Написал скетч под версию 1.2.4, — работает, обновил библиотеку и скеч перестал работать, тупо всё зависает. Хорошо бы автор обновил свою либу
Но тут какой то косяк, все равно видно как обновляется изображение. На ютубе к данному дисплею тоже видел такой комментарий «медленный он невероятно, я разогнал обмен до 11ФПС, а обновления выше 6ФПС не поднимаются никак.»
P.S. Сторонними библиотеками не пользуюсь.
Вот я программно синхронизировал ~ частоту обновления (через porch и frame rate) и частоту вывода и даже никаких артефактов не видно :). Но это синтетика, вывод TE все равно для этого нужен.
40fps, заливка красный-зеленый-синий. Используется stm32f103, DMA не используется.
yadi.sk/i/c_CBeqB3S7UA4g