Forum: Mikrocontroller und Digitale Elektronik DIP204-4 mit Hardware-SPI (ATmega128)


von Martin M. (martin69)


Angehängte Dateien:

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....

von ... .. (docean) Benutzerseite


Lesenswert?

Hat das Ding kein CS (Chip-Select)?

Wenn doch wie wird der angesteuert?

von Martin M. (martin69)


Lesenswert?

CS wird in der Funktion "SPI_master_transmit" geschaltet. habe es aber
auch schon versucht, dauerhaft auf Low zu legen. Hat leider nichts
gebracht!

von Torben (Gast)


Lesenswert?

Schau Dir mal das Beispiel in der Codesammlung an.

von Martin M. (martin69)


Lesenswert?

@Torben:
hab ich schon gemacht und bin nicht weiter gekommen. Irgend etwas muß 
ich übersehen haben...

von Torben (Gast)


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.

von Martin M. (martin69)


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.

von Marcel K. (viewer)


Lesenswert?

Hallo Martin,
ich habe leider gerade einen gleichen Tread aufgemacht. Habe aber deinen 
Tread in der Suche vorher nicht gefunden :o(
Eine Frage zum CS!! Kann man das CS nicht auch auf Masse legen? Kannst 
du das mal probieren?
Gruß Marcel

von Martin M. (martin69)


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.

von Marcel K. (viewer)


Angehängte Dateien:

Lesenswert?

Noch eine Frage,
sieht dein SOF auch so aus wie auf meinem Oszi-Bild?

5x 1 dann 3x 0.

Danke für deine Antwort!!

von Martin M. (martin69)


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.

von Marcel K. (viewer)


Lesenswert?

Super, danke erst mal für die Hilfe!!!!!!!!

Werde mir die Seite ma reinziehen :)

Dir viel Glück beim Fehlersuchen mit der SD Karte gg

Grüße,
Marcel

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.