USI für SPI zur Ansteurerung von einem Display

Gast #1288727
Hallo,
seit einiger Zeit beschäftige ich mich nun mit µCs (mikrocontroller.net 
ist zum Lernen auch eine super Seite). Nun wollte ich mal ein 
monochromes Handy-LCD ansteuern. Allerdings ergeben sich da ziemliche 
Probleme:
Nachdem ich versucht habe 2 verschiedene LCDs manuell mithilfe der 
Timing-Diagramme aus den Datenblättern der jeweiligen LCD-Controller 
anzusteuern und gescheitert bin, habe ich gelesen, dass es über SPI 
gehen müsste.
Es gibt dafür auch einige Beispiele im Netz. Das Problem ist aber, dass 
ich einen ATTiny2313 verwende, der kein reines SPI, sondern ein USI hat. 
Also habe ich mich durch das Datenblatt gewühlt, um irgendwie das USI 
für SPI zu benutzen. Das Programm hat aber wieder nicht gefunzt und das 
LCD blieb wieder leer.

Hier mal ein paar Zeilen Code:

;SPI initialisieren (temp1 = r16)
ldi  temp1, (0<<USIWM1)|(1<<USIWM0)|(1<<USICS1)|(1<<USICLK)|(1<<USITC)
out  USICR, temp1

.
.
.

;Senden (ausgang = r20)
out  USIDR, ausgang

Der LCD-Controller müsste doch aus dem USIDR die Daten entnehmen oder 
sehe ich das falsch? Nach langem Debuggen bin ich zu dem Schluss 
gekommen, dass die Daten anscheinend nicht gesendet werden.

Nun meine Frage: Was mache ich falsch? Kennt jemand entsprechende 
Routinen?

MfG
Kristian
Gast
Hi

Ich habe mal schnell das Datenblatt überflogen. So wie es aussieht musst 
du dich um den Takt kümmern. Im Datenblatt sind einige 
Programmbeispiele.

MfG Spess
Kristian schrieb:
> Nachdem ich versucht habe 2 verschiedene LCDs manuell mithilfe der
> Timing-Diagramme aus den Datenblättern der jeweiligen LCD-Controller
> anzusteuern und gescheitert bin, habe ich gelesen, dass es über SPI
> gehen müsste.

Wenn etwas nicht geht und Du weißt nicht warum, dann ist es falsch, 
planlos rumzuprobieren.

Umgekehrt wird ein Schuh draus:
Erst wenn es funktioniert, kann man den Code optimieren.


Händisch bist Du deutlich flexibler (Timing, Reihenfolge, Bitanzahl), 
als mit dem SPI.
Du solltest dann aber das Bitmacro SBIT verwenden, das erhöht die 
Lesbarkeit und verringert die Fehlermöglichkeiten drastisch.
Das Bitmacro findest Du in fast jedem Code von mir, z.B.:
http://www.mikrocontroller.net/attachment/30300/lcd_drv.zip


Peter
Gast
Danke für eure schnellen Bemühungen.

Es ist eine verzwickte Sache, weil ich halt nicht weiß, ob es am LCD 
liegt (Anschlüsse) oder halt an der Software. Ich habe mir aber 
verschiedene Tutorials zum LPH7366-1 angeschaut und bin mir auch sehr 
sicher, dass es richtig angeschlossen ist. Aber ich habe keine 
Ansteuerung für den ATtiny gefunden.

MfG
Kristian
Gast
Ich habe jetzt nochmal alle Verbindungen überprüft und das Programm zur 
manuellen Ansteuerung (ohne SPI) im Simulator getestet. Allerdings tut 
sich auf dem Display nix.

Vielleicht seht Ihr ja im angehängten Programm einen Fehler. Da ich mit 
Tabs eingerückt habe, könnte es in einem anderen Editor (verwende AVR 
Studio) etwas durcheinander aussehen.
Angehängte Dateien:
Kristian schrieb:
> Vielleicht seht Ihr ja im angehängten Programm einen Fehler.

Dazu müßte man erstmal das Datenblatt Deine Displays kennen.
Du mußt schon nen Link drauf posten oder das PDF anhängen.

Oftmals brauchen LCDs Wartezeiten (je nach Befehl unterschiedliche!).
Und an das SPI gibts auch minimale Timinganforderungen (Clockdauer, 
Datenhaltezeit usw.).

Vermutlich bist Du einfach viel zu schnell. Du hast da nirgends Delays 
drin und Deinen MC-Takt kennt auch niemand.


Peter
Gast
Das Datenblatt habe ich dummerweise vergessen. Sorry.
http://www.datasheetcatalog.org/datasheet/philips/PCD8544U.pdf

Ich scheine tatsächlich zu schnell zu sein, wenn ich mir die Zeiten so 
anschaue. Ich habe zwar nur einen µC-Takt von 1,8432 MHz aber trotzdem 
werden wohl die Befehle zu schnell ausgeführt. Ich bin es von 
Schieberegistern gewohnt, dass kein Warten notwendig ist ;) Ich werde 
mal entsprechende Delays einbauen. VIELEN DANK FÜR DEN TIPP.
Dieser Satz macht mir allerdings etwas Sorgen:
"Attention should be paid to the possibility that the device may be 
damaged if not properly reset."
Ich kann mir zwar nicht erklären, wieso das Display beschädigt werden 
kann, wenn ich nicht resette, aber vielleicht ist es bei mir schon 
passiert.

Na mal schauen.
Gast
Hi

Der PCD8544 kann 4MHz. Das sollte schon passen.

Was mir aber aufgefallen ist:

Im Datenblatt liegt die positive Taktflanke in Bitmitte. In deinem 
Programm aber die negative.

MfG Spess
Gast
Ich habe meiner Meinung nach schon eine positive Taktflanke während ich 
das Bit sende.
folgendermaßen ist mein Ablauf:
- mit cbi PORTD, DIN bzw. sbi PORTD, DIN lege ich das Bit auf den 
Ausgang
- warten
- mit sbi PORTD, CLK setze ich eine positive Taktflanke
- warten (gesendetes Bit müsste vom LCD-Controller empfangen werden)
- mit cbi PORTD, CLK setze ich eine negative Taktflanke
- warten
- und wieder von vorne

Mein Timing-Diagramm müsste also so aussehen (101 übertragen):

CS  \______________________________/
CLK ____/---\____/---\____/---\____
DIN __/-------\_________/-------\__
Gast
Also ich bin davon ausgegangen, dass es egal ist, ob CS dann wieder 
hochgeht oder nicht, da ich ja nur ein LCD ansteuer. Aber ich habe jetzt 
trotzdem CS am Ende der Ausgabe-Routine wieder auf HIGH gesetzt. Nur 
leider hat es daran auch nicht gelegen.
So langsam könnte man davon ausgehen, dass das LCD defekt ist, aber es 
ist aus einem Handy, das bis zuletzt funktioniert hat. Der Akku ist halt 
nur defekt gewesen.

Aber super, dass sich doch einige mit meinem Problem beschäftigen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.