Forum: Mikrocontroller und Digitale Elektronik Ansteuerung KS0073 gelingt nicht


von Danilo Reinhardt (Gast)


Lesenswert?

Hallo,

nachdem ich einige Beiträge in diesem Forum zur Ansteuerung eines
KS0073 Displays über SPI gelesen habe und auf einem ARM verewigt habe
verzweifle ich langsam, aber recht konstant.

Das Display tut gelinde gesagt keinen Mux, das einzige was zu
funktionieren scheint ist das auslesen des Busy Flags. "Scheint"
deshalb, da ich dem teil nicht mehr vertraue. Vielleicht ändert die
kosmische Strahlung ja das Bit für das Flag.

Die Initialisierung habe ich aus einem Thread hier im Forum übernommen,
das Aufteilen auf 2 Byte (für den SPI Modus) und das umstapeln der Bits
in den Bytes führe ich auch durch. Das Timing stimmt und das Protokoll
habe ich nun schon per LogicAnalyser Bit für Bit durchgeschaut, es
stimmt.

Nach der Initialisierung sind bei mir alle "Blöcke" aktiv, das
Display wird weder gelöscht noch erscheint ein Cursor. Probehalber habe
ich schon ein zweites Display des gleichen Typs getestet.

Kann mir jemand sagen an welcher Flanke des Tacktes die Daten
übernommen werden?

Was sollte das Display den am Anfang der Initialisierung anzeigen?

Hat jemand irgendeinen Tipp für mich, der das Problem eingrenzen
könnte?

Danke im Voraus!!!
Ciao Danilo

von Dirk (Gast)


Lesenswert?

Hi,

ich hatte fuer GCC eine Ansteuerung des Display's in der Codesammlung
reingestellt. Hast du die Hardbruecke auf dem LCD geaendert? (auf SPI)

Das war damals mein erstes GCC Projekt. Leider hatte ich die Timings
ueber Delay Schleifen gemacht. Diese muessten angepasst werden an die
Quarzfreq. Irgendwo war da auch ein Link fehler es funktionierte nur
wenn sich meine routine mit in der Main.c befanden.

Kontrastspannung stimmt aber?

Gruß,
Dirk

von Dirk (Gast)


Lesenswert?


von Danilo Reinhardt (Gast)


Lesenswert?

Hallo Dirk,

genau diesen Thread meinte ich. Mein Code führt, bis aus Änderungen was
das ARM Design angeht, die gleichen Anweisungen aus.

Die Brücke ist auf SPI gestellt, die Kontrastspannung kann ich per Poti
anpassen. Das Display schwankt dann zwischen "alles weiß" und
"nichts".

von Dirk (Gast)


Angehängte Dateien:

Lesenswert?

Hi,

dann stimmt etwas mit der Init nicht. Jemand anders hatte da noch ein
Beispiel in meinem Thread gepostet. Hast du das schonmal getestet?

Im Anhang findest du die neuste Version von mir diese funktionierte
jetzt bei 3 Geraeten ohne Probleme.

Hast du drauf geachtet das ich LSB First ausgebe? Prescaler fuer den
SPI CLOCK richtig eingestellt, sowie die CPOL Porlaritaet?

Das Beispiel ist fuer ein 7,3728Mhz Quarz !

Gruß,

Dirk

von Danilo Reinhardt (Gast)


Lesenswert?

Also,

- LSB zuerst, mache ich von Hand (unterstützt der ARM bzw mein OS net)
- Clock ist auf 460800 Baud
- Wartezeiten sind sehr großzügig (du wartest 40ms ich 100ms zB)

Ich vermute das Problem liegt am Clock. Wenn ich den LA drauf loslasse
sehe ich das die steigende flanke des clocks genau gleichzeitig mit der
steigenden flanke des datensignals liegt. Sprich also das LCD übernimmt
evtl falsche daten. Leider kann ich das nicht ändern. GRUMMEL

Ich denke mal ich vermute da richtig und mir bleibt nichts anderes als
das SPI in S/W zu machen. Da fragt man sich wozu es standards gibt..
aber das kennt man ja.

Danke dir trotzdem vielmals.

von Danilo Reinhardt (Gast)


Lesenswert?

OK. Also für alle nach mir ;)

Wenn man den Chipselect des SPI wieder "deselected" muss man nach
einer neuerlichen Selektierung wieder ein Startbyte senden...

Wenn der CS auf dauer selektiert bleibt ist dies nicht nötig.

Das war einer von vielen fehlern. Ich mache jetzt alles in S/W und es
funktioniert. Danke an Dirk!

von Johannes (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

so langsam bin ich am verzweifeln. Versuche nun schon seit 2 Tagen mein
LCD  4*20 mit dem Kontroller KS0037 anzusteuern. Falls es wichtig ist,
es ist das EA W204B-NLW LCD von Assembly Elektronik. Nur geling's mir
nicht, was vernünftiges anzuzeigen... Er zeigt mir  Zeichen an, aber
nicht die die ich per Tabelle ausgwählt habe. Zweitens ist die
Initialisierung auch nicht ok, denn ich hab ihm den 4 Zeilen Modus
vorgegeben. Wenn ich aber mehr als 20 Zeichen rein schreib springt er
automatisch bei Auto-Increment in die Zeile 3 statt 2.... Meine
Datenleitungen sind sehr kurz ca. 15 cm. Ich benutze ein ATMEGA16 mit
8MHz. Weiss nicht ob hier eine Fehlerquelle ist, da der 8MHz ein
bisschen zu schnell sein kann. Code + Anzeigebild dazu im Anhang...

hoffe auf eure Hilfe

von Johannes (Gast)


Lesenswert?

Fast hätt ichs vergessen:

Die Ansteuerung erfolgt natürlich über den 8 Bit Modus...

Ps.: Forum hab ich schon durchforstet und google hab ich auch schon in
Anspruch genommen....

von Philipp B. (philipp_burch)


Lesenswert?

Also dass er dann in Zeile 3 springt ist schon richtig, dass ist durch
die interne Adressierung vom Display-Controller vorgegeben. Die genauen
Adressen stehen im Datenblatt, die musst du jeweils auswählen, damit du
in die gewünschte Zeile schreiben kannst.
Dass da die falschen Zeichen ankommen könnte mit der Verkabelung
(dreimal überprüft) oder der Wartezeit zu tun haben. Auf die
Quarzfrequenz kommt's nicht an, da musst du die Wartezeiten halt
entsprechend anpassen (Hab' mir deinen Code jetzt net angesehn).

von Johannes (Gast)


Lesenswert?

Danke für die Anregungen werds weiter versuchen....

von Johannes (Gast)


Lesenswert?

Ach ja was ich noch sagen wollte: Das komische an der Sache ist nämlich:


In meinem Quellcode beschreib ich das LCD mit einem Bereich vom
Zeichensatz: zb. von 0x30  bis 0x44

Die Zeile von 0x30 bis 0x3F erschein ganz normal. Es sind die Zahlen
0-9 und ein paar sonderzeichen.

Sobald ich eine andere Spalte auswähle im Zeichensatz z.B 0x40 kommt
nur schrott.....

Fragen über Fragen....

von Uwe (Gast)


Lesenswert?

Hi!
Überprüfe doch bitte mal DB6. Wenns bis $3F geht und darüber nicht
mehr, wir dir wohl eine/zwei Datenleitunge(n) fehlen.

MFG Uwe

von Johannes (Gast)


Lesenswert?

Hallo,

also vielen Dank für eure Mithilfe. Bei mir ist ein nicht sichtbarer
Lötspritzer schuld gewesen. Er hatte DB5 und DB6 immer verbunden.
Somit konnte ich bestimmte bereiche nicht ansteuern.....

von Johannes (Gast)


Lesenswert?

Im Datenblatt des KS0073 gibts die Tabelle mit den Ansteuerbefehlen.
Sind mir bekannt vom HD44078. Jedoch steht darüber "IE=HIGH" Was soll
denn das heißen??? Muss das Enable-Bit während den Steuerbefehlen High
sein??? Der Befehl wird doch nur übernommen, wenn das E von High-> Low
wechselt oder????

von Johannes (Gast)


Lesenswert?

weiß zu der Angelegenheit niemand was????

von Johannes (Gast)


Lesenswert?

void LCD_init(void)
{
int i;

wait(30000);      //30ms für Initialisierung nach Power on

LCD_Befehl(0x34);    //8-Bit Modus; RE=1
LCD_Ready();
wait(500);                      //500 µs
LCD_Befehl(0x09);    // 4-Zeilen Modus
LCD_Ready();
wait(500);
PORTD=0xF0;
LCD_Befehl(0x30);    //8-Bit Modus RE=0 Setzen,
LCD_Ready();
wait(500);
LCD_Befehl(0x06);    //Autoinkrement
LCD_Ready();
wait(500);
LCD_Befehl(0x0F);    //Display ein;Cursor ein; Cursor blinken
LCD_Ready();
wait(500);
LCD_Befehl(0x01);    //Clear Display
LCD_Ready();
wait(2000);
}

int main(void)
{
LCD_init();

LCD_Befehl(0xA0);
for(i=0;i<=3;i++)
LCD_Schreiben(0x33);
}

Hallo, ich versuche nun schon ewig das LCD im 4 Zeilenmodus zu
betreiben. Leider gelingt es mir überhaupt nicht. Ich kann im 2
Zeilenmodus(Also 1. und 3. Zeile) alle Zeichen darstellen, weshalb
meine Datenleitungen, denke ich, in Ordnung sind. Was mach ich den
falsch???. Es kann doch nur an der Init(); liegen, aber ich seh keinen
Fehler....

Es ist ein LCD von Assembly Electronic mit dem Kontroller KS0073

Danke

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.