Полезные модули с AliExpress для любителей Arduino и электронного творчества.
1. 2-канальный модуль реле SRD 12В H + L с оптопарой
Представляет собой устройство дтеристля управления нагрузкой с помощью двух независимых реле. Модуль обладает рядом полезных функций и харакик, делающих его удобным и универсальным для различных приложений.
Модуль имеет два независимых канала реле, что позволяет управлять двумя нагрузками независимо друг от друга.
На плате модуля присутствуют две тактовые кнопки включения для соответствующих реле, обеспечивая возможность ручного управления нагрузкой.
Модуль оснащен LED-индикатором питания (зеленым светодиодом) и двумя LED-индикаторами включения реле (красными светодиодами), что обеспечивает визуальную обратную связь о состоянии питания и работы каждого реле.
Модуль позволяет выбирать уровни низкого и высокого напряжения для триггера, что делает его совместимым с различными источниками управляющего сигнала. Возможность подключения внешнего источника питания позволяет создавать полностью независимые системы.
Наличие оптопары на плате обеспечивает полную изоляцию питания, защищая управляющие устройства от перенапряжений и помех.
Модуль поддерживает три режима работы - самоблокировка, блокировка и запуск, обеспечивая гибкость в выборе способа управления нагрузкой.
Напряжение триггера может быть настроено в диапазоне от 0 до 2.5 В для низкого уровня и от 3.5 до 5 В для высокого уровня, что позволяет адаптировать модуль к конкретным требованиям проекта.
Модуль реле SRD 12В H + L с оптопарой представляет собой удобное и гибкое устройство для управления нагрузкой с двумя независимыми каналами, обеспечивая надежную и безопасную работу в различных приложениях.
Представляет собой компактное устройство, предназначенное для преобразования сигналов между уровнем TTL (логические уровни 0 и 1) и интерфейсом RS485.
Модуль обладает повышенной помехоустойчивостью и устойчивостью к широкому диапазону температур, что делает его надежным решением для использования в различных условиях эксплуатации.
Модуль автоматически управляет режимами приема и передачи данных без необходимости вручную устанавливать пины в состояния HIGH/LOW, это обеспечивает удобство использования и минимизирует возможность ошибок при настройке.
На плате конвертера присутствуют предохранитель и стабилитроны, которые защищают выходы микросхемы MAX485 от ударов молний, перенапряжений и ошибок при соединении, это повышает надежность работы устройства и продлевает его срок службы.
Конвертер обладает хорошей помехоустойчивостью, что позволяет передавать данные на большие расстояния без потерь и искажений сигнала, это делает его подходящим для применения в условиях с повышенным электромагнитным шумом.
Модуль способен работать в широком диапазоне температур, что позволяет использовать его даже в экстремальных условиях, например, в условиях высоких или низких температур окружающей среды.
Конвертер имеет стандартные разъемы для подключения к устройствам с интерфейсами TTL и RS485, что обеспечивает простоту и удобство установки.
В целом, конвертер TTL-RS485 представляет собой надежное и удобное решение для преобразования сигналов между различными интерфейсами с учетом повышенной защиты от перенапряжений и помех, а также устойчивости к широкому диапазону температур.
Представляет собой четырехканальный выключатель, разработанный компанией Itead.
Выключатель предназначен для установки на DIN-рейку и оснащен четырьмя кнопками для ручного управления каждым каналом.
Устройство обеспечивает возможность управления четырьмя нагрузками независимо друг от друга, это позволяет использовать выключатель для управления различными электроприборами или освещением в одном помещении или на одной территории.
Sonoff 4CH R2 поддерживает управление через Wi-Fi, что позволяет управлять устройством из любой точки, где есть доступ к сети Интернет. Для этого требуется мобильное приложение или интерфейс через веб-браузер.
На корпусе выключателя расположены четыре кнопки для ручного управления каждым каналом. Это обеспечивает удобство использования устройства непосредственно на месте без необходимости использования мобильного приложения или другого устройства.
Устройство может работать с переменным напряжением в диапазоне от 90 до 250 В, что делает его подходящим для использования в различных странах и сетевых условиях.
Каждый канал выключателя оснащен реле на 10А, что обеспечивает возможность управления нагрузками до 10 ампер.
Выключатель устанавливается на DIN-рейку с помощью специального крепления, что обеспечивает надежную фиксацию и удобство монтажа.
Itead Sonoff 4CH R2 представляет собой удобное и надежное решение для управления четырьмя нагрузками с использованием Wi-Fi или ручного управления, обеспечивая гибкость и простоту использования.
Компактное устройство, предназначенное для управления нагрузкой с использованием твердотельных реле.
Каждый канал модуля оснащен полупроводниковым реле фирмы Omron G3MB-202P с опторазвязкой, обеспечивающим надежное и безопасное управление нагрузкой.
Модуль имеет два независимых канала, что позволяет управлять двумя нагрузками независимо друг от друга.
Каждый канал оснащен полупроводниковым реле фирмы Omron G3MB-202P, эти реле обеспечивают высокую надежность, долговечность и быстрое коммутационное время.
Модуль использует опторазвязку для изоляции входного сигнала от нагрузки, это обеспечивает безопасное управление и защиту управляющего устройства от перенапряжений и помех.
Модуль предназначен для управления сигналами 5В низкого уровня, что делает его совместимым с большинством микроконтроллеров и других устройств, работающих на 5В.
Для защиты модуля и подключенных устройств, выходной порт модуля оборудован предохранителем, который предотвращает перегрузку и короткое замыкание.
Модуль твердотельного реле 5В Low Level обеспечивает надежное и безопасное управление нагрузкой с помощью твердотельных реле Omron, опторазвязки и защиты от перегрузок, он подходит для использования в различных проектах автоматизации, управления и контроля.
Представляет собой качественный и удобный дисплейный модуль с высоким разрешением и широким углом обзора, идеально подходящий для использования с Raspberry Pi или другими устройствами.
Модуль обеспечивает яркое и четкое изображение, что делает его отличным выбором для различных проектов, включая DIY электронику, игры, мультимедиа и многое другое.
Для работы дисплея требуется питание от 5 до 12 В и ток до 2 А, что обеспечивает достаточную мощность для стабильной работы.
Дисплей обладает разрешением 800x480 пикселей, что обеспечивает четкое и детализированное изображение.
Дисплей представляет собой цветной TFT-LCD экран, который обеспечивает высококачественное цветопередачу и контрастность изображения.
Угол обзора составляет 70/70/50/70 градусов по горизонтали и вертикали, что обеспечивает хорошую видимость из различных ракурсов.
Яркость экрана составляет 250 кд/м², а контрастность - 500:1, что обеспечивает четкое и контрастное изображение.
Дисплей оснащен портами HDMI и VGA для подключения к источнику видеосигнала. Интерфейс передачи данных - параллельный RGB (1 ch, 6 бит).
Размер экрана с корпусом составляет 16,5 х 10 см. В комплект входит сам экран и плата управления, что делает установку и использование дисплея максимально удобными.
Этот ЖК-дисплей отличается простотой в установке и использовании, а также высоким качеством изображения, что делает его отличным выбором для множества проектов и приложений.
Компактное и удобное устройство, которое позволяет выводить информацию на четыре строки по двадцать символов каждая.
Устройство обеспечивает четкое изображение белого цвета на синем фоне, что обеспечивает хорошую читаемость информации (имеются другие цветовые вариации дисплея).
Модуль оснащен модулем I2C, что обеспечивает легкость в подключении к микроконтроллерам или другим устройствам, этот интерфейс обеспечивает быструю и удобную передачу данных.
Дисплей может быть использован для вывода информации с Arduino или других устройств различными способами, включая использование последовательного порта или альтернативных методов.
Для работы с LCD 2004 можно использовать различные библиотеки, но одним из наиболее оптимальных вариантов является библиотека LiquidCrystal_I2C.h, которая предоставляет базовые функции управления дисплеем.
Дисплей поддерживает различные функции, такие как скроллинг данных, что обеспечивает более гибкое использование и управление выводимой информацией.
Несмотря на низкий уровень потребления электроэнергии, LCD 2004 может непрерывно потреблять энергию в стандартном режиме работы. Для минимизации потребления энергии можно реализовать включение экрана только по запросу, например, после нажатия кнопки.
LCD 2004 I2C - это удобное и функциональное устройство, которое находит широкое применение в различных проектах, таких как робототехника, DIY электроника, системы мониторинга и многие другие.
Релейный модуль, предназначенный для коммутации силовых цепей в электрических системах, Устройство оснащено полупроводниковыми элементами, что делает его надежным и долговечным.
Модуль SSR-40DA способен коммутировать нагрузку до 40 ампер при рабочем напряжении от 24 до 380 В переменного тока.
Модуль питается от источника постоянного тока в диапазоне от 3 до 32 В, что обеспечивает гибкость в выборе источника питания.
Использование полупроводниковых элементов обеспечивает быструю и надежную коммутацию силовых цепей без использования механических контактов.
SSR-40DA обладает высокой эффективностью работы, что позволяет снизить энергопотребление и повысить надежность системы.
Устройство предназначенное для передачи данных и электропитания по витой паре Ethernet кабеля.
Модуль обеспечивает возможность установки электронных устройств в местах, где нет доступного электропитания, путем передачи напряжения по сетевому кабелю. Он широко используется в различных приложениях, включая IP камеры, Wi-Fi оборудование, системы безопасности, VoIP телефонию, сетевые терминалы и другие.
Модуль принимает входное напряжение в диапазоне от 36 В до 57 В. Это позволяет его использование с различными источниками питания, такими как аккумуляторы, солнечные батареи или стандартные источники переменного тока.
Устройство оснащено защитой от короткого замыкания, что обеспечивает безопасную работу в случае возникновения неисправностей или аварийных ситуаций.
Модуль способен обеспечивать электропитание с мощностью до 10 Вт, что достаточно для большинства типов устройств, используемых в указанных выше приложениях.
Устройство выдаёт стандартное напряжение 5 В, которое совместимо с большинством электронных проектов и обеспечивает их надежную работу.
Модуль обеспечивает гальваническую развязку между входом и выходом, что помогает предотвратить возможные помехи и повышает надежность системы в целом.
Использование 1000Base-T PoE модуля RT9400 обеспечивает удобство и эффективность в установке и подключении электронных устройств в местах, где доступ к электропитанию ограничен или отсутствует.
Благодаря своим техническим характеристикам и защите от короткого замыкания, он является надежным и универсальным решением для различных сетевых приложений.
Компактное и экономичное устройство, предназначенное для управления до 16 сервоприводами или светодиодами с использованием всего 2 сигнальных проводов.
Контроллер позволяет легко и эффективно подключать и управлять множеством устройств к микроконтроллерам, таким как Arduino или Raspberry Pi.
На плате установлены дополнительные резисторы для каждого из выходов, что обеспечивает удобное и простое подключение светодиодов без необходимости использования дополнительных компонентов.
Модуль позволяет каскадировать до 62 устройств, что в совокупности обеспечивает управление до 992 ШИМ выходами, это делает его идеальным выбором для проектов, требующих управления большим количеством устройств.
Контроллер может питаться от 3.3 В до 5 В, что делает его совместимым с широким спектром источников питания. Кроме того, предусмотрена отдельная подача напряжения для сервоприводов или светодиодов.
Модуль оснащен 3-пиновыми разъемами, что облегчает подключение всех 16 сервоприводов или светодиодов к плате без лишних усилий.
Контроллер обладает высоким качеством изготовления, что обеспечивает надежную и стабильную работу в течение длительного времени.
Дополнительно к этим особенностям, контроллер PCA9685 обладает рядом других функций, таких как регулируемая частота ШИМ, 12-битное управление по каждому каналу, настраиваемый выход и многое другое.
Этот контроллер представляет собой удобное и мощное решение для управления сервоприводами и светодиодами в различных проектах и приложениях.
10. 2.7-дюймовый E-Ink модуль с питанием от NFC WaveShare
Устройство с технологией электронных чернил, которое обеспечивает высококачественное отображение текста и изображений без необходимости подсветки.
Модуль имеет разрешение 264x176 пикселей и позволяет пользователям передавать данные со смартфона или считывателя NFC на экран e-Paper, обновляя его отображение всего за несколько секунд.
Модуль работает с использованием питания от NFC, что упрощает его использование и обеспечивает бесперебойную работу без дополнительных компонентов.
Пользователи могут легко изменять отображаемый контент на экране модуля, используя специальное приложение на своем смартфоне, это обеспечивает удобство и гибкость при работе с устройством.
В целом, 2.7-дюймовый E-Ink модуль с питанием от NFC WaveShare представляет собой удобное и эффективное решение для создания электронных устройств с высококачественным дисплеем на основе технологии электронных чернил.
Простота использования и гибкость делают модуль хорошим выбором для различных приложений, требующих компактного и энергоэффективного дисплея.
Не знал, что они статьи и на пикабу выкладывают. Но самое главное отвалилось в посте — видео с итоговым результатом!
Вот такие часики-метеостанцию я запилил за пару недель из плазменного дисплея от старого японского автобуса.
Шрифты плюс-минус обычные, иконки погоды вышли как по мне шикарные, но самым тёплоламповым получился эффект дождя, который отрисовывается в дождливые (по прогнозу погоды) дни.
Ну и музыка тоже своя, да.
Кто нашёл отсылочки в видео (помимо самой очевидной на "Матрицу"), тому приз — два прекрасных нихуя %)
Приобрел себе чудо китайской техники-хотя разработан этот приемник не ими. ATS20+ вседиапазонный DSP радиоприемник, FM LW MW SW SSB(150кгц -30мгц), слушаем эфир. Приемник на базе Ардуино и SI4732.Собран на Ардуино что дает большие возможности по самостоятельной перепрошивке и модернизации приемника.
Учитывая соотношение возможностей, параметров и цены приемник ATS-20 заслуживает как мне кажется серьезного внимания. В качестве основного приемника охотника за DX он, конечно, не подойдет, но для путешествий по эфиру в поездках вполне пригоден. Да и просто интересен сам по себе – до чего дошла наука! Но его базовую прошивку советуют продвинутые пользователи нужно сразу менять.
Можно оставить в состоянии с завода, но можно кому интересно загрузить более продвинутую прошивку. Приемник на базе Ардуино и SI4732 дает возможность слушать как вещательные радиостанции так и радиолюбителей в выше указанных диапозонах.
ATS20+ больше похож на радионабор для творчества. У кого есть опыт в этих делах –подскажите как это все безопасно сделать, чтобы не угробить аппарат.
Подобные штуки мне показались востребованными среди тех, кто занимается фото- и видеосъёмкой, так что я решил сделать пару штук на продажу: мне было интересно попробовать что-то новое и пристроить давно лежавшие без дела комплектующие. Вот что получилось:
За основу был взят самый дешёвый настенно-потолочный линейный светильник - от него использовался корпус и провода. Светодиоды были заменены на ленту на WS2812, питающуюся от одного аккумулятора 16650 (18650 помещался в корпус с большим усилием и в дальнейшем мог его разорвать) через преобразователь на МТ3608. За заряд отвечает модуль на ТР4056: USB-C разъём выведен на торец корпуса, там же спрятаны два светодиода (зарядка идёт, зарядка завершена).
Лентой управляет ESP8266 с прошивкой WLED:
Веб-интерфейс содержит все необходимые настройки и позволяет активировать множество разнообразных эффектов:
Вот ещё склейка нескольких случайных режимов:
Прошивка также умеет работать с матрицами, поэтому в планах сборка аналогичного светильника, но уже в квадратном корпусе. Если будет интересно - напишу и про него.
Пожалуй, немалая часть моих читателей так или иначе интересуется DIY-тематикой. И в различных самодельных девайсах порой есть необходимость вывести какую-либо информацию на дисплей, будь это текст, графики или даже какая-то анимация! Для разных задач существуют самые разные дисплеи и в сегодняшнем материале я хотел бы систематизировать и собрать подробнейший гайд об использовании дисплеев с нерабочих мобильных телефонов: какие бывают протоколы и шины данных, как читать схемы устройств и определять контроллеры дисплеев, какие дисплеи стандартизированы, а какие придётся реверсить самому и как быть с подсветкой. В практической части статьи мы подключим дисплей используя протокол MIPI DBI к RP2040 с использованием DMA. Интересно? Тогда добро пожаловать в статью!
❯ Виды дисплеев и их протоколы
Пожалуй, ЖК-дисплеи с самого момента их появления стали основным инструментом для вывода информации и взаимодействия с пользователями. Первые ЖК-панели были монохромными и требовали отдельный драйвер, который занимался выводом изображения на экран и формированием необходимых для его работы напряжений.
Сейчас же всё гораздо проще и каждый любитель DIY-электроники может и сам подключить дисплейчик к своему проекту и использовать в необходимых ему целях. Ведь не зря написаны десятки библиотек по типу AdaFruit LCD, которые упрощают задачу программисту и дают ему возможность оперировать готовыми и простыми операциями по типу «вывести линию» или «отрисовать изображение». Однако, готовые библиотеки — это, конечно, здорово, но они не всегда дают понимание о том, как работают такие дисплеи на программном и аппаратном уровне. И первая часть статьи как раз и будет посвящена этому.
Всего в мире дисплейных матриц существует несколько общепринятых аппаратных протоколов. Некоторые из них можно легко использовать в собственных проектов с микроконтроллерами, с другими придется повозиться:
Параллельная шина 8080 — одна из самых простых и понятных шин данных, как в теории, так и на практике. Суть её очень простая: на каждый бит отводится по одной сигнальной линии, плюс две дополнительные линии для сообщения статуса передачи: RD означает запрос чтения, а WR — запрос на запись. Большинство дисплеев использует девятый, неявный бит D/C, который сообщает контроллеру, задаём ли мы номер команды, или уже пишем аргументы для этой команды. Что самое приятное — шина по сути стандартизирована и во многих дисплеях команды на старт записи в видеопамять, а также получение ID-контроллера идентичны. Шина бывает 8-битной и 16-битной (её состояние задаётся битами IM0..IM2 и используется не только для подключения дисплеев, но и микросхем параллельной флэш-памяти, ОЗУ и т. д. Такие шины используются в дисплеях с разрешением до 480x320.
SPI — шина, которая наверняка знакома большинству моих читателей. Достаточно простая — у нас есть две сигнальные линии с входным (MISO) и выходным (MOSI) битом, плюс сигнал тактирования, который согласовывает передачу данных. Таким образом, шина получается полнодуплексной. Фактически, каждый байт передаётся по одному биту через одну сигнальную линию, что, по сравнению с 8080, заставляет повышать тактовую частоту контроллера SPI, но при этом занимает гораздо меньше пинов самого МК или процессора. В программном плане, большинство дисплеев представленных в различных интернет-магазинах полностью совместимы с дисплеями 8080, ведь SPI — просто один из режимов работы. Единственный нюанс — из SPI дисплея не всегда можно вычитать ID-контроллера и вообще что-либо читать из регистров дисплея.
I2C — относительно редко используемая шина для дисплеев из-за её невысокой производительности, однако, тем не менее, очень подходящая для МК (благодаря использованию только двух сигнальных линий — SDA для данных и SCL для тактирования. Даже чипселект здесь программный благодаря тому, что каждое устройство имеет собственный адрес!), однако её можно найти в дисплеях некоторых телефонов из самого начала 2000-х годов.
TTL/параллельный RGB — тут, в общем-то, меня упрекали пару раз из-за того, что я продолжаю называть её TTL, но так сложилось исторически — даже в даташитах эту шину называют именно так. С логической точки зрения она очень простая: у нас есть 16/24 сигнальные линии, где 5 (или 8) бит используются для красного и синего канала и 6 (или опять же 8) бит используются для зеленого цвета (т. е. в 16-битном цвете у нас RGB565, а в 24-битном — RGB888). К ним идут сигналы HSYNC для горизонтальной синхронизации и VSYNC для вертикальной. Вообще, необязательно использовать все сигнальные линии предоставляемые дисплеем — можно использовать, например, RGB332 и использовать всего 8 сигнальных линий. Однако для отображения картинки, необходимо строго соблюдать тайминги синхронизации, иначе дисплей будет просто показывать белый цвет. Помимо цифрового варианта, бывает также аналоговый, очень похожий на телевизионный RGB или VGA. Такие дисплеи обычно используются для матриц до 1024x768 включительно.
MIPI DSI — протокол, используемый для дисплеев высокого разрешения — от 480x800 и выше, его можно встретить в большинстве современных смартфонов и планшетов. Кроме того, такие дисплеи используют относительно мало пинов — по два на каждый канал LVDS (обычно в смартфоне около двух-четырех каналов) + две сигнальные линии на тактирование. Звучит всё хорошо? Как-бы не так: протокол дифференциальный и на каждый канал (т. е. логический бит) приходится по две сигнальные линии — одна с положительная, а вторая отрицательная. Затем одна вычитается из другой и получается окончательный сигнал, а сделано это для уменьшения помех от передачи данных по нескольким линиям с очень высокой тактовой частотой без увеличения битности шины.
LVDS/eDP — Протоколы, используемые в матрицах ноутбуков, телевизоров и иногда планшетов. На физическом уровне близки к DSI, на программном — если честно, не знаю, но наслышан о некой стандартизации и высоком уровне совместимости. Даже «неродные» ноутбучные матрицы вполне «заводятся», максимум после перепрошивки родной EEPROM, даже если дисплей другого разрешения!
В списке выше, мы рассмотрели несколько популярных аппаратных шин для дисплеев. В данной статье, мы разберемся в программных особенностях таких дисплеев и узнаем, где взять по дисплею одного из следующих типов: SPI, I2C, а также 8080.
❯ Виды дисплеев и их протоколы
Пожалуй, писать статью, где были бы только готовые примеры без объяснения принципов работы «под капотом» было бы плохим тоном. Поэтому предлагаю немного разобраться в системе команд для самых распространенных контроллеров дисплеев в наше время.
У рассматриваемых нами дисплеев есть собственная видеопамять, благодаря чему нет необходимости соблюдать тайминги, а также общий набор команд (или аппаратных регистров), которые мы можем записывать и тем самым менять поведение дисплея. Если мы просто подадим питание на дисплей и попытаемся что-то вывести — у нас ничего не выйдет, поскольку при каждом аппаратном RESET'е, состояние большинства регистров, кроме SleepOn и PowerOn не определено и может содержать в себе любой «мусор». Для корректной работы дисплея, нам необходимо послать определенный набор команд, называемый инициализацией, который установит настройки драйвера дисплея, такие как контраст, параметры цветности, направление развертки изображения из VRAM и т. д. Пожалуй, стоит сразу отметить, что некоторые люди называют регистры дисплея командами — это означает одно и тоже!
Пример инициализации. На самом деле, не все люди делают такую простыню из вывозов функций чтения/записи регистров дисплея, поскольку это кушает драгоценный ROM. На AVR, например, команды инициализации можно хранить в ROM и читать из PROGMEM.
Если дисплей инициализирован неправильно, то мы можем наблюдать некорректную развертку, артефакты на дисплее и полосы: если вы когда-нибудь прошивали смартфоны прошивками других ревизий, то могли замечать подобный эффект сами.
Набор команд для контроллеров дисплеев частично стандартизирован спецификацией MIPI DBI, которая описывает и закрепляет некоторые конкретные адреса регистров, общие для всех контроллеров дисплея. К ним относится, например, установка «окна» для записи (0x2B и 0x2A), sleepout (0x11) и некоторые другие. Проприетарными командами остаются настройки питания, развертки, контраста и самого драйвера дисплея. Ну и всяческие LUT, а также палитровые режимы (если они есть) тоже проприетарные.
Пример одной из таких стандартизированных команд:
Почти во всех дисплеях есть разделение отправляемых байтов на команду (или выборка номера регистра для чтения/записи) и на данные. Как обработать текущий байт определяет отдельный пин (или бит, в зависимости от конфигурации дисплея), называемый D/C (Data/Command), иногда также можно встретить названиеRS. Обычно, при записи команды, D/C должен быть на низком уровне, при записи данных, соответственно, на высоком. Суть простая: записываем номер команды (или регистра) при низком D/C, а затем дописываем необходимые аргументы (или конфигурацию регистра) при высоком уровне D/C. Примерно так:
Касательно сброса, то в дисплеях обычно существуют два вида этого процесса: аппаратный сброс через соответствующий пин и программный с помощью специальной команды. Пин RESET никогда нельзя оставлять в «воздухе» (т. е. не подключенным) в надежде что «да состояние пинов МК после ресета известно, мусора на шине явно не будет». Мусора может и не будет, а вот дисплей упадет в вечный ресет, поскольку ожидает перехода сигнала RESET в высокий уровень. Тоже самое касается и пина CS, отвечающий за выбор устройства на шине. Если вам не нужен CS и у вас висит только одно устройство на шине — просто притяните его к массе. Некоторые контроллеры (например, ILI9325) адекватно реагируют на CS «в воздухе», некоторые — нет. Только после того, как RESET оказался на высоком уровне, дисплей начнёт принимать команды:
Переходим конкретно в выводу данных. Для начала вывода изображения на дисплей, нам необходимо выполнить команду 0x2C, которая переведет контроллер дисплея в режим записи данных в видеопамять. После этого, нам остаётся лишь установить высокий уровень на пине D/C и просто слать непрерывный поток пикселей. Контроллер дисплея сам инкрементирует координаты на дисплее и после того, как координаты выйдут за границы нужной области, дисплей сам их переведет в изначальные. Таким образом, достаточно лишь один раз проинициализировать дисплей и просто гонять в него данные, например, с помощью DMA.
Всё просто и понятно :)
❯ Дисплеи с шиной 8080
Пожалуй, подобные дисплеи найти проще всего, поскольку они использовались в большинстве кнопочных телефонов из нулевых. Такие экранчики можно встретить во многих моделях Nokia, Samsung, LG, Fly, Sony Ericsson и большинстве китайских телефонов. С поиском распиновки и разводкой таких дисплеев всё относительно просто и одновременно сложно: на некоторые модели телефонов (например, почти на все Nokia) можно свободно найти схему в гугле и узнать распиновку коннектора дисплея… однако этот коннектор сначала надо сдуть и развести на breakout-плате, или под микроскопом вывести перемычки. В некоторых случаях (например, Siemens S-серии), дисплей просто прижимался к контактам на плате, а сами контакты имели более чем паябельный шаг.
Из схемы на Nokia N70. Этот дисплей применялся во многих Symbian-смартфонах Nokia тех лет: N-Gage/N-Gage QD, N70, N72, 6600 и некоторых других.
Но особо удобными можно считать дисплеи с паябельными шлейфами с большим шагом пинов — такие можно встретить в некоторых телефонах Samsung и большинстве китайских телефонов. Пытливый читатель спросит «так это ж китаец, где ты на него схему будешь искать?». И вот тут, китайские производители нас приятно порадуют, поскольку за редким исключением, такие дисплеи имеют стандартизированную распиновку: лично мне известны матрицы 37 Pin, 39 Pin и 44 Pin. Как найти для них распиновку? Пишем на «алике» или «таобао» 37 pin lcd tft и смотрим: в описании продавец частенько прилагает распиновку (правда учтите, что 37 pin не имеет пинов IM для настройки ширины шины, а 16-битный интерфейс может быть слишком прожорилвый по числу пинов):
В случае с китайцами, иногда можно найти и схему (нажимайте на зеленую стрелку) на устройство: например, почти на все модели Fly схемы лежат в свободном доступе, где почти всегда можно найти распиновку дисплея. Иногда производитель даже выводит тестпоинты на все сигнальные линии и дисплей с тачскрином можно использовать, не выпаивая его с платы!
Распиновка на Fly IQ239. На нижней части изображения, вы можете увидеть, что такие, безусловно, здоровенные дисплеи можно купить за копейки и сейчас :)
Но задумывались ли вы когда-нибудь, откуда на тачскринах в дисплеях с «али» взялись кнопки «домой», «сообщения», «телефон»? Это ведь те самые дисплеи, которые использовались в «ноклах», просто припаянные к удобной плате! :) Кроме того, на китайские дисплеи без проблем можно найти даташит: обычно они используют контроллеры от ST или ILI, в зависимости от разрешения дисплея.
Концептуально, аппаратная реализация протокола одновременно простая и понятна любому: программа устанавливает состояние каждого бита передаваемого байта на сигнальных линиях D0..D7 (либо D00..D15, если шина у нас 16-битная), а затем просто «дёргает» линию RD (Read или чтение), либо WR (Write или запись) по переходу из низкого уровня в высокий, благодаря чему контроллер дисплея понимает, что байт (или слово в случае 16-битного интерфейса) можно «забирать» с шины. По переходу из высокого уровня в низкий, контроллер снова переходит в режим ожидания следующего байта с шины.
Где взять такие дисплейчики? Да почти везде! Но лучше всего брать дисплеи с китайчиков, которые можно развести на вот таких breakout-платах, которые можно заказать на алике за пару сотен рублей.
Обратите внимание на то, как по свински припаивают подсветку на некоторых дисплеях. И это завод! Лучше сразу прозвоните прежде чем подавать питание. Я, вот, забыл, понадеялся на производителя и по итогу сжёг подсветку :(
Другой вопрос, где искать на них информацию? Помимо схем, можно просто поискать на алике «37 pin lcd tft», «39 pin tft lcd», «24 pin tft lcd» и т. п. Обычно продавцы сами выкладывают распиновку и даже прикладывают ID контроллера дисплея. Поскольку иногда различия в распиновках всё же попадаются, обращайте внимание на то, куда у вас идут дорожки от подсветки и от резистивного тачскрина (если есть), а также вызванивайте все пины с массой — это поможет подобрать правильную распиновку без логического анализатора. Вот, например, дисплейчик из китайской нерабочей реплики Nokia 130 с здоровым 2.4" дисплеем… казалось бы, вообще не понятно что за дисплей, однако воспользовавшись смекалкой, мы находим его распиновку!
❯ SPI-дисплеи
SPI-дисплеи в телефонах встречались относительно редко. В основном, подобные дисплейчики можно было найти в моделях начала 2000х годов: сименсах, моторолах, ранних сонериках T-серии и Nokia на S40. Иногда SPI-дисплеи можно встретить в современных кнопочных телефонах — обычно они имеют шлейф с менее чем 15 пинами, как некоторые модели Fly. Обычно контроллер дисплея поддерживал сразу несколько аппаратных шин, а производитель телефона ещё на этапе установки шлейфа к контроллеру дисплея замыкал необходимые IM-пины выбирая необходимую шину, поэтому программный протокол фактически идентичен дисплеям с шиной 8080.
Несомненным плюсом SPI-дисплеев можно назвать малое число пинов для работы с матрицей: достаточно всего два (плюс сигнал D/C, если дисплей не 9-битный), если повесить RESET на VIO, либо три (четыре), если хотите управлять аппаратным RESET вручную. Но есть и, в некоторой степени, минусы: например, не все микроконтроллеры умеют работать в 9-битном режиме и возможно последний бит придётся досылать «ногодрыгом» (что ломает любую возможность реализации DMA).
Многие дисплеи с этим интерфейсом задокументированы ещё в начале 2000х годов на известных форумах и сайтах, таких как VRTP, Радиокот и easyelectronics, поэтому проблем с их подключением не возникнет даже у новичка. Даже такой крутой и уважаемый дядька, как @DIHALT, когда-то писал полезный материал об использовании FSMC в STM32.
Достать их новыми можно и сейчас: различные магазины запчастей для телефонов бывают продают их по 20-30-40 рублей… Я недавно себе целую коробочку накупил, в том числе и просто для ремонта смартфонов для будущих статей :)
❯ I2C-дисплеи
Дисплеи с такой шиной — настоящая редкость и обычно попадались в телефонах самого начала нулевых годов с низким разрешением дисплея. Из известных мне — Ericsson'ы и ранние Sony Ericsson T-серии, ODM Motorola (головастики например) и… пожалуй всё. Казалось бы, разве I2C может быть полезен для работы с дисплеями, где требуется активный вывод графики? Ведь он совсем медленный! Однако, даже он может пригодится для некоторых проектов, а в большинстве МК частенько попадается аппаратный TWI.
Кроме того, I2C дисплейчики удобно отлаживать: благодаря тому, что периферийное устройство должно отрапортовать ACK (состояние успешности получения байта) мастер-устройству, можно сразу определить обрыв линий до дисплея. Но какой-то конкретной информации по ним я не смогу написать — они все совсем разные :( Правда, полезным линком поделюсь, ребята с форума VRTP собрали хорошую таблицу с различными контроллерами дисплеев, где бывают и i2c!
❯ Подсветка
Отдельного радела стоит тема подсветки дисплеев. По первой может показаться, что тут всё просто: современным дисплеями достаточно 5В, а на старых можно замерить напряжение бустера на живом девайсе и смастерить свой DC-DC повышающий преобразователь, или взять, например, уже готовый драйвер, как известный в определенных кругах LTYN. На самом деле и тут есть свои нюансы.
Итак, каким образом реализована подсветка в том или ином устройстве? Обычно её реализация заключается в последовательном соединении двух и более светодиодов, которые формируют небольшую ленту под рассеивающей плёнкой. На современных китайских дисплейчиках, для работы в полную яркость достаточно всего лишь 5В источника питания + токоограничивающего резистора. Но что самое приятное, подсветка в таких дисплеях способна работать и при 3.3В, пусть менее ярко, но всё равно вполне читабельно.
Если вы делаете портативное маломощное устройство, работающее от одного Li-Ion аккумулятора, то достаточно лишь пустить 3.3В с линейного стабилизатора, который формирует напряжение VSYS для микроконтроллера. Таким образом, у вас будет стабильная подсветка среднего уровня яркости. В качестве альтернативного «бомж» варианта, когда нет возможности собрать нормальный драйвер подсветки, можно попробовать подключить светодиоды напрямую к АКБ, но при разряде дисплей будет потихоньку «тухнуть». Ещё один «бомж» вариант — разобрать дисплейный модуль, порезать дорожки на ленте и соединить пару светодиодов параллельно, выведя их через отверстие, откуда выходит шлейф дисплея, однако в таком случае, потребление подсветки заметно увеличится.
Правильным выходом будет взять с того-же телефона бустер подсветки с индуктивностью и иной необходимой обвязкой, и собрать бустер самому. Особой популярностью когда-то пользовались вышеупомянутые LTYN из телефонов Samsung (это маркировка известного драйвера LT1937). Уровнем подсветки на подобных бустерах телефоны управляют с помощью встроенного ШИМ-контроллера, чем можете воспользоваться и вы :)
❯ Запускаем дисплейчик на практике
В первой части статьи, я постарался ввести вас в курс дела и кратко рассказать о том, как работают такие дисплейчики «под капотом». Как видите — с теоретической точки зрения, ничего сложного нет: пересылаем данные на дисплей, да вовремя дёргаем пин D/C. Но какого же это на практике?
К сожалению, у меня на руках не нашлось подходящего дисплейчика от мобильного телефона (я ведь брал новые по уценке, не все заработали нормально), поэтому в качестве примера работы мы возьмём фактически такой же «китайский» дисплей с алика. Но будьте уверены — с большинством дисплеев, принцип работы будет идентичен (если мы говорим о дисплеях 2005г.в и моложе).
В качестве МК, мы возьмём мой любимый RP2040, который, по моему мнению, незаслуженно обделен вниманием. Время от времени я делаю всякие прикольные девайсы на базе этого МК, поэтому крайне рекомендую его всем моим читателям :)
Давайте же перейдем к практической части статьи! Обычно при создании проекта, я просто клонирую с гита RPi сэмплы с уже готовыми файлами CMake, беру hello world, конфигурирую CMakeLists.txt и пишу свою программу. На малинке пока что нет такого удобного способа создания проекта, как idf.py create-project :) Само собой, для удобства отладки я всегда включаю встроенную в чипсет эмуляцию UART через USB.
if (TARGET tinyusb_device) add_executable(hello_usb main.cpp )
# pull in common dependencies target_link_libraries(hello_usb pico_stdlib hardware_spi)
# create map/bin/hex/uf2 file etc. pico_add_extra_outputs(hello_usb)
# add url via pico_set_program_url example_auto_set_url(hello_usb) elseif(PICO_ON_DEVICE) message(WARNING "not building hello_usb because TinyUSB submodule is not initialized in the SDK") endif()
И инициализирую USB-стек и биндинги stdout к нему:
stdio_init_all(); sleep_ms(1000);
Задержка здесь важна, иначе девайс отказывается определятся в системе. Переходим, собственно, к разводке дисплея. Для работы нам достаточно лишь питания, подсветки, общей массы и четырёх сигнальных линий: MOSI, CLK, DC, RESET. На CS я обычно ставлю перемычку с массой, т. к обычно не вешаю что-то ещё на одну шину с дисплеем.
Переходим к инициализации дисплея. Наш экранчик работает на базе контроллера ST7735R и имеет разрешение 128x160. Сначала, назначаем функции для пинов и дёргаем RESET:
Весьма негусто скажете вы? Ну, с минорными изменениями, здесь заработает дисплейчик любого разрешения, даже 480x320! Переходим к фактической инициализации:
Прошиваем наш МК и смотрим что получилось. Видим шум на экране? Значит дисплей инициализирован верно!
После инициализации дисплея, мы можем выводить на него данные! Дабы дать возможность процессору заниматься другими делами во время передачи картинки на дисплей, мы настроим один из DMA-каналов. DMA-контроллер занимается пересылкой данных из ОЗУ в другой участок ОЗУ (аппаратный memcpy) или периферию. Как раз для второго случая, т. е. пересылки данных в контроллер SPI, мы и будем использовать DMA!
Аллокейтим фреймбуфер, куда мы будем выводить нашу картинку и настраивает DMA-канал:
Переходим к выводу изображения на дисплей. Для того, чтобы просто установить цвет пикселя в любых координатах экрана, достаточно лишь посчитать смещение от начала указателя на фреймбуфер к определенным координатам экрана. Формула очень простая и понятная: ширина дисплея * Y-координата + x координата и результат предыдущих операций помноженный на число байт в одном пикселе.
__inline void pixelAt(short x, short y, short color) { if(x < 0 || y < 0 || x >= LCM_WIDTH || y >= LCM_HEIGHT) return;
В функции есть валидация границ дисплея. Если уверены, что не зайдете за границы дисплея — можете убрать проверку, будет шустрее.
Теперь для вывода картинки, нам достаточно лишь скопировать изначальное изображение в наш фреймбуфер и попросить DMA-канал вывести изображение на дисплей. Для прозрачных картинок без альфа-канала (т. е. с цветовым ключом), функция будет выглядеть так:
Можно сделать чуть комплекснее, добавив альфа-блендинг и аффинные трансформации (возможность поворота и скейла картинок), но пока-что такой задачи не стоит. Ну что, всё очень просто и понятно? :) Пример прошивки можно найти на моём GitHub!
Производительность такого способ на RP2040 можно увидеть вот в этом видосе (на Пикабу не смог залить из-за ограничения на число медиа-элементов). Обратите внимание, что подход предложенный выше больше подходит именно для динамического вывода изображения без dirty-регионов. Он подойдет для игровых консолей, камер, анимаций или устройств с выводом динамической информации по типу осциллографов. Если вам нужно обновлять картинку реже, например, если вы делаете умные часы с плеером, то нет необходимости занимать довольно большой объем ОЗУ фреймбуфером, ведь вы можете писать напрямую в видеопамять. Тут уже решать в зависимости от конкретной ситуации именно вам :)
❯ Заключение
Вот мы с вами и систематизировали информацию о том, как использовать дисплеи с мобильных телефонов в своих проектах. Надеюсь, информация была достаточно полезной для вас! Однако, у меня к вам просьба: пожалуйста, не «дербаньте» рабочие девайсы «на запчасти» :( Это будет не очень гуманно по отношению к нашему «технобалдежу», где мы наоборот стараемся найти применение стареньким девайсам :)
Был ли для вас материал полезен? Пишите в комментариях.
Полезный материал?
Какие дисплейчики подключали?
❯ Важное объявление для читателей касательно будущей рубрики
Друзья! Я, как и многие мои читатели, помимо программирования и железа обожаю тачки! Особенно те тачки, где что-то нужно доделывать самому… и речь, конечно-же, о ТАЗах! Я долго думал, но всё же решился: сейчас я коплю на будущий интересный проект, связанный с ультрабюджетным электронным дооснащением автомобиля, который старше меня в полтора раза — скорее всего, речь пойдет о ВАЗ 2108/2109/21099, причём не исключено что карбюраторной! В планах довольно крутой проект, заключающийся в следующем: мы спроектируем очень дешевый бортовой компьютер (т.е панель) для управления автомобилем на базе дешевого Б/У планшета за пару сотен рублей. Планшет будет связан с управляющим МК через UART (о подобной коммуникации через хардварные протоколы я уже писал целых две статьи: сам себе Linux смартфон, превращаем планшет с нерабочим тачскрином в игровую консоль), и с планшета мы сможем не только управлять основными системами машины (стеклоподъемники, центральный замок и соленоид багажника), но и собирать и пытаться примерно посчитать некоторую информацию о расходе, километраже и стабильности работы двигателя на карбюраторной(!) машине без электронных систем с завода!
Если вдруг двигатель машины будет живенький и заводиться с полтычка, то может и удаленный прогрев постараюсь реализовать :)
В наши задачи будет входить не только проектирование аппаратной части такого оснащения, но и разработка симпатичного интерфейса для самой панели, дабы было не хуже чем в BMW :D Всеми схемами, исходным кодом и инструкциями я буду делится с вами в каждой статье и, как обычно, расскажу обо всех деталях реализации во всех подробностях! У меня уже есть некоторые идеи и наработки. Собственно, почему-б и не попробовать? Будет новая рубрика в блоге: апгрейд автомобилей глазами электронщика и прожженного программера.
Фото не моё, из интернета
Если вам нравятся мои статьи, вас интересует развитие такой рубрики и у вас есть желание и возможность — можете помочь проекту копеечкой с помощью формы доната ниже. Пикабу позволяет остаться анонимным и донатить даже без регистрации. Сейчас у меня есть 40 тысяч рублей личных накоплений, на покупку самой машины планирую выделить 70-80 тысяч рублей (я живу в Краснодарском крае, так что здесь ещё есть шансы найти что-то +- живое за такие деньги), так что остаётся собрать около 30-35 тысяч рублей. За каждую копейку я готов отчитаться (по факту покупки машины я сделаю пост с фотографиями авто, ДКП, а также оглашу фронт будущих работ и сразу начну заниматься проектом).
Такую задачу поставил Little.Bit пикабушникам. И на его призыв откликнулись PILOTMISHA, MorGott и Lei Radna. Поэтому теперь вы знаете, как сделать игру, скрафтить косплей, написать историю и посадить самолет. А если еще не знаете, то смотрите и учитесь.
Интересный набор для самостоятельной сборки и пайки электронных компонентов, после правильной сборки получится самолет с марцающими светодиодами. В набор входят резисторы, конденсаторы, десятичный счетчик CD4017BE, светодиоды и тд. Идеальный вариант для начинающих радиолюбителей. Стоит такой комплект около 1150 руб. ссылка на источник
2) Понижающий модуль питания
Электронный комплект «сделай сам» - преобразователь напряжения переменного тока. Вход источника питания AC15V или DC18V, фиксированный выход постоянного тока 3 В/4,5 В/5 В/6 В/9 В/12 В. Стоит такой набор около 1260 руб. ссылка
3) Часы
Набор для сборки цифровых часов, также имеются датчики для отображения температуры окружающего воздуха, будильник, календарь и тд. Стоит такой набор для пайки и сборки где-то 1285 руб. ссылка
4) Увлажнитель
Набор для самостоятельного изготовления мини-увлажнителя воздуха, который работает от USB. Стоит такой около 83 руб. ссылка
5) Машинка
Комплект электронных деталей для сборки умного автомобиля. Суть умной машинки в том, что после правильной сборки и пайки она сможет ездить по жирно нарисованным линиям и не отклоняться от курса, например по бумаге. Стоит такой около 385 руб. ссылка на источник
6) Табло
Набор электронный для самостоятельной сборки модуля со множеством светодиодов и разными режимами работы, как таймер с секундами, отоброжение линий и тд. Стоит комплект около 390 руб. ссылка
7) Электромагнитная пушка
Занимательный набор для любителей физики и электроники, на сборку электромагнитной пушки в акриловом корпусе потребуется около 90 минут, если все собрано верно, она сможет стрелять маленькими металлическими шариками. Стоит набор где-то 1490 руб. ссылка
8) Светильник
Дешевый набор для сборки светильника с красными светодиодами и разными режимами работы, которые управляются однокристальным микрокомпьютером AT89S52. Стоит такой набор 145 руб. ссылка
9) Радиоприемник
Набор для сборки FM радиоприемника, который работает от 2х батареек АА, после сборки нужно подключить наушники и 'ловить' различные радиостанции. Стоит набор 120 руб. ссылка
10) Робот-танк
Программируемый электромеханический конструктор на гусеницах Elegoo Conqueror Robot Tank Kit имеет несколько встроенных функций, таких как движение по траектории, заданной линией, детектор препятствий и дистанционное управление. Набор для сборки робота позволяет пользователям познакомиться с графическим программированием. Конструктор идеально подходит для детей и подростков, которые хотят посвятить свою жизнь карьере в сфере высоких технологий. Стоит такой около 8000 руб. ссылка на источник
11) Светильник-круг
Очень простой набор для сборки и самостоятельной пайки круглого модуля с красными светодиодами, создающие эффект вращающегося колеса. Работает от напряжения 3-5 вольт. Стоит такой 120 руб. ссылка
12) Счетчик Гейгера
Интересный набор для сборки детектора радиации, а именно обнаружения 20 мР/ч ~ 120 мР/ч гамма-лучей и 100 ~ 1800 от переменных/точек мягкого бета-излучения. Стоит такой наборчик где-то 2640 руб. ссылка
13) Микрофонный усилитель
Очень простой и дешевый набор для сборки и пайки микрофонного усилителя. В наборе идут провода, плата,, конденсаторы и тд. Идеальный вариант для тех, кто хочет научится паять и разбиратся в электронике, также читать схемы. Стоит набор 68 руб. ссылка
14) DIY набор для сборки устройства обнаружения магнитного поля
Набор позволяет собрать простое устройство с помощью которого можно обнаружить магнитное поле, а также северный и южный полюса. Набор предназначен для изучения основ радиоэлектронники и развития навыка пайки компонентов разного типа. Рекомендован для начинающих.
В комплект входит:
Печатная плата
Набор активных и пассивных элементов для сборки
Схема. Стоит такой набор около 112 рублей. Ссылка на источник
15) Спиннер
Набор 'Сделай сам' - светодиодный спиннер в прозрачном акриловом корпусе. Все компоненты нужно спаять на плате самостоятельно. После сборке получится крутой спиннер и при вращении красочно будут светить светодиоды. Стоит такой набор около 494 руб. ссылка
16) Частотомер
Частотомер 1 Гц — 50 МГц E0330 позволяет измерять частоту кварцевых резонаторов. Простой цифровой прибор позволяет измерять наиболее применяемые "кварцы". Тестер кварцевых резонаторов удобен. Сборка тестера с цифровой светодиодной шкалой не представляет проблем. Собрать частотомер своими руками за пару часов под силу даже начинающему радиолюбителю. Стоит такой 660 руб. ссылка
17) Сердце
Красивое электронное сердечко с разноцветно переливающимися светодиодами. Питается от батарейки, которая вставляется позади сердечка. Всего состоит из 32 светодиодов и других электронных компонентов. Стоит набор около 900 руб. ссылка
18) 'Песочные часы'
Набор интересный для сборки электронных песочных часов. Светодиоды включаются и выключаются в таком порядке, что создается эффект работающих песочных часов. Стоит комплект для пайки около 300 руб. ссылка
19) Музыкальная колонка
Прикольный DIY Bluetooth динамик с множеством функций, включая дистанционное управление, поддержку USB, карт памяти, Блютус и многое другое. Набор требует самостоятельной сборки и пайки. Стоит комплект на данный момент около 1700 руб. ссылка
20) Сварочный аппарат
Набор для создания аппарата для точечной сварки, например контактной сварки пластин для соединения аккумуляторов. Рабочее напряжение: 12 ~ 14,6 В. Стоит набор около 1500 руб. ссылка на источник