Для подключения дисплея 16x2 символов к своей Raspberry Pi я выбрал VFD Futaba GP1183A01B. Чем он хорош? Во-первых, это вымирающий вид, дающий «теплый ламповый» люминесцентный свет приятного зеленого цвета (он правда зеленый, это что-то фотоаппарат врет). Во-вторых, для коммуникации он использует последовательный протокол, а значит его можно подключить всего тремя проводами, без использования каких-либо дополнительных приспособлений, а коммуникация с ним будет идти через /dev/tty. В-третьих, питания ему надо как раз 5 вольт, которые уже есть (и даже хватает, правда не всегда).
Я его подключил три года назад, но статью сел писать сейчас — отвалился от дисплея сигнальный провод и я заодно решил рассказать про этот дисплей. Все-таки двольно легко подключается. И они еще продаются!
Подключение к Raspberry
Подключаемся через пины GPIO, расположенные слева вверху платы. Нас интересует верхний ряд — первый пин (+5V), третий (GND) и четвертый (TX). По стандартной нумерации это 2, 6 и 8 пины.
Мощности на пине +5V хватает впритык. Если на Raspberry Pi использовать видео, а не HDMI, то VFD не включится. Можно подвести +5V отдельно, например от USB-хаба от которого питается «малинка» — взять красный и черный (GND) провода (обрезать ненужный USB-кабель), не забыв замкнуть черный с GND от GPIO. У меня сейчас так и сделано.
Подключение к VFD
Сверху у дисплея есть ряд контактных отверстий для пайки. Нас интересуют левые три в правом блоке из шести отверстий. Первое (+5V), второе (RX), третье (GND). Припаеваем!
Настройка VFD
На обратной стороне дисплея имеется четыре перемычки, позволяющие настроить скорость и режим работы. Замыкаем перемычку J1 для того, чтобы скорость была 9600 Бод. В принципе он тянет и 115200, но там начинают пробиваться помехи.
Настройка ядра
На используемый нами пин идет вывод сообщений ядра при загрузке (сюрприз!). Чтобы их было видно, надо настроить скорость последовательной консоли — в файле /boot/cmdline.txt надо определить параметр console=ttyAMA0,9600. Файл может быть таким:
dwc_otg.lpm_enable=0 console=ttyAMA0,9600 kgdboc=ttyAMA0,9600 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
Настройка userland
Чтобы после загрузки ничего не выводилось на VFD без нашего участия в файле /etc/inittab надо закомментировать последнюю строчку:
#T0:23:respawn:/sbin/getty -L ttyAMA0 9600 vt100
Фан
Для вывода на экран можно использовать команду echo, например:
echo "Privet, Habrahabr!" > /dev/ttyAMA0
Возможности экрана довольно велики, можно почитать спецификацию (поискать в Гугле), но я приведу некоторые команды, которыми сам пользуюсь:
очистить экран и поместить курсор в левый верхний угол
echo -en "x0C" > /dev/ttyAMA0
от минимальной до максимальной яркости
echo -en "x1Fx58x01" > /dev/ttyAMA0
echo -en "x1Fx58x02" > /dev/ttyAMA0
echo -en "x1Fx58x03" > /dev/ttyAMA0
...
echo -en "x1Fx58x08" > /dev/ttyAMA0
выключить дисплей
echo -en "x1Fx28x61x40x00" > /dev/ttyAMA0
включить дисплей
echo -en "x1Fx28x61x40x01" > /dev/ttyAMA0
Еще Фан
Можно использовать LCDProc для вывода на этот экранчик всяческой информации, например, RaspBMC может через LCDProc выводить на него информацию о текущем пункте меню, состояние воспроизведения. Настройка на RaspBMC потребовала написания драйвера для LCDProc, но это было совсем нетрудно (было удалено четыре строки, рисующие рамку из стандартного драйвера text) если будет возможность, напишу об этом потом. На фотографиях смазанный текст, так как LCDProc активно использует бегущую строку.
К сожалению, руки пока не дошли до русского языка, но он там есть (CP866)!
Автор: iddi