Пользователь
6 февраля 2012 в 20:25

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

Некоторое время назад мне подвернулся недорогой 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, свободной памяти, места на диске и онлайна на сервере майнкрафта.



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

Документация на дисплей.
Моя управляющая программа.
Алексей @ShadowHacker
карма
–226,5
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое

Комментарии (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 (или за...).
        • +1
          Гораздо лучше эти www.youtube.com/watch?v=m4R3hODnTGo
          • 0
            Ну, так это ж Возняк…
            • 0
              C паяльником и газозарядными индикаторами каждый может побыть немножко Возняком.
    • 0
      А внутре у них неонка!
  • +1
    А можно в них интенсивность свечения менять?
    • +2
      Этот дисплейчик умеет. Причём регулировать яркость можно и программно и аппаратно)
  • 0
    Спасибо за вдохновение, что-нибудь придумаю с имеющимся lcd-дисплеем и ардуино.
    Заметил по фотке, что обои в комнате такие же, как у меня ;)
  • 0
    У меня как раз завалялся дисплей покупателя от кассы с работы, надо что-нибудь подобное на нем заделать!
    • +1
      По сути это оно и есть, мой дисплей как раз применяется в кассовых аппаратах.

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