LCD

VIM878 HT1621B Display Teil 2

Die Platinen von Oshpark (18.08.2016) und Elecrow (16.08.2016) sind da, es kann losgehen mit dem Displaymodul.

oshpark_elecrow
links oshpark, rechts elecrow

Der silkscreen ist leider verpfuscht. Ich habe aus Bequemlichkeit die Eagle-Dateien geschickt, so dass der Hersteller auch die tnames (Kurznamen z. B. JP1 o.ä.) mitgedruckt hat, eigentlich  sollten es nur die tvalues (Bauteilewerte) und die tplaces (Umrisse der Bauteile) sein.

Es folgt die teilbestückte Platine, am schwierigsten ist die Bestückung des HT1621B, wobei nicht das Löten (mit breiter meißelförmiger Spitze, viel Flußmittel und zügigem Überstreichen) schwierig ist, sondern die richtige Platzierung und Fixierung des Chips:

teilbestückt
teilbestückt

 

teilbestückt
teilbestückt

 

vollbestückt
vollbestückt

 

vollbestückt
vollbestückt

 

vollbestückt
vollbestückt

 

in Funktion
in Funktion (Charakterdarstellung)

 

in Funktion
in Funktion (Zähler)

Leider habe ich erst jetzt gesehen, dass schon jemand vor mir praktisch genau diese Platine gebaut hat:

TWI Display at www.akafugu.jp

Schade, das wäre eine gute Inspiration gewesen.

VIM878 HT1621B Display Teil 1

Seit einiger Zeit gibt es bei Pollin ein LC-Glas zu kaufen, das VIM878 von Varitronics:

www.pollin.de LCD_Modul_VARITRONIX_VIM878

Der HT1621B reicht gerade noch aus, um dieses Glas mit 4 Commons und 32 Segmenten anzusteuern.

Besonders erklärungsbedürftig ist die hierfür konstruierte Hardware nicht, man schließt alle COM-Anschlüsse des HT1621B an die passenden Pins des Displays. Die Segmente 1 .. 16 werden an die Segmentanschlüsse 0 bis 15 des HT1621B angeschlossen, die Segment 32 bis 17 an die Segmentanschlüsse 16-31.

Letzteres ist bewußt in umgekehrter Reihenfolge angeordnet, um die Programmierung zu vereinfachen. Durch die gespiegelte Reihenfolge werden nämlich die Segmente im Speicher des HT1621B in derselben Reihenfolge angeordnet wie die Segmente 1 bis 16. Näheres verrät das Datenblatt des VIM 878 bei analytischer Betrachtung. 😉 (siehe auch meinen Beitrag vom 25.06.2016)

Dieses Mal habe ich auch noch den Buzzer-Anschluß (JP2) mit vorgesehen, für alle Fälle.

Schaltplan:

Schaltplan
Schaltplan

Layout:

Layout
Layout

(bestellt am 31.07.2016 bei oshpark -3 Stück- und am 02.08.2016 bei elecrow -10 Stück-)

VIM878 8 Stellen 14 Segment Display Glas

Bei Pollin gibt es mit dem VIM878 ein spannendes 8-stelliges 14-Segment LC-Display mit Datenblatt zu kaufen. Das möchte ich gern mit meiner HT1621B-Universalplatine testen. Also Datenblatt gründlich lesen:

Datenblattausschnitt Datenblattausschnitt_2

Wenn man die Pins des LCD fortlaufend mit dem HT1621B verdrahtet, werden zunächst die Segmentteile der Digits 1 bis 8 und dann wieder rückwärts laufend von 8 bis 1 den Speicherstellen des Display-RAM zugeordnet. Segmentblock/Pin 1 (1D, 1E, 1F, CA1) liegt dann also auf Adresse 0, Segmentblock/Pin 32 (1M, 1N, 1G, 1H) auf Speicherstelle 31. Das könnte für die Programmierung umständlich werden, da zum Schreiben eines Digit alle zu diesem Digit gehörenden Segmente angeschaltet werden müssen. Man müßte für zwei Teile des Digits aufwärts zählen, für die weiteren zwei Teile dann rückwärts und das mit jeweils unterschiedlichen Abständen im Speicher.

Deshalb habe ich anders verdrahtet. Ich habe die Segmentblöcke 1 bis 16 den Speicheradressen 0 .. 15 zugeordnet und dann die Segmentblöcke 32 bis 21 den Speicheradressen 16 .. 31. Der Abstand zwischen den zusammengehörigen zwei Segmentblöcken (Pin 1, 2, und Pin 32, 31) im Speicher des HT1621B ist jetzt konstant. (Besser wäre natürlich, eine universellere Softwarelösung zu finden, weil es sicher auch Displays geben wird, bei denen die Segmente nicht so strukturiert den Pins zugeordnet sind. Aber Zeit ist wie immer knapp.)

Alles schnell verdrahten und los geht es. Eine Arduino-Bibliothek zum schnellen Testen ist bereits vorhanden, wenn auch für 7-Segment-Displays.

Ein paar Bilder vom Aufbau:

VerkabelungVerkabelung_2 Verkabelung_3 Verkabelung_4 Verkabelung_5

Pollin Display HB10401

Pollin verkauft derzeit o.g. Display aus der Siemens Logo 12/24RC.

Siemens Logo
Siemens Logo

 

Siemens Logo Aufbau
Siemens Logo Aufbau

Leider sind im Internet keine Anschlußbelegungen zu finden. (Oder ich habe nicht gründlich genug gesucht 😉

Tasten
Tasten

 

Stecker
Stecker

Anbei eine erste Untersuchung der Belegung der auf dem Display vorhandenen Buchse:

Buchse beschriftet
Buchse beschriftet

Hierbei meint T_xx den jeweiligen Anschluß des Tastenfeldes, D0 .. 7 sind die Datenleitungen des LCD, CONx meint die LCD-Steuersignale (Diese Leitungen gehen alle zum LCD_Controller)

 

EDIT: Im Mikrocontroller-Forum war jemand schneller und hat bereits die vollständige Belegung herausgefunden und getestet.

Inbetriebnahme HT1621B

Der HT1621B wartet auf seinen Einsatz bei einem Display. Ich habe mir dazu das 2 x 9 Pin Display (siehe hier) aus dem Pollin-Sortiment ausgesucht:

Display 2 x 9 Pins
Display 2 x 9 Pins (an den unteren drei Pins wurden vom Transport zerstörte Anschlüsse gefixt)

Die Beschaltung folgt der dort genannten Pinbelegung (Pin2 untere Reihe auf Seg0, Pin3 auf Seg1, …) bis auf eine Ausnahme: Pin 9 der oberen Reihe wurde auf Segment 8 gelegt, damit der Code systematischer werden kann.

Segmentzuordnung
Segmentzuordnung

Es gibt eine Arduino-Bibliothek zum Download für den HT1621B. Drei ganz wesentliche Probleme hat diese Bibliothek:

  • Leider hat der Autor seine Bibliothek speziell auf sein Display zugeschnitten. In den Dateien wird nur mit sogenannten „magic numbers“ gearbeitet.
  • Der Speicherinhalt wird nicht zurückgelesen und modifiziert oder ein Abbild im Speicher gehalten, so dass man davon ausgehen muss, dass jeder Schreibvorgang den vorhergehenden Inhalt des Segments löscht. Das ist besonders ärgerlich, wenn z.B. Sonderzeichen eingeschaltet  werden. Dies löscht einzelne Segmente einer Ziffer, die auf demselben Segmentanschluss liegen. Das Schreiben von Sonderzeichen und Zahlen ist nicht kombiniert. Diese Bibliothek ist ausserhalb des dort verkauften Displays somit eine reine Demo und im praktischen Einsatz ohne Änderungen nicht wirklich brauchbar.
  • Beim HT1621B werden die Speicheradresse mit dem MSB zuerst, die Daten jedoch mit dem LSB zuerst herausgeschoben. Der Autor hat nicht klar kommuniziert, dass er – vermutlich aus Gründen der Vereinfachung – die Daten in seinem Programm mit dem MSB zuerst herausschiebt. Man muss also die Daten im Vergleich zum Datenblatt des HT1621B genau verkehrt herum aufbauen. Das ist enorm wichtig für den Aufbau der COM-Segment-Tabelle im Programm. Segment 0 im HT1621B-Speicher landet so auf Bit 7 in der Tabelle, Segment 1 auf Bit 6 usw. Da er mit „magic numbers“ arbeitet, kommt man darauf erst nach verzweifeltem Testen 😉 und nachfolgender Programmanalyse.

Vorteil ist jedoch die gute Überschaubarkeit des Codes. Es wurde auf jeglichen Schnickschnack verzichtet.

Ich versuche jetzt, diese Bibliothek an mein Display anzupassen und dabei gleichzeitig etwas universeller zu machen. Die grundlegende Senderoutine wird so umgestellt, dass immer nur vier Bit Daten gesendet werden. Das ist in „umgekehrter“ Logik übersichtlicher und einfacher zu codieren und entspricht mehr der inneren Logik des HT1621B mit 32 x 4 Bit Speicher. Die Sonderzeichen sind nun universeller kodiert. Es können auch Buchstaben (vorerst ‚O‘, ‚F‘, ’n‘) angezeigt werden. Das habe ich bereits fertig.

Display 2x9 Pins im Test
Display 2×9 Pins im Test

 

Versuchsaufbau
Versuchsaufbau

Nächster Schritt ist dann, die Schreibroutine so anzupassen, dass der bereits vorhandene Inhalt nicht mehr überschrieben wird. Wenn alles fertig und mit einem weiteren Display getestet ist, werde ich die Quelldateien unter Beachtung der ursprünglichen Lizenz veröffentlichen.

 

HT1621B breakout universelle Adapterplatine 2

Die Adapterplatine kam schließlich Mitte August an, wurde bestückt und kurz getestet. Leider geriet das Projekt etwas in Vergessenheit. Hier jetzt das erste Bild von der „Hochzeit“ mit einem WD-T1703L. Zum allerersten Testen wurden lediglich die Commons und drei Segmentpins angeschlossen. Infos zum Display WD-T1703L finden sich hier: WD-T1703L-7ELNa

HT1621B und WD-T1703L
HT1621B-breakout und WD-T1703L

Weitere Bilder und Testergebnisse folgen später.


Ergänzung:

Der Aufbau wurde noch etwas geändert:

  • Lochrasterplatte fiel weg
  • aus R=10 kOhm (103) wurde R=1 kOhm (102) für besseren Kontrast

Die Verkabelung der Beleuchtung mit zwei weißen China-3mm-„strawhat“-LED ist auf den Bildern noch sehr provisorisch, auch das habe ich später geändert:

Gesamtaufbau
Gesamtaufbau

Gesteuert wird mit einem chinesischen Arduino-Nano-Clone (im Hintergrund zu sehen) und einem Arduino-Sketch.

Beispiel 1
Beispiel 1

 

Beispiel 2
Beispiel 2

 

Beispiel 3
Beispiel 3

Weitere Bilder:

Beleuchtung
Beleuchtung

 

Beleuchtung
Beleuchtung

 

geänderter Widerstand
geänderter Widerstand

HT1621B breakout universelle Adapterplatine 1

Der HT1621B ist derzeit günstig (0,68 €/Stk. bei meiner Bestellung im Juni) bei Ebay zu bekommen. Hierbei handelt es sich um einen seriell ansteuerbaren LCD-Controller mit max. 4 Commons und max. 32 Segmenten.

Innenschaltung aus dem Datenblatt
Innenschaltung aus dem Datenblatt

Damit ist er ideal brauchbar für die LCD-Gläser aus dem LCD/LED-Sortiment von Pollin. Das Gehäuse ist etwas gewöhnungsbedürftig für einen Bastler, denn es ist ein SSOP48 mit 0,64 mm Pinabstand.

HT1621B pinout aus dem Datenblatt
HT1621B pinout aus dem Datenblatt
HT1621B
HT1621B

Leider gibt es bei Ebay dafür keine fertigen Adapter. Deshalb habe ich mir heute bei ITEAD eine selbstentworfene, universelle, auf der Applikationsschaltung aus dem Datenblatt

Applikationsschaltung aus dem Datenblatt
Applikationsschaltung aus dem Datenblatt

basierende Adapterplatine bestellt. Sämtliche Common-Anschlüsse und sämtliche Segmentanschlüsse wurden im DIL-Raster herausgeführt. Die serielle Schnittstelle zum Mikrocontroller wurde Arduino-like quer zur DIL-Reihe angeordnet. Damit ist die Platine auch Steckbrett-tauglich. Die Leitungsführung ist nahezu vollständig einseitig. Damit ist sie prinzipiell auch im Heimlabor herstellbar, wenn man die Chemie gut beherrscht. (Also nicht von mir. 😉 ) Um die Preisstufen von ITEAD auszulasten, wurden die Produktionsdaten als zweifacher Nutzen erstellt.

HT1621B breakout Layout
HT1621B breakout Layout

MSP430G2 energia LCD UC121902

Heute war Zeit, mit dem launchpad etwas herumzuspielen. Vom letzten Pollin-Einkauf lag noch ein LCD herum, ein UC121902 mit einer SPI-artigen seriellen Schnittstelle. In mikrocontroller.net wurde für dieses Display eine Arduino-Bibliothek zur Verfügung gestellt, vielen Dank an den Autor. Damit war es ein Kinderspiel, die mitgelieferten Beispiele mussten nur geringfügig angepasst werden (verwendete Digital-Pins) und liefen dann sofort, siehe Beispielbilder:

 

launchpad mit dem angeschlossenen LC-Display
launchpad mit dem angeschlossenen LC-Display

 

Display_Test
Ausgabe eines Demo-Programmes auf dem Display (Die ganz linke Stelle des Displays hat einen Segmentfehler)

 

LCD-Tester

Heute war ein wenig Zeit zum Basteln. Ich habe eine Menge LCD-Gläser herumzuliegen und wollte diese schon immer mal testen. Die grundsätzliche Funktionsweise von LCD setze ich mal als bekannt voraus. Ansonsten gibt es zum Beispiel hier oder hier mehr dazu, beides in Englisch, aber mit guten Illustrationen. Beide Seiten gehen weiterführend auch auf gemuxte LCD ein und zeigen, wie man z. B. mit AVR diese ansteuern kann.

Am besten und schnellsten läßt sich so ein Tester mit CMOS der 4000-er Serie realisieren. Üblicherweise wird der 4093 bzw. 40106 genommen, die hatte ich nicht zur Hand. Dafür lag ein 4069 verdächtig herum. 😉 In diesem stecken sechs Inverter. Mit zwei Invertern läßt sich ein formidabler Oszillator aufbauen, die restlichen vier Inverter kann man zur Signalformung verwenden.

lcd_tester

Diesen Aufbau habe ich schnell auf einem Steckbord zusammengefriemelt. Wie man sehen kann, funktioniert es. 🙂

Mit der Betriebsspannung kann man den Kontrast einstellen. Der beste Kontrast war hier bei ca. 2,77 V zu erreichen. Mit den verwendeten Bauteilwerten schwingt der Oszillator auf ca. 30 Hz. Das LCD hat nur eine backplane und wird deshalb statisch angesteuert. Für ein gemuxtes LCD muss die Schaltung anders aussehen. Zum groben Funktionstest bzw. zum Herausfinden der Pin-Belegung ist allerdings diese Schaltung auch bei Mux-LCD verwendbar.

lcd_tester