0

Матрица 16×16 для TINY13A

Для реализации проекта понадобится 4 светодиодных матрицы 8х8, 4 сдвигающих регистра 74HC595 и управляющий микроконтроллер TINY13A. Задача заключается в том, чтобы зажечь все 256 светодиодов от нашего 8-выводного микроконтроллера TINY13A. Для этого дела выводов на данном микроконтроллере явно маловато, по этому будем расширять порты регистрами сдвига.

Что бы всё работало я написал небольшую «детскую» программку, которая просто дрыгает тремя ногами в нужной нам последовательности.

Рис. 1

Никаких протоколов, чистая классическая дерготня.

Расположение портов (выводов) микроконтроллера TINY13A в программе следующее: порт B0 (5) данные, порт B1 (6) синхронизация, B2 (7)  защёлка регистров, B3 (2) кнопка переключения «статика-движение».

Сама программа берёт данные с EEPROM и последовательно выдаёт их побитно в регистры сдвига. Так как регистры включены последовательно, то за один раз выдаётся 32 бита. Срабатывает защёлка регистров и мы имеем на светодиодной матрице одну строку. Затем процесс повторяется ещё 15 раз и далее по кругу.

Код изображения хранится в EEPROM микроконтроллера TINY13A для того что бы вы могли её самостоятельно переписывать и рисовать что душе угодно.

В регистры мы подаем сперва 16 разрядов данных затем 16 разрядов развёртки.

Мы можем прописать всю строку данных и развертку совместно одной строкой в EEPROM.

Емкость EEPROM контроллера TINY13A составляет 64 байта по 8 бит. И того, у нас памяти 512 бит.

Этой ёмкости как раз хватает на данные, плюс развертка 32 бита на 16 строк. Но мы немного сделаем по другому, разделим изображение и развёртку, а развертку перенесём в программный код, там есть ещё место для этого. В результате у нас в памяти EEPROM останется место на два полных кадра 16х16.

Таким приёмом мы получаем две статичных картинки. Для того что бы получить динамику или по другому бегущую строку, надо циклично смещать развёртку в одну или другую сторону, после каждого полного кадра. Как только первый кадр сместится на 16 строк вниз включается второй кадр.

Частота кадров при выставленной конфигурации бит на 4 МГц составляет 16 кадров в секунду. Ну и неплохо было бы добавить статичный режим картинки. Для такой цели я сделал опрос 3 порта контроллера на который повесил кнопку. Если кнопка разомкнута у нас бегущая строка, нажимаем кнопку и картинка останавливается, но кадры на экране продолжают чередоваться.

Во время отладки кода изображения, что бы отследить работу каждой строки, необходимо переключится на частоту внутреннего генератора 128 кГц. Для этого необходимо выставить бит конфигурации как показано ниже.

Рис. 2

Ещё одна особенность работы с регистрами сдвига заключается в следующем. Читая данные с памяти, мы обычно читаем младший байт первым и сразу подаём его в регистры. В результате сдвига в регистрах наш младший байт оказывается старшим, а старший который читается вторым, становится младшим. Эту особенность нужно учитывать при написании кода изображения. И тут есть два приёма: Первый это писать код в том порядке как он выходит на регистры. Второй способ это написать как есть и затем сделать «перестановка байт» в любом программаторе или редакторе кода. Я жутко ленивый, по этому пользуюсь вторым способом

Один важный момент. Так как в матрице у нас светодиоды то для засветки поля матрицы необходимо подать на развертку 1, а на данные 0. Это не очень удобно когда кодируешь таблицу изображений, по этому я сразу прописал инверсию данных при выводе из порта микроконтроллера TINY13A, что бы не делать это вручную.

Второй способ создать анимацию на экране заключается в том что мы двигаем читаемую адресную строку данных в сторону второго кадра. Здесь плюс в том что изображение плавно перетекает из одного кадра в другой. Вторая программа в проекте как раз показывает как это действие происходит на экране.

Переходим к работе с EEPROM.

Для редактирования изображения в формате 16х16 пикселей можно использовать любой подходящий редактор графики. Так же возможно делать это просто на листе бумаги.

И так у нас есть вот такая конструкция экрана, на котором нарисован робот.

Рис. 3

Тут мы видим в каком направлении двигаются строки и как записываются данные в строку.

Каждую строчку на картинке прописываем начиная снизу вверх в двоичном режиме, где светодиод горит там 1 где потушен там 0 .

Итого получилось 16 строк с данными для первого кадра:

0000110000011000

0000010000010000

0000010000010000

0001111111111100

0000111111111000

0000011111110000

0001111111111100

0010000111000010

0000000010000000

0001111111111100

0001000010000100

0001011010110100

0001011010110100

0001000010000100

0001111111111100

0000000000000000

Берем калькулятор Windows и переводим данные каждой строки в hex формат.

Получаем:

0C18\0410\0410\1FFC\0FF8\07F0\1FFC\21C2\0080\1FFC\1084\16B4\16B4\1084\1FFC\0000

После чего нам необходимо прописать эти данные в таблицу EEPROM вашего программатора для TINY13A.

Рис. 4

Обратите внимание что старший и младший байты в таблице поменяны местами, о чем я выше уже писал. Две нижних строчки в таблице это второй кадр, придумайте сами, что туда прописать.

Биты конфигурации для программирования выставляются как на картинке ниже:

Рис. 5

В приложенном архиве вы найдёте программу , схему и несколько картинок в коде.

Скачать архив

Видео демонстрация:

Примеры картинок 16Х16:

  • http://pxlshp.com
  • http://www.drawbang.com

Автор: Сучков Роман. г Соликамск.

admin

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

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