Forum: Mikrocontroller und Digitale Elektronik LCD Display Seriell Ansteuern


von Hanno H. (Firma: DLR) (hannohupmann)


Angehängte Dateien:

Lesenswert?

Hallo,

vielleicht könnt ihr mir weiter helfen, im Forum hab ich dazu noch
nichts gefunden.

Mein Auftrag ist es, ein Display Seriell anzusteuern. D.h. ich hab nicht
die möglichkeit für die weit verbreitete 4-bit oder 8-bit Ansteuerung.
Folgendes Display kommt zum Einsatz: EA DIP204-4 (Datenblätter und
Referenzen auf www.lcd-module.de).

Das Display arbeitet mit einem Internen ks0073 Controler und wird über
einen µC angesteuert. Dabei werden die Pins P5.0 CS (chipselect), P5.1
SO, P5.2 SI, P5.3 SCLK und P5.4 RESET verwendet.
Es muss seriel sein und in C programmiert, das ist die Vorgabe.

Mein erster Gedanke war jetzt ein Programm zu schreiben, welches den
Pin5.2   so auf High und Low zieht wie es im Datenblatt des KS0073
gefordert wird. Nach jedem Bit wird die SCKL auf Low gesetzt um eine
fallende Flanke zu erzeugen.

Wenn ich mir das ganze mittels Oszis ansehe schaut der Verlauf des
Signals auch aus wie vom Datenblatt gefordert nur leider zeigt das
Display trotzdem keine Zeichen an.

Ab hier komm ich nicht mehr weiter und hoffe dass einer von euch
eventuell schon mal ein Display Seriell angesteuert oder zuminderst
erfahrung im  serieller Datenübermittlung hat und mir weiter helfen
kann.



PS: Was ich noch probiert und überbrüft habe:
- Kontrast komplett durchlaufen lassen
- Hintergrundbeleuchtung an/aus
- Pin5.1 verwenden.
- Längere Pausen nach jedem Signal um die Daten nicht zu schnell an das
Display zu schicken.

PPS: Der bisherige Code findet ihr in der Datei

PPPS: ich hoffe diesmal hab ichs zur Zufriedenheit der 
Admins/Moderatoren gemacht

von Lu K. (luke)


Lesenswert?

Hallo Hanno,

hast du wie im Datenblatt beschrieben die Lötbrücke geändert?

1
SERIELLER MODUS
2
Das Modul kann auch mit synchron seriellen Daten beschrieben werden. Dazu muss die
3
Wechsellötbrücke 4/8 auf der Modulrückseite geöffnet und auf SPI geschlossen werden. Die
4
Spezifikation zur seriellen Datenübertragung finden Sie im Kontrollerdatenblatt KS0073 von Samsung
5
(z.B. http://www.lcd-module.de/eng/pdf/zubehoer/ks0073.pdf)

Was für einen µC verwendest du?

von Hanno H. (Firma: DLR) (hannohupmann)


Lesenswert?

@Lu Ke

das Display ist fertig verkabelt und die Lötbrücke ist geändert davon 
hab ich mich überzeugt (danke trotzdem für den hinweis).

Der µC müsste ein: UD_MSP430F161X_TQFP64 sein, so steht es zuminderst 
auf dem Schaltplan.

von Jörg X. (Gast)


Lesenswert?

Teil doch das Problem erstmal auf: Software-SPI, Warteroutinen bzw. 
Pollingfunktionen und die display-sende funktionen.

Sowas ähnliches wurde mal da 
Beitrag "ks0073 - SPI - ASM" besprochen, allerdings 
für den AVR. Ich hab in dem Thread ganz unten eine C-Lösung gepostet, 
vielleicht hilft dir das. Allerdings arbeitet diese Lösung mit dem 
Hardware SPI.
Die einzige Änderung die nötig ist, um Software SPI zu nutzen, ist eine 
Funktion zu ändern ("spi_put_byte"). Die Ports kann man über Makros 
anpassen.
 Da ich aber vom MSP430 keine Ahnung hab, musst du evtl. noch mehr 
anpassen

hth. Jörg

von Hanno H. (Firma: DLR) (hannohupmann)


Lesenswert?

Erst mal danke, die Datein helfen vielleicht wirklich weiter, das 
Problem ist, dass ich nicht wirklich eine Ahnung von µC Programmierung 
in C habe.
Daher sind deine Files @Jörg erst mal der reinste overkill.

Problem wird sein, die für mich richtigen Teile rauszusuchen, im Prinzip 
will ich nur ein einfaches Zeichen anzeigen auf dem Display, 
Stringübergabe und Ausgabe von Werten ist das ganz was anderes.

Es geht wirklich nur um die übergabe eines Zeichens.

im meinem Code müsste eine Wait Funktion implementiert sein die einfach 
eine zeitlang hoch zählt.

einen Software SPI hab ich in so fern gar nicht installiert sondern ich 
leg den Output Pin auf High und lass den clock einmal von high auf low 
fallen. Danach änder ich wieder den Output Pin und lass wieder Clock 
wechseln.

von Jörg X. (Gast)


Lesenswert?

> das Problem ist, dass ich nicht wirklich eine Ahnung von µC
> Programmierung in C habe.
Dan nsolltest du das ändern ;)
Hier http://www.mikrocontroller.net/articles/MSP430_Codebeispiele
und hier http://www.mathar.com/msp430.html
Hast du aber schon mal reingeschaut, oder? ;)

> einen Software SPI hab ich in so fern gar nicht installiert sondern ich
> leg den Output Pin auf High und lass den clock einmal von high auf low
> fallen. Danach änder ich wieder den Output Pin und lass wieder Clock
> wechseln
das IST software SPI ;) (mit 2 Leitungen und dauernd aktivem Slave) weil 
DEINE Software die Bits 'rausschiebt'

Und meine Dateien sind nitch wirklich Overkill, du brauchst nur 
Kleinigkeiten zu ändern:
in der .c-Datei:
 - die erwähnte spi_put_byte Funktion, Muss nacheinander 8Bits augeben 
und entsprechen die Takleitung togglen
in der .h-Datei
 - Die Port-Makros anpassen, wahrscheinlich nur Registernamen und 
Pinnummern, aber du musst das Datenblatt für den MSP lesen ;)
 - die Delay Makros ändern, du kannst ja das display nicht abfragen, 
wenn es keine Rückleitung gibt.

hth. Jörg
ps.: es ist dem Quellcode egal, wenn du einzelne Funtionen (noch) nicht 
nutzt ;)

von Hanno H. (Firma: DLR) (hannohupmann)


Lesenswert?

In die Beschreibung von mathar hab ich schon geschaut und mir auch 
einiges rausziehen können.

Erfahrungen in Programmieren in C hab ich natürlich schon, aber eben 
noch nicht so viel auf µC Ebene, bzw. was ich bisher an µC verwendet 
habe unterscheidet sich stark von dem was ich jetzt mache.
Und es zu ändern bin ich gerade auf dem Weg. Deswegen komm ich auch 
(noch) nicht mit deinen Zuweisungfunktionen klar.

Wenn meine Zeit es heute zulässt werde ich versuchen deinen Code zu 
verstehen und eine addaption für mein Problem zu schreiben. Den dein 
Code ist eine Komplettlösung allerdings bringt die mir nicht viel, den 
bekanntlich versteht man nur Code den man auch selber geschrieben hat.

Zudem geht es mir wirklich nur um die simple Aufgabenstellung irgend ein 
Zeichen auf dem Display anzeigen zu lassen. D.h. die Initialisierung und 
dann eine Routine für das übertragen eines Zeichens.

Übergabe eines Strings oder eines Textes, Anzeigen von Nummern etc ist 
nicht wichtig und verwirrt die Grundaufgabenstellung nur unnötig.

von Jörg X. (Gast)


Lesenswert?

Ok,
dann brauchst du, wenn du keine Daten von dem Display liest, im 
einfachsten Fall:
 - eine Funktion / Makro um 8 bits an das display zu schicken
 - eine Funktion / Makro für das Timing (~20ms, ~1,4ms, ~40µs)
 - eine Funktion um die Daten zu schicken, da Daten/Befehle in zwei 
nibbles geschickt werden müssen.
Die Init-sequenz steht im Datenblatt, die einzelnen Befehle stehen im 
Kontrollerdatenblatt.

hth. Jörg

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.