Menu ☰
20-Zeichen Röhren Display
Auf irgendeiner Hobbyelektronik vor vielen Jahren wurden Röhrendisplays preiswert verkauft. Au dem Display ist unter anderem ein 3870 Microcontroller von Mostek (SGS) verbaut. Der Verkäufer meinte zwar, daß der Anschluß HD44780 kompatibel wäre, was aber nicht stimmt. Hier nun eine kurze Beschreibung, wie das Display anzuschließen ist und wie man es mit Daten “füttert”:

Die Anschlüsse sind:

14 --- 5V
13 --- D1
12 --- D5
11 --- D0
10 --- D6
9 --- /RESET
8 --- D7 (Display ON/OFF*)
7 --- BUSY oder Ack?
6 --- D4
5 --- /STROBE
4 --- D3
3 --- n/c
2 --- D2
1 --- GND

Das Display versteht den halben ASCII-Zeichensatz abzüglich einigen Sonderzeichen. Einige Zeichen unterhalb 32 sind Symbole. Wenn zusätzlich das Bit 7 mit eingeschoben wird, so schaltet sich das Display aus oder wieder ein, so kann man das hineinscrollen verhindern.
Bei Pin7 bin ich nicht sicher, was dieser soll, ich habe ihn einfach nicht beachtet.
Zu beachten ist, daß der Prozessor recht langsam reagiert, so daß man ein paar Verzögerungsschleifen einbauen muß.

Ich habe bei meinem Versuch Pin 9 und Pin 7 über einen 1k Widerstand auf 5V gelegt, die Datenbits 0-6 auf die Paralelle Schnittstelle meines PCs und Pin 5 auf Pin 14 der Paralellen Schnittstelle des PCs.

Um Zeichen hineinscrollen zu lassen muß man einfach das Byte ausgeben und dann einen einigen Millisekunden langen Low-Impuls auf Strobe geben. Ich habe das mit folgendem Perl-Script gelöst, welchem man den anzuzeigenden Text einfach als Parameter übergibt. Anstatt dem Leerzeichen wird ein nicht anzeigbares Zeichen (\) ausgegeben, da das Leerzeichen irgendein komisches Sonderzeichen ist.

#!/usr/bin/perl -w
#Tube.pl
#Bitte zuvor die Module “Device-ParallelPort-1.00″ und “Device-ParallelPort-drv-parport-1.0″ lt. README kompilieren und installieren.
use strict;
use lib ‘../lib’;
use lib ‘lib’;
use Device::ParallelPort;
my $pp = Device::ParallelPort->new(”parport”);
for (my $i=0; $i my $c=substr($ARGV[0],$i,1);
if (ord($c)==32){
$c=chr(92);
}
$pp->set_byte(0,$c);
$pp->set_byte(2,chr(1));
select (undef,undef,undef,0.05);
$pp->set_byte(2,chr(0));
select (undef,undef,undef,0.01);
}

Vielleicht hilft das mal jemand :-)

Categories: