NovaPixel & OhmGuru
NovaPixel NovaPixel
Привет, я тут подумал – хочу собрать небольшую матрицу из светодиодов 8x8 с кастомными градиентами, типа для какого-нибудь пиксельного интерфейса – для тостера или часов, например. Хочешь вместе взяться и что-нибудь сделать, чтобы выглядело так же круто, как и работает?
OhmGuru OhmGuru
Звучит как интересная задача, но прежде чем бросаться в бой, помни, что матрица 8x8 – это всего лишь 64 светодиода, и каждому нужен свой ограничивающий ток резистор, если не использовать мультиплексирование. Могу набросать схему для макетной платы, чтобы провода не превратились в хаос. Если планируешь что-то вроде тостера, просто убедись, что радиатор не перегревается от светодиодов. Для часов лучше сделай логику делителя частоты простой – например, на 555 или ATtiny. Скажи, с каким микроконтроллером тебе удобнее работать, и тогда продумаем переходы цветов и синхронизацию. Я принесу схемы, ты принеси паяльник. Сделаем всё чётко и не спалим лабораторию.
NovaPixel NovaPixel
Отлично. Мне удобнее с ATmega328, может, даже на плате 3x3, чтобы в прорезь тостера поместилось. 555 – это классика, конечно, но небольшой AVR даст нам управление градиентом в реальном времени. Давай разберемся с резисторами – можно использовать общий последовательный резистор для каждой строки, а еще глобальный ограничитель тока. С нагревом – добавим небольшой теплоотвод и поддержим низкое напряжение на светодиодах. Приноси схему, я подготовлю таблицу градиентов и фрагменты кода. Готов приступать к пайке?
OhmGuru OhmGuru
Отличный выбор с ATmega328, плата 3x3 будет настоящей головной болью, но оно того стоит. Я разложу её как мини-поле боя: матрица 8x8 в центре, три ряда по восемь пинов каждый будут управлять колонками, и по одному резистору на 470 Ом на ряд, чтобы удержать токи в пределах нормы. Еще поставим глобальный ограничитель на 1 кОм на линию Vcc, чтобы предотвратить любые перекосы. Что касается радиатора, сделаем небольшой медный контакт под микроконтроллером и светодиоды, с тонким слоем термопасты между ними – не более 0.8 вольта падения на светодиод, поэтому используй питание 3.3 вольта и резисторы по 50 Ом, если действительно хочешь более яркую палитру. ШИМ ATmega справится с 8-битной градацией – просто сопоставь свою таблицу подстановки с 255 уровнями. Я отправлю тебе чертеж платы сверху в формате PDF, тебе останется только подключить пины ATmega: PB0–PB7 для строк, PD0–PD7 для колонок, и линию 3.3 вольта к глобальному ограничителю. Дай знать, если тебе понадобится точная распиновка ATmega. Как только возьмешь паяльник, будем делать аккуратные дорожки, никаких "спагетти", и у тебя будет дисплей, который можно ставить в тостер, и он не загорится.
NovaPixel NovaPixel
Звучит неплохо. Вот схема пинов для ATmega328p в режиме пониженного энергопотребления: - PB0–PB7 → выходы на строки (подключаем последовательные резисторы 470 Ом) - PD0–PD7 → выходы на столбцы (подключаем напрямую к светодиодам) - VCC → 3.3 В через глобальный ограничитель 1 кОм - GND → общий земляной провод Внешние подтягивающие резисторы не нужны, просто установим регистры DDR и будем писать в PORTы. Если нужны конкретные фрагменты кода или схема печатной платы – скажи. Готов приступать, когда будешь готов.
OhmGuru OhmGuru
Окей, карта пинов подходит. Вот набросок кода для режима пониженного энергопотребления: ```c // Инициализируем строки как выходы с последовательным резистором 470 Ом DDRB = 0xFF; // PB0–PB7 как выходы PORTB = 0x00; // Первоначально подаём низкий уровень // Инициализируем столбцы как выходы для светодиодов DDRD = 0xFF; // PD0–PD7 как выходы PORTD = 0x00; // Все столбцы выключены в начале // Функция для отображения одной строки 8x8 матрицы void display_row(uint8_t row, uint8_t pattern) { PORTB = (1 << row); // Включаем одну строку за раз PORTD = pattern; // Устанавливаем шаблон столбцов _delay_us(200); // Небольшая задержка для устойчивости изображения PORTB = 0x00; // Выключаем строку } ``` Просто циклом проходи по строкам в основном цикле, используя таблицу градиентов из массива. Ограничивающий резистор 1 кОм на линии 3.3 В должен держать общий ток ниже 50 мА, так что небольшой медный контакт под AVR и светодиодами не перегреется. Если тебе всё ещё нужен контур печатной платы, просто скажи, и я отправлю тебе двухслойную конструкцию с толщиной меди 0.6 мм в формате Gerber. Бери паяльник, и мы не допустим, чтобы эта плата превратилась в кашу из проводов.
NovaPixel NovaPixel
Получил код, отличная идея с циклом. Сейчас подключу ATmega, прогоню таблицу градиентов и проверю температуру дешёвым ИК-датчиком, на всякий случай. Как плата будет готова, прошьём прошивку и запустим тостер. Дай знать, когда будешь готов отправить печатную плату в духовку – шучу, не спеши, всё в порядке, да?