Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

HD44780 als Anzeigemodul?

Basteleien analog und digital mit Strom und Spannung.

Moderator: radioscout

Aufhax
Geocacher
Beiträge: 109
Registriert: Fr 29. Okt 2010, 18:52

Re: HD44780 als Anzeigemodul?

Beitrag von Aufhax »

chrysophylax hat geschrieben: 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
Beiträge: 81
Registriert: Mo 29. Sep 2008, 08:07
Wohnort: 29525 Uelzen

Re: HD44780 als Anzeigemodul?

Beitrag von friskee »

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.
Benutzeravatar
Kappler
Geowizard
Beiträge: 1440
Registriert: So 31. Dez 2006, 16:51
Wohnort: 77876 Kappelrodeck

Re: HD44780 als Anzeigemodul?

Beitrag von Kappler »

chrysophylax hat geschrieben:...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 )...
Gruß aus dem (badischen) Schwarzwald, Andreas (1/4 Kappler)
Bekennender Fremdlogleser und Rosinenpicker
Benutzeravatar
chrysophylax
Geomaster
Beiträge: 960
Registriert: Do 24. Sep 2009, 15:55
Wohnort: LDK
Kontaktdaten:

Re: HD44780 als Anzeigemodul?

Beitrag von chrysophylax »

Kappler hat geschrieben:
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: Alles auswählen

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: Alles auswählen

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.
Zuletzt geändert von chrysophylax am Do 4. Aug 2011, 12:29, insgesamt 3-mal geändert.
Aufhax
Geocacher
Beiträge: 109
Registriert: Fr 29. Okt 2010, 18:52

Re: HD44780 als Anzeigemodul?

Beitrag von Aufhax »

friskee hat geschrieben:6500 Lumen? 7 X XM-L oder 65W HID? Hab beides :D
eier noch mit 7 fach xpg rum... wird wohl ne 14 fach xml mit 2A = 90 Watt :-)
Benutzeravatar
Kappler
Geowizard
Beiträge: 1440
Registriert: So 31. Dez 2006, 16:51
Wohnort: 77876 Kappelrodeck

Re: HD44780 als Anzeigemodul?

Beitrag von Kappler »

chrysophylax hat geschrieben:...Hoffe geholfen zu haben - auch wenns C ist...
Auf jeden Fall - vielen Dank dafür... :2thumbs:

Und C ist auch kein Problem...
Gruß aus dem (badischen) Schwarzwald, Andreas (1/4 Kappler)
Bekennender Fremdlogleser und Rosinenpicker
Benutzeravatar
chrysophylax
Geomaster
Beiträge: 960
Registriert: Do 24. Sep 2009, 15:55
Wohnort: LDK
Kontaktdaten:

Re: HD44780 als Anzeigemodul?

Beitrag von chrysophylax »

Kappler hat geschrieben: Auf jeden Fall - vielen Dank dafür... :2thumbs:
Da nich für. Aber ich will ein Video bei duröhre, wenn das Pollin-Teil im Petling runterzählt ;)

chrysophylax.
Benutzeravatar
Kappler
Geowizard
Beiträge: 1440
Registriert: So 31. Dez 2006, 16:51
Wohnort: 77876 Kappelrodeck

Re: HD44780 als Anzeigemodul?

Beitrag von Kappler »

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...
Gruß aus dem (badischen) Schwarzwald, Andreas (1/4 Kappler)
Bekennender Fremdlogleser und Rosinenpicker
Benutzeravatar
chrysophylax
Geomaster
Beiträge: 960
Registriert: Do 24. Sep 2009, 15:55
Wohnort: LDK
Kontaktdaten:

Re: HD44780 als Anzeigemodul?

Beitrag von chrysophylax »

Kappler hat geschrieben: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.
Benutzeravatar
Kappler
Geowizard
Beiträge: 1440
Registriert: So 31. Dez 2006, 16:51
Wohnort: 77876 Kappelrodeck

Re: HD44780 als Anzeigemodul?

Beitrag von Kappler »

Eilt nicht, ich komm eh nicht dazu im Moment.
Vielleicht messe ich inzwischen mal meinen Petling-Vorrat durch...
Gruß aus dem (badischen) Schwarzwald, Andreas (1/4 Kappler)
Bekennender Fremdlogleser und Rosinenpicker
Antworten