Микроконтроллеры

Бегущая строка на LED матрице 8×8 и AVR + MAX7219

Спроектированное устройство обладает рядом преимуществ перед аналогичными. Если сравнить его с ближайшим «собратом» на 74HC595, плюсы налицо: использование всего одной микросхемы без внешних гасящих резисторов.
Даже использование микросхемы в корпусе DIP-24 допускает спроектировать плату по размеру матрицы, что позволяет сделать каскадирование (наращивание количества) матриц.

Преимущества:
1.
Минимум деталей.
2. Масштабируемость.
3. Универсальный интерфейс.
Микросхема MAX7219 — драйвер 7-ми сегментного индикатора с общим катодом (при включении в соответствии с даташитом). Конечно, можно применить индикаторы с общим анодом — тогда нужно просто транспонировать матричные данные на программном уровне.

Итого, мы имеем микросхему, у которой есть 8×8 выводов с уровнями напряжений, допускающими непосредственное подключение светодиодов, данные передаются с помощью стандартного SPI-интерфейса.

Для использования MAX7219 в качестве драйвера матрицы, нужно инициализировать микросхему: 1. Записать в регистр 0xX9 (Mode Decode) значение 0x00
2. Записать в регистр 0xXB (Scan Limit) «порядок матрицы» — 1. В нашем случае это 8-1=7.
3. Записать в регистр 0xXA  (Intensivity) значение интенсивности свечения от 0x00 до 0xFF.
4. Записать в регистр 0xXC  (Power) значение 0x01 — включить матрицу.
А потом через SPI записывать в регистры 16-ти битное слово, которое, соответственно, подает в X-столбец (аналог DIG, катод) 8 бит (аналог SEGA-F,DP, анод).

Далее мы итеративно сдвигаем данные на 1 влево и дописываем в начало новые.
К примеру, буква «K».

Представляется как матрица 6×8
0b11111110, 0b00010000, 0b00101000, 0b01000100, 0b10000010, 0b00000000
Алгоритм отображения:
1. В столбец X0 пишется i-ое число 0b11111110.
2. Сдвиг всех столбцов на 1 влево.
3. В столбец X0 пишется i+1-ое число 0b00010000.
И так далее по кругу.

Пример кода для Atmega8:

#define F_CPU 1000000UL
#include «max7219.h»   int main(void)
{
uint8_t words[] =
{ 0b11111110, 0b00010000, 0b00101000, 0b01000100, 0b10000010, 0b00000000,//K
0b11111110, 0b10010010, 0b10010010, 0b10010010, 0b10000010, 0b00000000,//E
0b11111110, 0b10010000, 0b10010000, 0b10010000, 0b01101110, 0b00000000,//R
0b11111110, 0b01000000, 0b00100000, 0b00010000, 0b11111110, 0b00000000,//N
0b11111110, 0b10010010, 0b10010010, 0b10010010, 0b10000010, 0b00000000,//E
0b11111110, 0b00000010, 0b00000010, 0b00000010, 0b00000010, 0b00000000,//L
0b00000010, 0b00000000, //.
0b11111110, 0b10010000, 0b10010000, 0b10010000, 0b01100000, 0b00000000,//P
0b11111110, 0b10010000, 0b10010000, 0b10010000, 0b01101110, 0b00000000,//R
0b01111100, 0b10000010, 0b10000010, 0b10000010, 0b01111100, 0b00000000,//O
0b00000000, 0b00000000, 0b00000000, 0b00000000
};
uint8_t count_matrix = 1;//количество матриц
uint8_t wh_matrix = 8;//размерность матрицы
uint8_t buf_lenght = count_matrix*wh_matrix;//длина буфера
uint8_t buf[buf_lenght];//буфер хранения (кольцевой)
MAX7219_init(MAX7219_MANUAL, wh_matrix, count_matrix);      while(1) {
MAX7219_passNullDisplay();
for (uint8_t x = 0; x<sizeof(words); x++)
{
for (uint8_t bb = 0; bb<buf_lenght-1;bb++)
{
buf[bb]=buf[bb+1];
}
buf[buf_lenght-1] = words[x];

for (uint8_t pos_clmn = 0; pos_clmn<wh_matrix; pos_clmn++)
{
MAX7219_LOAD0;
for (uint8_t num_mtrx = 0; num_mtrx<count_matrix; num_mtrx++)
{
MAX7219_write_customData(wh_matrix-(pos_clmn), buf[pos_clmn+(wh_matrix*num_mtrx)]);
}
MAX7219_LOAD1;
#ifdef HWSPI
_delay_ms(15);
#endif
}
}
} }

Видео работы собранного устройства
(камера «ловит» послесвечение из-за своей инерционности, на самом деле этого нет.)
Печатная плата
Вид со стороны расположения деталей

Вид со стороны печатных проводников

Печатная плата в формате BMP Печатная плата в формате CAMtastic  Даташит на MAX7219 Даташит на матрицу LD-1088BS — аналог BL-M12B881 Скомпилированная прошивка для Atmega8 (HW SPI) . Фьюзы — по умолчанию.

Показать больше

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Закрыть