DIP204-4 mit Hardware-SPI (ATmega128)

OP #1100421
Lesenswert?

!!! SORRY MUSS DIP-204-4 HEISSEN !!!


Hallo,

ich versuche seit 2 Tagen ein Display DIP204-4 mit Hardware-SPI
(ATmega128) in Betrieb zu nehmen. Ich habe zwar schon etliche Berichte
über das Display hier und über Google gelesen, aber irgend wie komme ich
gerade nicht mehr weiter....

* Lötbrücke am Display ist auf SPI umgelötet
* Kontrast mit externem Poti ist eingestellt
* Displaybeleuchtung ist eingeschaltet
* SPI-Takt ist 230 kHz (mit Oszi überprüft)
* Reset (low) ist 25 ms lang (mit Oszi überprüft)
* Zeit zwischen den Befehlen ist 2ms (wird mit Zähler gemacht, der im
1ms-Interrupt auf Null zurück zählt - mit Oszi überprüft)

Hier die Inhalte des SPI-Registers SPCR:
* SPIE = 0
* SPE = 1
* DORD = 1
* MSTR = 1
* CPOL = 1
* CPHA = 1
* SPR1 = 1
* SPR0 = 0

Ich habe schon alle möglichen Initialisierungen probiert (die vom
Datenblatt des KS0073, welche vom Internet, Initialisierung 3 x
gesendet, ...) aber auf dem Display wird kein Testbuchstabe angezeigt.
Keine Ahnung warum.

Die SPI-Signale sehen mit dem Oszi gut aus. Auch die Reihenfolge der
Daten ist korrekt (mit Oszi üerprüft).

Die 2ms Wartezeit zwischen den Bytes sollte ja kein Problem darstellen,
oder?

Ich habe mal den Quellcode angehängt. Ich hoffe es hat jemand eine gute
Idee....
Angehängte Dateien:
Gast #1100594
Lesenswert?

Hm, ich sehe Unterschiede in der Initalisierung und jeweils CMD, DATA 
Startbyte.

Ich kenne die Register nicht aus dem Kopf, aber änder die mal ab zum 
testen.

Arbeitet dein Mirocontroller wirklich mit 1kHz Takt, weil sonst deine 
Warteschleifen nicht die nötige Zeit abarbeitet. Einige Befehle 
benötigen gewisse Ausführungszeiten (Ausführungszeiten stehen im 
Datenblatt).

Sollte dein /CS Pin immer auf Low Pegel liegen musste gerne mal das 
ganze System reseten. Nachdem du den /CS Port auf Low Pegel hast 
solltest Du eine kurze Pause einfuegen.
OP #1100867
Lesenswert?

das Problem ist gelöst! Das Display zeigt endlich einen Test-Text an!

Ich habe im Internet noch einen weitern C-Code gefunden, mit dem ich 
dann das Problem lokalisieren konnte:

1. das Startybte war falsch. Da es vom Low-Byte ausgehend gesendet wird, 
muß es "spiegelverkehrt" definiert gewesen.

2. das /CS (Slave select) wurde nach jedem Byte auf High geschaltet. Das 
muß die ganze Zeit anliegen, bis die 3 Byte (Startbyte + 2 x Datenbyte) 
gesendet sind.
OP #1100890
Lesenswert?

wenn man nur das Display am SPI-Bus hat, dann schon. Ich betreibe daran 
aber zukünftig noch eine SD-Karte.

Ich glaube die Initialisierung habe ich auch etwas geändert. Kann es 
aber gerade nicht genau sagen wie, da meine SD-Karte etwas spinnt, auf 
der ich die Daten von meinem Entwicklungsrechner kopiert habe.

Den C-Code habe ich bei www.avrfreaks.net gefunden.
OP #1100916
Lesenswert?

Hier Auszüge aus: 
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=30421&highlight=ks0073

#define COMMAND 0b00011111  // Command start byte
#define WRITE_DATA 0b01011111   // Write Data start byte

=> 5xHigh und 3xLow wäre als Startbyte für die Kommandos OK.
Schau Dir mal den Quellcode auf der Seite der AVR-Freaks an, dann siehst 
Du auch, mit welcher Initialisierung das Ganze gehen muß... Bei mir hat 
es zumindest geklappt.

Wie hoch ist die SPI-Taktfrequenz? Sieht nach 1MHz aus. Ist laut 
Datenblatt glaub erlaubt, ich würde diese mal zum Testen reduzieren.

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