C Code für SED1520, Dip122 oder DIP180

Gast #923061
Lesenswert?

Hallo zusammen,

auch wenn es für einige ermüdend ist, ich bin auf der Suche nach einem 
lauffähigen C Code, um das DIP-180 anzusteuern. Mir würde eine Routine 
für einen einzelnen  SED1520 dabei ja schon reichen.
Alles was ich bisher hier gefunden habe, war leider nicht ausreichend, 
um mein Display zum Laufen zu bringen. Hat irgendjemand einen Code, der 
bei ihm selber schon mal funktioniert hat ?

Für Hilfe wäre ich sehr dankbar.

Viele Grüße

Stephan
Gast #929880
Lesenswert?

Sehr kluge Worte..hätte ich nicht schon seit Tagen daran rumprobiert, 
hätte ich die Anfrage auch gar nicht gestellt...

Wie dem auch sei. Hab jetzt einen lauffähigen Code auf Basis einer Datei 
von
http://en.radzio.dxp.pl/sed1520/

Bin gerade dabei das Programm auf den DIP180 mit seinen 3 SED1520 
Controllern anzupassen.
Sobald der Code fertig ist, stelle ich ihn hier rein. Wenn ihn schon 
jemand
vorher benötigt, kann er mich gerne per eMail kontaktieren.
#929919
Lesenswert?

OK, dann hier mal mein Beitrag... das ein oder andere kann man sicher 
noch verbessern/schöner/schneller/anders machen, aber so klapperts im 
Moment ganz ordentlich.

Das sind nur die LowLevel-Routinen für ein EA DIP180B-5NLW, 180x32 Pixel 
verteilt auf 3 SED1520, Linien, Kreise etc gibt es ja zuhauf...

Da ich diese Routinen in ähnlicher Form auch für die DOG-Displays nehme 
(aus denen man ja das DisplayRAM nicht zurücklesen kann) benutze ich 
auch hier ein ShadowRAM im Controller für den Displayinhalt

Die Portdefinitionen sind im zugehörigen Headerfile (kommt gleich)

Kommentare, Hinweise zu Fipptehlern, Fehlern, Verbesserungen, Tips etc 
sind willkommen!!
Angehängte Dateien:
Gast #936554
Lesenswert?

Hier der versprochene Code. Damit läßt sich z.B. das Dip180 (180x32 
pixel mit 3 SED1520 Controllern) ansprechen.
Es ist eine einfache Font Datei mit dabei.
Funktionen wie GLCD_Rectangle, GLCD_Line, GLCD_Circle, GLCD_WriteString, 
GLCD_SetPixel sind getestet und funktionieren über die Controllergrenzen 
hinweg.
Es gibt noch mehr Funktionen in den graphics Dateien. Diese sind jedoch 
noch nicht getestet.
Ich hoffe das hilft dem ein oder anderen Zeit bei der Ansteuerung von 
graphischen Displays zu sparen.

Viele Grüße

Stephan
Angehängte Dateien:
Gast #1159425
Lesenswert?

Hallo.

Versuche gerade den Code von gamps zum laufen zu bringen.
Mein Problem ist, dass ich keinen Kopletten Port frei habe.

kann ich die Zeilen

#define SED1520_DATA_PORT   PORTD //Data Port
#define SED1520_CONTROL_PORT   PORTA //Control Port for RW, Ao, 
E1,E2,E3,RES

auch auf mehrer ports verteilen? also

(pseudocode)
#define SED1520_DATA_PORT   = [PORTA0,PORTA2,PORTB4,PORTB7,...]
#define SED1520_CONTROL_PORT   = [PORTC0,PORTC1,PORTD0,PORTD2,...]
(/pseudocode)

Wenn ja wie? oder geht das nicht?

Danke schon mal..
Gast #1176746
Lesenswert?

Natürlich kannst du die benötigten acht Bit auf mehrere Portpins 
verteilen. Allerdings nicht so, wie du das hier geschrieben hast.
Du mußt schon die einzelnen Bits auf den jeweiligen Portpin schreiben,
z.B. so (in ein schönes Define verpackt):

#define SED1520_DATA_PORT(a) PORTA0 = a & 0x01; /* Bit 0 */ \
                             PORTA2 = (a >> 1) & 0x01; /* Bit 1 */ \
                             PORTB4 = (a >> 2) & 0x01; /* Bit 2 */ \
                             ...

Das ganze ist halt für den Controller ein wenig aufwendiger und drückt 
dementsprecht die Gesamtperformance. Anstatt eines 8bit Portzugriffs 
müssen mehrere Schiebe-, Maskier- und Schreibzugriffe durchgeführt 
werden.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren