Применение вакуумного люминисцентного индикатора

Некоторое время назад мне подвернулся недорогой VFD-экранчик. Из него я сделал что-то вроде часиков, подключив к домашнему серверу.



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

Я использовал дисплей IEE 036X2–122–09220 (он же IEE 36199-01), их можно найти на ибее. Скорее всего, работа с любым другим VFD от IEE не будет отличаться (также, как и со многими другими похожими дисплеями, например, от кассовых аппаратов).

Дисплей поддерживает три параллельных интерфейса (процессорные шины Intel 8041/42 и Motorola 6821, режим эмуляции HD44780) и обычный асинхронный последовательный вход с уровнями RS-232. Параллельные интерфейсы удобны для встраивания дисплея в готовые девайсы, нам же удобнее использовать последовательный вход.

Разъём дисплея:



Нам нужны только +5 VDC (питание), COMMON (земля) и SERIAL_IN (последовательный вход). Остальные пины используются для параллельных интерфейсов, они уже подтянуты к питанию и можно оставить их висеть.

Запитать дисплей можно от USB-порта или блока питания ПК. Для связи же проще всего использовать COM-порт.



Однако, естественно, лучше как-нибудь прицепиться к USB. Например, с помощью популярного переходничка AVR-CDC на Тине 2313, дополненного преобразователем уровней на MAX232. Правда с этим переходничком у меня возникли проблемы, когда я перешёл на 64-битный Debian (устройство вроде бы нормально подхватывалось системой, но не работало). На помощь пришёл вот такой USB-COM хвостик на PL2303 и MAX212, купленный в одном из китайских интернет-магазинов.



Хвостик я распотрошил и подключил питание дисплея +5 VDC и COMMON напрямую к USB (красный и чёрный провода, соовтетственно), а SERIAL_IN — к пину 3 (TxD) COM-порта.



На питание повесил конденсатор на 100 мкф (хотя это и не обязательно).



Чтобы проверить экранчик, подойдёт, например, microcom.

sudo apt-get install microcom

sudo microcom -s 9600 -p /dev/ttyUSB0

/dev/ttyUSB0 — это для переходничков на PL2303, FT232, etc. Для COM-порта компа скорее всего будет /dev/ttyS0, переходнички же наподобие AVR-CDC живут в /dev/ttyACM0, etc.

9600 — это скорость последовательного входа дисплея, выбираемая джамперами на нём.



Набор символов, который используется дисплеем, напоминает ASCII. Набираем что-нибудь в microcom'е — оно должно появляться на дисплее.



Для управления дисплеем можно приспособить что-нибудь наподобие lcd4linux, lcdproc, etc. Но их возможности зачастую могут оказаться недостаточными, в общем, проще написать самим)

Писать будем на перле, т.к. он лаконичен и понятен.

Для начала, чтобы отображать данные в реальном времени, нам понадобится оторвать буферизацию.

$| = 1;

Теперь перл будет сбрасывать автоматически сбрасывать буфер.

Управляется дисплей специальными символами. Например, 0x0F — показать курсор, 0x15 — очистить экран. Подробнее — в документации, ссылка на которую указана ниже.

Напишем часики.

#!/usr/bin/perl
use strict;
use warnings;
use LWP::Simple;

# инициализация дисплея
sub display_init() {
	$| = 1; # включаем автоматическое сбрасывание буфера
	binmode(STDOUT,':raw'); # на всякий случай
	print pack("C",0x14); # отправляем дисплею программный сброс
	print pack("C",0x0e); # выключаем курсор
	print pack("CCCCCCC",0x18,0xf6,0x00,0x04,0x44,0x40,0x00); # знак градуса
}

# переход в указанную позицию
sub display_goto() {
	my ($x, $y) = @_;
	my $pos = $x + $y*20;
	print pack("CC",0x1b,$pos);
}

# получение текущей погоды
sub get_weather() {
	my ($city) = @_;
	my $url = "http://www.google.com/ig/api?weather=$city";
	my $data = get $url or return undef;
	if($data =~ /<current_conditions>(.+?)<\/current_conditions>/) {
		my $weather = $1;
		my %info;
		while($weather =~ /<(.+?) data="(.+?)"\/>/g) {
			$info{$1} = $2;
		}
		return \%info;
	}
	return undef;
}

# вывод времени
sub display_time() {
	my($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time());
	my @abbr = qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec );
	printf "%s %02d %02d:%02d:%02d",$abbr[$mon],$mday,$hour,$min,$sec;
}

# вывод температуры
sub display_weather {
	my $city = shift;
	my $info = &get_weather($city);
	if(!$info) {
		print "Err!";
		return;
	}
	my $temp = int($info->{temp_c});
	printf("%+3d%s",$temp,chr(0xf6));
}


&display_init();

my $last_weather_update = 0;

while(1) {
	
	# показываем время
	&display_goto(0,0);
	&display_time();
	
	# и погоду (примерно каждые пол часа)
	if(time() - $last_weather_update > 30*60) {
		&display_goto(16,0);
		&display_weather("Novosibirsk");
		$last_weather_update = time();
	}
	
	sleep 1;
}


Запустим.

./vfd_clock.pl | sudo microcom -s 9600 -p /dev/ttyUSB0



Вот моя текущая версия. С отображением LA, свободной памяти, места на диске и онлайна на сервере майнкрафта.



Вот так можно сделать красивую фигню. Спасибо за внимание.

Документация на дисплей.
Моя управляющая программа.
Поделиться публикацией
Никаких подозрительных скриптов, только релевантные баннеры. Не релевантные? Пиши на: adv@tmtm.ru с темой «Полундра»

Зачем оно вам?
Реклама
Комментарии 43
  • 0
    Забавно, еще можно дописать управление текстом с телефона. Спасибо за статью.
    • +4
      так просто?! Никаких адруин, только лишь пишем в com порт?! Где взять такой, да подешевле?
      Хотелось бы водрузить такой на роутер с usb выходом и заставить показывать прогноз погоды (скрипт написать не проблема)
      • +1
        Раньше так все и делали :)
        • +3
          Где_купить++
          • +2
            Вот лот на ибее. Дешевле врядли удастся найти. =)
            У меня раньше он и был подключен к роутеру под openwrt (скрипт использовал почти тот же).
            • +2
              Аааа… скорей-быстрей
          • +1
            Экран чем-то напомнил мне тот, который показывал текущую дату и дату, куда отправлялись герои «Назад в будущее».
            • +4
              В BTtF был попроще, восьмисегментный LED
              • +1
                7-сегментный.
                • +2
                  Ещё есть точка у каждой цифры
                  • +2
                    • 0
                      Okay.jpg
                      А между тем риторический вопрос, зачем у каждой цифры точка на индикаторе времени, если точки в часах идут отдельными диодами? Доктор использовал то, что было? При этом у него явно были индикаторы на две и на четыре цифры, поскольку не похоже, чтобы крышка закрывала часть «пустых» цифр. И явно видно, что индикатор месяца подсвечен лампочкой, то есть может быть только механическим, что довольно странно. В фильме скорее всего использовался просто трафарет, но опять таки, зачем, когда всё остально сделано на индикаторах?
                      • 0
                        Точка для дробных чисел. С индикатором месяца ошибка — или обозначать t строчно, как тут, или 14-сегментный дисплей. Думаю такого просто не нашли :)
                        • 0
                          Кроме того, точка может быть точкой отсчета, как на игральных костях к примеру, для определения 9 это или 6.
                • +4
                  Интересно, что три с половиной года часы покажут 21-е октября 2015 года и мы все тихонько въедем в будущее из второй части фильма без всяких DeLoarean-ов.
                • +6
                  все хорошо, но фраза

                  Писать будем на перле, т.к. он лаконичен и понятен.

                  убила просто.
                  • 0
                    А что было непонятно в коде?
                    • 0
                      мне может и все, но я не думаю что всем. плюс все что находится после «т.к.» — субъективно.

                      мне кажется, корректнее было бы написать "_мне_ более лаконичен и понятен"
                      я, например, писал бы на плюсах. кто то еще на чем то
                      посему считаю фразу не совсем корректной, но это не особо важно, просто меня задело
                    • 0
                      Не то, чтобы я с перлом на вы, но заявление
                      перл лаконичен и понятен
                      замечу очень мощным! Респект автору!
                    • 0
                      Да и не ибэем единым.
                      • 0
                        Правда разница в ценах с ибэем пугает.
                        • 0
                          Дико дорого, на ибее 15$, здесь же овер 100$.
                          За такие деньги есть графические VFD 256x64, очень няшные, но вот жаба давит! >_<
                          Да и этот дисплейчик в несколько раз больше тех, что в чип-дипе, умеет больше всего (кодовые таблицы, мигание, регулировка яркости, etc.), несколько интерфейсов включая последовательный порт, а не только HD44780.
                          Маленькие качественные за разумные деньги VFD есть тут.
                          • 0
                            «Мопед не мой», я вчера только просматривал ассортимент 7-сегментных, 65 мм индикаторов в Чип и Дипе, озадачился DIY часами типа этих, а тут такой пост.
                          • +5
                            чиподип — это известные барыги, да. цены с ебэем различаются обычно на порядки.

                            вообще, есть и другие не менее достойные отечественные магазины.
                            • +1
                              парсер ссылку съел
                              • +1
                                Да тоже цены не ахти…
                                Я тут обычно заказываю, ассортимент небольшой, но чисто радиолюбительский.
                                Да и еще магазинов много, тот же платан например…
                        • 0
                          Это пять! Настоящий олдскул!!!
                          • +1
                            здорово когда у кого-то есть время заниматься такими вещами! я бы сам с удовольствием что-то по пилил бы, по склеивал! это действительно здорово!
                            • 0
                              Вам что-то мешает? :)
                              • +1
                                к сожалению, в эпоху коммерциализации, я занимаюсь тем что приносит прибыль и очень здорово, когда у людей есть время заниматься такими вещами! я уверен, что и у меня в ближайшем будущем найдется время на подобные вещи, обязательно выложу отчет )
                            • +1
                              Расскажите, как такие часы сделать, а то я от них тащусь…
                              • 0
                                Как-то так )
                                • 0
                                  Там, кстати, тема по ним есть на форуме страниц под 200 (или за...).
                              • 0
                                А внутре у них неонка!
                              • +1
                                А можно в них интенсивность свечения менять?
                                • +2
                                  Этот дисплейчик умеет. Причём регулировать яркость можно и программно и аппаратно)
                                • 0
                                  Спасибо за вдохновение, что-нибудь придумаю с имеющимся lcd-дисплеем и ардуино.
                                  Заметил по фотке, что обои в комнате такие же, как у меня ;)
                                  • 0
                                    У меня как раз завалялся дисплей покупателя от кассы с работы, надо что-нибудь подобное на нем заделать!
                                    • +1
                                      По сути это оно и есть, мой дисплей как раз применяется в кассовых аппаратах.

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

                                    Самое читаемое
                                    Интересные публикации