NovaPixel & OhmGuru
Привет, я тут подумал – хочу собрать небольшую матрицу из светодиодов 8x8 с кастомными градиентами, типа для какого-нибудь пиксельного интерфейса – для тостера или часов, например. Хочешь вместе взяться и что-нибудь сделать, чтобы выглядело так же круто, как и работает?
Звучит как интересная задача, но прежде чем бросаться в бой, помни, что матрица 8x8 – это всего лишь 64 светодиода, и каждому нужен свой ограничивающий ток резистор, если не использовать мультиплексирование. Могу набросать схему для макетной платы, чтобы провода не превратились в хаос. Если планируешь что-то вроде тостера, просто убедись, что радиатор не перегревается от светодиодов. Для часов лучше сделай логику делителя частоты простой – например, на 555 или ATtiny. Скажи, с каким микроконтроллером тебе удобнее работать, и тогда продумаем переходы цветов и синхронизацию. Я принесу схемы, ты принеси паяльник. Сделаем всё чётко и не спалим лабораторию.
Отлично. Мне удобнее с ATmega328, может, даже на плате 3x3, чтобы в прорезь тостера поместилось. 555 – это классика, конечно, но небольшой AVR даст нам управление градиентом в реальном времени. Давай разберемся с резисторами – можно использовать общий последовательный резистор для каждой строки, а еще глобальный ограничитель тока. С нагревом – добавим небольшой теплоотвод и поддержим низкое напряжение на светодиодах. Приноси схему, я подготовлю таблицу градиентов и фрагменты кода. Готов приступать к пайке?
Отличный выбор с ATmega328, плата 3x3 будет настоящей головной болью, но оно того стоит. Я разложу её как мини-поле боя: матрица 8x8 в центре, три ряда по восемь пинов каждый будут управлять колонками, и по одному резистору на 470 Ом на ряд, чтобы удержать токи в пределах нормы. Еще поставим глобальный ограничитель на 1 кОм на линию Vcc, чтобы предотвратить любые перекосы. Что касается радиатора, сделаем небольшой медный контакт под микроконтроллером и светодиоды, с тонким слоем термопасты между ними – не более 0.8 вольта падения на светодиод, поэтому используй питание 3.3 вольта и резисторы по 50 Ом, если действительно хочешь более яркую палитру. ШИМ ATmega справится с 8-битной градацией – просто сопоставь свою таблицу подстановки с 255 уровнями. Я отправлю тебе чертеж платы сверху в формате PDF, тебе останется только подключить пины ATmega: PB0–PB7 для строк, PD0–PD7 для колонок, и линию 3.3 вольта к глобальному ограничителю. Дай знать, если тебе понадобится точная распиновка ATmega. Как только возьмешь паяльник, будем делать аккуратные дорожки, никаких "спагетти", и у тебя будет дисплей, который можно ставить в тостер, и он не загорится.
Звучит неплохо. Вот схема пинов для ATmega328p в режиме пониженного энергопотребления:
- PB0–PB7 → выходы на строки (подключаем последовательные резисторы 470 Ом)
- PD0–PD7 → выходы на столбцы (подключаем напрямую к светодиодам)
- VCC → 3.3 В через глобальный ограничитель 1 кОм
- GND → общий земляной провод
Внешние подтягивающие резисторы не нужны, просто установим регистры DDR и будем писать в PORTы. Если нужны конкретные фрагменты кода или схема печатной платы – скажи. Готов приступать, когда будешь готов.
Окей, карта пинов подходит. Вот набросок кода для режима пониженного энергопотребления:
```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. Бери паяльник, и мы не допустим, чтобы эта плата превратилась в кашу из проводов.
Получил код, отличная идея с циклом. Сейчас подключу ATmega, прогоню таблицу градиентов и проверю температуру дешёвым ИК-датчиком, на всякий случай. Как плата будет готова, прошьём прошивку и запустим тостер. Дай знать, когда будешь готов отправить печатную плату в духовку – шучу, не спеши, всё в порядке, да?