среда, 11 ноября 2015 г.

Бегущая строка на дисплее от магнитолы. Программная часть.

Ознакомившись с даташитом на контроллер дисплея (ссылка на него есть в конце первой записи), видим, что протокол передачи данных очень похож на SPI. Значит, именно эту библиотеку надо подключить к проекту. Далее, при низком уровне на контакте "5, CE" отправляем адрес контроллера (13010). После передачи адреса переводим контакт "5, CE" на высокий уровень, и передаем 19 байт данных, отвечающих за включение и отключение различных сегментов LCD. Затем следует передать 4 бита служебной информации (обычно, это нули). Завершаем передачу, переводя контакт "5, CE" на низкий уровень.
Для начала посмотрим, какие сегменты есть на дисплее, и что он вообще может отображать. Для этого надо все 19 байт данных заполнить "1". Ссылка на скетч для ардуино будет внизу страницы.


Теперь надо узнать, какой бит за какой сегмент отвечает. Для этого будем последовательно посылать контроллеру "1" в один бит за другим, и отмечать на бумажке, какой индикатор загорается при каждом последующем повороте ручки громкости. Особый интерес для меня представляли восемь 13-ти сегментных алфавитно-цифровых индикаторов. Получилась вот такая картина:

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

Так как по протоколу SPI отдельные биты передавать не получится, то придется заняться битовой арифметикой. К счастью, алгоритм смещения довольно прост, и трудностей с его написанием не возникает.
Теперь, чтобы получить бегущую строку, осталось только закодировать текст в двухбайтном формате. Не забываем про первые 3 неиспользуемых бита! Например, чтобы отобразить букву "Н", нужно включить 1, 2, 3, 9, 12 и 13 сегменты. В бинарном коде это будет выглядеть следующим образом - "00011100" и "00010011". Заполняем массив такими "буквами", и выводим их по очереди на каждом индикаторе дисплея с небольшой задержкой. Полученный результат можно посмотреть на видео:

Скетчи для ардуино можно скачать здесь. "LCD_Button" - сначала включает все сегменты дисплея, затем при каждом повороте регулятора громкости, зажигает сегменты по очереди, начиная с первого. "Hello_World" - конечный результат (бегущая строка). Комментариев в коде не много, если что-то будет непонятно - спрашивайте, обязательно отвечу!

2 комментария:

  1. Подключил, все ок. Вопрос, как основе этого дисплея сделать часики ?

    ОтветитьУдалить
  2. Здравствуйте, немного нужна ваша помощь. Прошу, свяжитесь со мной по почте arhiopteryx@gmail.com

    ОтветитьУдалить