Arduino без вложений. Proteus [2]
Как работать с протеусом мы разобрались в первом посте.
Теперь попробуем сделать что-нибудь, что делают новички на ардуино. Запрограммируем микроконтроллер на работу с матрицей светодиодов через микросхему Max7219. Собственно, подобный шилд часто можно встретить в наборе новичка.
Напоминаю: подробная инструкция по работе с протеусом присутствует в первом посте.
У микросхемы есть несколько контактных групп, а именно:
Красным - контакты ввода
Зеленым - контакты вывода столбца на матрицу
Синим - контакты выбора столбца, который именно мы будем вводить (микросхема сама бегает плюсом по этой контактной группе, а мы на самом деле заполняем ее внутренние буферы)
Для данного проекта мы будем использовать цифровые выводы 2, 3 и 4.
Соединяем микроконтроллер с микросхемой:
Цифровой выход 2 (4-я нога) с DIN (DataIN)
Цифровой выход 3 (5-я нога) с LOAD
Цифровой выход 4 (6-я нога) с CLK (Clock)
А так же соединяем саму микросхему с матрицей:
зеленую группу с зеленой, синюю с синей (на первом скриншоте они выделены).
Настало время написать программу (ссылка на полный листинг программы в конце поста).
Основная часть кода - это уже написанный кем-то интерфейс взаимодействия с данной микросхемой, а нам надо только решить, что мы на нее будем выводить.
Первым делом создадим виртуальную область, в которую будем "выводить изображение" для последующего копирования его на микросхему-матрицу - это БУФЕР (buf).
Так же создадим то, что мы будем выводить в буфер, я решил на первый раз обойтись пиктограммами 8х8 в нужном количестве. Создал массив im (от сокращенного image), и заполнил его всем знакомыми буквами ("Pikabu ").
Так же на скриншоте ниже я подробно описал несколько дополнительных переменных, которые я использовал для работы.
А вот и то самое расстояние между пиктограммами:
Основная функция программы - loop, она выполняется раз за разом, пока питание будет подключено.
Сначала нам надо понять где мы. Если мы в конце конкретной пиктограммы - перейдем на следующую. Если мы в конце всех пиктограмм - перейдем на первую.
Затем нам можно уже работать с буфером, сдвигаем его на 1 столбец влево. После чего мы должны заполнить последний столбец новыми данными. Если расстояние между пиктограммами еще не прошло - заполняем последний столбец пустотой, а если сейчас очередь пиктограммы - заполняем последний столбец буфера нужным столбцом пиктограммы.
(нынешнего*)
И так, после заливки программы и запуска, я обнаружил, что массив смещен на 1 строку циклично вниз. Да, именно строку, ибо матрица по умолчанию повернута на 90 градусов по часовой.
"Покурив мануалы" (даташит) я быстро обнаружил проблему: оказалось что вывод DP выполняет роль нулевого контакта, в то время как А - 1, B - 2 и т.д.
Быстро поменяв контакты местами, я решил проблему.
Элементарная бегущая строка на одной матрице готова!
Можно было использовать библиотеку для работы с Max7219 - MaxMatrix, однако, данный код (из листинга) мне показался достаточно прозрачным, чтобы его использовать.
В следующий раз я покажу как объединить несколько таких матриц, для создания уже полноценной бегущей строки, покажу как пользоваться виртуальным осциллографом. Код претерпит множество изменений.
Листинг: http://pastebin.com/qxvSV3yL
С вами был RadioNoob, специально для























