• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

HD44780 als Anzeigemodul?

Aufhax

Geocacher
Hat schon mal jemand etwas mit den HD44780 modulen gebaut? z.b. als 2x16 Zeichen Display.

gibt es ja für weniger als 2 euro die dinger...

Oder ist da die ansteuerung zu kompliziert?
 

Kappler

Geowizard
Diese Art Anzeige kannst du sehr einfach mit einem AVR-Microcontroler verheiraten und z.B. mit Bascom ansteueren:
http://www.rn-wissen.de/index.php/Bascom_und_LCD's

Funktioniert tadellos...

Was du aber beachten musst, ist die Kontrastspannung des Moduls: Manche benötigen, soweit ich weiß, eine negative Kontrastspannung, die erst wieder irgendwie erzeugt werden muss...
Eventuell ist es dann günstiger, ein paar Euro mehr für eine Anzeige auszugeben, die mit einer positiven Kontrastspannung auskommt.

Schau doch mal hier:
http://www.lcd-store.de/index.htm
Unter "Restposten" gibt es da recht günstige Modelle...
 

jennergruhle

Geoguru
Kontrastpin auf Masse legen sollte in 99% der Fälle reichen, vor allem bei den kleinen Ein- und Zweizeilern.
Übrigens erzählt sogar Wikipedia schon fast alles zur Ansteuerung: http://de.wikipedia.org/wiki/HD44780
 
OP
A

Aufhax

Geocacher
ja die wikipediaseite hatte ich eben auch gesehen.
vielleicht probier ich mich mal dran.
Den Vorteil den ich sehe (gegenüber 7 Segment) ist halt das man auch Text anzeigen kann.

In einen Petling passt das natürlich nicht mehr. aber da findet sich schon was
 
OP
A

Aufhax

Geocacher
tja Google ist dein freund - oder einfach mal suchfunktion benutzten...

danke für den link. denke ich werde mich da auch dran versuchen.
 

friskee

Geocacher
Mit der Suchfunktion stehe ich total auf dem Kriegsfuß :zensur: Ich wußte das es hier im Forum was gab und habe am Schluß nur über "langes" Googlen den Thread gefunden.

Viel Spaß beim Basteln :D
 

chrysophylax

Geomaster
Ich hab die Dinger ständig dienstlich und gelegentlich mal auch privat im Einsatz. Die meisten kommen in der Tat mit einer Kontrastspannung nahe 0V aus, wenn man ein bisschen Wert auf Temperaturtauglichkeit legt kann man auch leicht negativ werden.

Bibliotheken zur Ansteuerung gibts für egal welche Microcontroller reichlich.

Kompatible Nachbauten zum 44780 auch, da muss man meist wirklich kein bisschen in der Software anpassen.

Anschliessen kann man die Dinger sowohl im 4Bit- als auch im 8Bit-Mode, je nachdem wie viele Portpins man so über hat. Der 4Bit-Mode ist an sich auch völlig stressfrei wenn man sich an das Timing hält, einzig die Initialisierung ist im 4Bit-Mode etwas holprig, aber wenn man die guttenbergt oder versteht (je nach persönlichen Vorlieben) geht auch das stressfrei.

Pollin hat grad so ein Teil in 2 Zeilen x 8 Zeichen als ChipOnGlass 45x26x5mm für 95cent, das könnte vielleicht sogar in einen etwas grösseren Petling passen. Gibts da was mit einem Hauch mehr als 26mm Innendurchmesser ? Ich hab ne Handvoll im Bestellsammler, wenn sie da sind werde ich berichten.

Falls wer Fragen zur Konfiguration oder Programmierung hat kann ich versuchen mich nützlich zu machen, allerdings kann ich keinerlei Hilfe zu irgendwelchen Atmel-Bibliotheken geben. Ich programmier die Dinger immer komplett selbst. Erstes googeln brachte als Ergebnis, dass die Hobbybastler wohl alle irgendwelche vordefinierten Bascom-Bibliotheken nutzen - da halt ich mich dann lieber mal raus....

Unter intelligenter Verwendung der 8 möglichen selbstdefinierbaren Zeichen, die die Teile alle haben kann man übrigens lustige Pseudo-Grafiken selbst malen, da geht richtig was.... Ist halt etwas mehr Software-Aufwand, und ob sowas von Bascom unterstützt wird.... keine Ahnung.

chrysophylax.
 
OP
A

Aufhax

Geocacher
chrysophylax schrieb:
aber wenn man die guttenbergt oder versteht (je nach persönlichen Vorlieben) geht auch das stressfrei.
Denke ich werde das beim ersten versuch mal frei nach Gutenberg halten. Oder mich halt zumindest so weit einlesen das ichs soweit wie nötig verstehe.
Im winter werd ich mich dann wohl soweit einarbeiten das mehr geht.

das 95 Cent modul ist ja mal perfekt
 

chrysophylax

Geomaster
Als Bilder-Anhang mal 2 Bilder, wo die 8 selbstdefinierten Zeichen der Displays superelegant eingesetzt werden - die Displays sind Vakuumfluoreszenz-Displays ("sowas Gutes wird heute gar nicht mehr gebaut"), die allerdings softwaretechnisch vollständig kompatibel zu den HD44780-Teilen sind. Brauchen etwas mehr Strom als LCDs im gleichen Formfaktor, haben aber einen unerreicht traumhaften Kontrast, Ablesewinkel und Temperaturverhalten im Vergleich zu LCDs.

Das Ganze stammt aus einem Luxus-MP3-Player Projekt, das vor Jahren mal unter GPL angefangen wurden und inzwischen von Logitech aufgekauft wurde und zu proprietärem Mist in Apple-Optik mit runden weißen Ecken "weiter"entwickelt wurde.

Der Fortschrittsbalken besteht aus selbstdefinierten Sonderzeichen, ebenso die "Note" rechts unten in der Ecke bzw. Teile des doppeltgrossen Zeichensatzes, mit dem die Uhrzeit gemalt wurde.

Gerade der doppeltgrosse Zeichensatz macht richtig Spaß, den hab ich auch schon in diversen eigenen Projekten verwurstet. Je nachdem was gerade gebraucht wird werden in dem Projekt die 8 selbstdefinierbaren Sonderzeichen "on the fly" umdefiniert, man muss halt nur darauf achten nie mehr als 8 davon gleichzeitig zu benutzen.

Ich finds unglaublich charmant und elegant - und das geht mit jedem HD44780-kompatiblen LCD.

chrysophylax.
 

Anhänge

  • VFD1.JPG
    VFD1.JPG
    35 KB · Aufrufe: 1.167
  • VFD2.JPG
    VFD2.JPG
    28,2 KB · Aufrufe: 1.167
OP
A

Aufhax

Geocacher
chrysophylax schrieb:
und zu proprietärem Mist in Apple-Optik mit runden weißen Ecken "weiter"entwickelt wurde.
Traurig aber passiert leider mit viel zu vielen schönen sachen.

Schaut übrigens wirklich toll aus.

Ich werde jetzt leider mangels zeit doch nur was nach kochbuch bauen.
Grad neue Teile für Lampen projekt bekommen. Mach erst noch meine 6500 Lumen bike lampe fertig. :)
 

friskee

Geocacher
6500 Lumen? 7 X XM-L oder 65W HID? Hab beides :D und bin schwer begeistert, was heute so alles geht. Nach dem Kochbuch ist die LCD-Geschichte rechtbeinfach und funktioniert richtig klasse.
 

Kappler

Geowizard
chrysophylax schrieb:
...Gerade der doppeltgrosse Zeichensatz macht richtig Spaß, den hab ich auch schon in diversen eigenen Projekten verwurstet. Je nachdem was gerade gebraucht wird werden in dem Projekt die 8 selbstdefinierbaren Sonderzeichen "on the fly" umdefiniert, man muss halt nur darauf achten nie mehr als 8 davon gleichzeitig zu benutzen...

Der doppeltgroße Zeichensatz gefällt mir auch... :D

Hast du hierzu Infos, welche Standardzeichen bzw. Sonderzeichen (wie sehen die aus?) zur Darstellung der Zahlen von 0-9 gebraucht werden?
Das würde einiges an Arbeit sparen...

Mit dem erwähnten 8*2-Mini-Display von Pollin könnten somit immerhin 2-stellige Zahlen (ich denke speziell an einen fiesen Countdown in einem PETling, falls sich ein passender findet :D )...
 

chrysophylax

Geomaster
Kappler schrieb:
Der doppeltgroße Zeichensatz gefällt mir auch... :D
Hast du hierzu Infos, welche Standardzeichen bzw. Sonderzeichen (wie sehen die aus?) zur Darstellung der Zahlen von 0-9 gebraucht werden?
Das würde einiges an Arbeit sparen...
Der ist so klug angelegt, dass er nur die unteren 128 Zeichen des Standard-Zeichensatzes nutzt (die wirklich bei allen Displays gleich sind) und die oberen 128 ignoriert. Die wenigen Sonderzeichen, die benutzt werden passen locker in die 8 verfügbaren Plätze, da muss man nicht mal zur Laufzeit umdefnieren. Ich schau gerade mal... Moment... Mein letztes eigenes Spielprojekt, was nur diese "Uhr" nachgebaut hat....

Code:
void DisplayInit(void)
{
 struct REGPACK r;

 // init LCD SC2002A, 4x16 Character
 // set to 8-bit-interace, 2 lines, 5x7 character set
 outportb(LCDCTRL,0x38);		// 00111000b
 r.r_ax = 0x0000; 				// Task Sleep
 r.r_bx = 0x0002; 				// 2ms
 intr(0xAD,&r);
 // set display on, set cursor on (blink)
 outportb(LCDCTRL,0x0C);		// 00001100b
 r.r_ax = 0x0000; 				// Task Sleep
 r.r_bx = 0x0002; 				// 2ms
 intr(0xAD,&r);
 // clear display
 outportb(LCDCTRL,0x01);		// 00000001b
 r.r_ax = 0x0000; 				// Task Sleep
 r.r_bx = 0x0002; 				// 2ms
 intr(0xAD,&r);

 // autoincrement DDRAM Adress, no Shift
 outportb(LCDCTRL,0x06);		// 00000110b
 r.r_ax = 0x0000; 				// Task Sleep
 r.r_bx = 0x0002; 				// 2ms
 intr(0xAD,&r);

 outportb(LCDCTRL,0x40);		// CGRAM Address für Char 0x00
 r.r_ax = 0x0000; r.r_bx = 0x0001; intr(0xAD,&r);//Oberstrich basteln

 outportb(LCDDAT,0x1f);		                     //*****
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x00);		                     //.....
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x00);		                     //.....
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x00);		                     //.....
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x00);		                     //.....
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x00);		                     //.....
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x00);		                     //.....
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x00);		                     //.....
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);

			     //Char 0x01 Linksstrich basteln

 outportb(LCDDAT,0x10);		                     //*....
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x10);		                     //*....
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x10);		                     //*....
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x10);		                     //*....
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x10);		                     //*....
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x10);		                     //*....
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x10);		                     //*....
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x00);		                     //.....
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);

			     //Char 0x02 Zunten basteln

 outportb(LCDDAT,0x01);		                     //....*
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x02);		                     //...*.
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x04);		                     //..*..
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x08);		                     //.*...
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x10);		                     //*....
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x10);		                     //*....
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x1f);		                     //*****
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x00);		                     //.....
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);

			     //Char 0x03 Doppelstrich basteln

 outportb(LCDDAT,0x1f);		                     //*****
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x00);		                     //.....
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x00);		                     //.....
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x00);		                     //.....
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x00);		                     //.....
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x00);		                     //.....
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x1f);		                     //*****
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x00);		                     //.....
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);

			     //Char 0x04 Rechtsstrich basteln

 outportb(LCDDAT,0x01);		                     //....*
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x01);		                     //....*
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x01);		                     //....*
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x01);		                     //....*
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x01);		                     //....*
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x01);		                     //....*
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x01);		                     //....*
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x00);		                     //....*
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);

			     //Char 0x05 Zoben basteln

 outportb(LCDDAT,0x1f);		                     //*****
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x01);		                     //....*
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x01);		                     //....*
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x01);		                     //....*
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x02);		                     //...*.
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x04);		                     //..*..
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x08);		                     //.*...
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x10);		                     //*....
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);

			     //Char 0x06 Backslash basteln

 outportb(LCDDAT,0x00);		                     //.....
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x10);		                     //*....
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x08);		                     //.*...
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x04);		                     //..*..
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x02);		                     //...*.
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x01);		                     //....*
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x00);		                     //.....
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
 outportb(LCDDAT,0x00);		                     //.....
 r.r_ax = 0x0000; r.r_bx = 0x0002; intr(0xAD,&r);
}
Das sind die Zeichen, die du selbst definieren musst (der Interrupt-Aufruf ist ein 2ms sleep , der in so kleiner Auflösung nicht eleganter vom damals benutzten Betriebssystem unterstützt wurde).

Und hier kommen die Ziffern 0 bis 9 in "Grossschrift" hintereinander, dass man sie im Array problemlos mit dem Faktor 3 multipliziert und anschließend zeichenweise indiziert adressieren kann. Wenn du also auf dem Display die Ziffer ausgeben willst, deren Wert in der Variable i steht, so musst du in der oberen Zeile
ZStr1[3*i],ZStr1[3*i+1],ZStr1[3*i+2] und in der unteren Zeile
ZStr2[3*i],ZStr2[3*i+1],ZStr2[3*i+2] ausgeben.
Fröhliches String-Basteln und indizieren wünsche ich. Praktischerweise sind alle "Großziffern" 3 Standardzeichen breit und 2 Standardzeichen hoch...

Code:
char * ZStr1
 = {"/\000\006"    //0 oben
    " /\001"      //1 oben
    " \000)"      //2 oben
    " \003)"      //3 oben
    "\004_\001"   //4 oben
    "\004\003\000"//5 oben
    " \002 "      //6 oben
    " \000\005"   //7 oben
    "(\003)"      //8 oben
    "(\003)"};    //9 oben
;

char * ZStr2
 = {"\006_/"       //0 unten
    "  \001"      //1 unten
    " \002_"      //2 unten
    " _)"         //3 unten
    "  \001"      //4 unten
    " _)"         //5 unten
    "(_)"         //6 unten
    " / "         //7 unten
    "(_)"         //8 unten
    " / "};       //9 unten
;
Die oktal dargestellten Zeichen 001 bis 006 sind die selbstdefinierten Sonderzeichen, alles Andere sind normale Zeichen aus dem Standard-Zeichensatz.

Hoffe geholfen zu haben - auch wenns C ist. Aber vordefinierte Strings wird man auch in anderen Sprachen weiterverwursten können. Keine Ahnung wie man das da mit nichtdarstellbaren Sonderzeichen macht, notfalls hex oder binär. Ich find Oktal eh doof, aber mitten im String ists halt schlecht auf hex oder binär umzustellen C halt. Manchmal etwas seltsam.

chrysophylax.
 

Kappler

Geowizard
Um ehrlich zu sein - ich wollte mit dem Pollin-Teil auf deinen Bericht warten...

Oder warte mal - du bestellst doch demnächst was bei Pollin? Könntest du mir 2 Stück davon mitbestellen und mir als normalen Breis zusenden? Die 5 Euro nochwas Versandkosten sehe ich nicht ein bei 1,90 Warenwert...
Dann würde nur noch der passende PETling fehlen...
 

chrysophylax

Geomaster
Kappler schrieb:
Um ehrlich zu sein - ich wollte mit dem Pollin-Teil auf deinen Bericht warten...
Faulpelz ;) - aber kann ich machen. Ich wollt mir eh gleich 10 bestellen, ist so doof wenn man sich die Mühe für ein Display macht und das Ergebnis dann nicht wiederverwursten kann. Kann aber nicht für einen bestimmten Bestelltermin garantieren, ich hab zwar diverses Zeug im Bestellsammler für Pollin aber da ist gerade noch nix dabei, was furchtbar dringend wäre. Kann also noch ne Weile dauern. Ich bestell dann mal ne Handvoll mehr.

chrysophylax.
 

Kappler

Geowizard
Eilt nicht, ich komm eh nicht dazu im Moment.
Vielleicht messe ich inzwischen mal meinen Petling-Vorrat durch...
 
Oben