› Статьи › Микроконтроллеры › Бегущая строка на LED матрице 8x8 и AVR + MAX7219

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


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


Даже использование микросхемы в корпусе DIP-24 допускает спроектировать плату по размеру матрицы, что позволяет сделать каскадирование (наращивание количества) матриц.

 

 

 

 

 

 

Преимущества:
1.
Минимум деталей.
2. Масштабируемость.
3. Универсальный интерфейс.

 

Микросхема MAX7219 - драйвер 7-ми сегментного индикатора с общим катодом (при включении в соответствии с

даташитом). Конечно, можно применить индикаторы с общим анодом - тогда нужно просто транспонировать матричные

данные на программном уровне.

 

 

Итого, мы имеем микросхему, у которой есть 8x8 выводов с уровнями напряжений, допускающими непосредственное

подключение светодиодов, данные передаются с помощью стандартного 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".

 

 

Представляется как матрица 6x8
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). Фьюзы - по умолчанию.




19/05/2011
Добавлена версия стандарта C++
В главном меню сайта добавлена ссылка на нашу версию оформления кода на C++.
0

11/05/2011
Запуск сайта
Сегодня запущен портал
0



      Копирование материалов сайта возможно только при размещении прямой ссылки на www.kernel.pro