Forum: Mikrocontroller und Digitale Elektronik SPI Verbindung Display


von Frank (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich bekomme mein 1.8 TFT Display nicht angesteuert nachdem ich den 
Atmega16 durch einen Atmega168 getauscht habe. Ich habe jetzt schon 
etliche Stunden alles mögliche durchgemessen und die Pins, die ich 
tauschen musste durchgegangen, aber bin absolut ratlos.

Den Microcontroller über SPI programmieren kann ich, das habe ich mit 
einer LED getestet. Ansteuern des Displays Fehlanzeige.

Was mich hier stutzig macht ist folgender Satz aus den Datenblatt:

"After each data packet,
the Master will synchronize the Slave by pulling high the Slave Select, 
SS, line.
When configured as a Master, the SPI interface has no automatic control 
of the SS line. This must be handled by user software before 
communication can start. When this is done, writing a byte to the SPI
Data Register starts the SPI clock generator, and the hardware shifts 
the eight bits into the Slave. "

Beim Atmega16 habe ich SS nie in der Software gesetzt, also muss das 
automatisch geschehen? Im Datenblatt steht dann nochmal ein 
Codebeispiel, wo SS auch nicht gesetzt wird.

Eine weitere Änderung ist, dass ich das Display jetzt an einen 2m langen 
abgeschirmeten Kabel angeschlossen habe.

von Arduinoquäler (Gast)


Lesenswert?

Frank schrieb:
> Beim Atmega16 habe ich SS nie in der Software gesetzt, also muss das
> automatisch geschehen? Im Datenblatt steht dann nochmal ein
> Codebeispiel, wo SS auch nicht gesetzt wird.

Aber sicherlich hat irgendein anderer Pin dafür gesorgt dass
der Slave ein CS bekommen hat. Es muss ja nicht der SS sein.

Frank schrieb:
> Eine weitere Änderung ist, dass ich das Display jetzt an einen 2m langen
> abgeschirmeten Kabel angeschlossen habe.

Das wird nur mit viel Glück funktionieren.

Dann noch: Wenn dein Controller mit 5V versorgt wird, prüfe ob
dein Display das auch verträgt (Vcc und LED).

von Noch einer (Gast)


Lesenswert?

> jetzt an einen 2m langen abgeschirmeten Kabel

Zumindest das Problem kommt mit bekannt vor. Mit langsamen Bitbang SPI 
und Tiefpass vor den Eingängen bekommt man es zum laufen.

Erster Schritt: Eine der beiden Änderungen rückgängig machen. Langes 
Kabel an der alten Mega16 Platine oder kurze Drähte an der neuen 
Platine.

von holger (Gast)


Lesenswert?

AVCC und AGND müssen angeschlossen werden:

AVCC is the supply voltage pin for the A/D Converter, PC3:0, and ADC7:6. 
It should be externally connected to VCC,
even if the ADC is not used.

Wieso geht MISO vom Display nicht an MISO vom Atmega?

von Horst (Gast)


Lesenswert?

holger schrieb:
> Wieso geht MISO vom Display nicht an MISO vom Atmega?

Weil das Display nichts sendet.  Dein Programm liest nie Daten aus dem 
Display zurück, dann braucht es auch nie die Datenrichtung 
Slave->Master.

von c-hater (Gast)


Lesenswert?

Frank schrieb:

> Den Microcontroller über SPI programmieren kann ich

Nein, kannst du nicht. Wenn, dann über ISP. Nur mehr oder weniger 
zufällig werden die Pins bei vielen AVRs zwischen ISP und SPI geshared. 
Es hat aber ansonsten rein garnix miteinander zu tun.

> Beim Atmega16 habe ich SS nie in der Software gesetzt, also muss das
> automatisch geschehen?

Ganz sicher nicht. Auch nicht beim Mega16. Bezüglich der SPI-Hardware 
gibt es praktisch keine funktionalen Unterschiede zwischen den 
verschiedenen ATmegas. Nur die Pin-Zuordnungen und die Registeraddressen 
variieren. Bei keinem ATmega passiert mehr automatisch bezüglich des 
SS-Pins als im Datenblatt beschrieben. Bei der Anwendung als Master also 
exakt garnix, höchstens, dass die SPI-Hardware aus der Master-Rolle 
rausgeschossen wird, wenn der Pin als Eingang konfiguriert ist und ein 
Low zu sehen bekommt...

> Im Datenblatt steht dann nochmal ein
> Codebeispiel, wo SS auch nicht gesetzt wird.

Lies' das DB (zumindest den Abschnitt SPI) vollständig und du verstehst, 
was der Beispielcode tut und was er eben nicht tut (insbesondere das 
Handling von SS). Das steht nämlich wirklich explizit da, im Absatz 
direkt vor dem Beispielcode. Womit du dich als stinkendfauler Nichtleser 
des DB und geoutet hast...

von Frank (Gast)


Lesenswert?

c-hater schrieb:
> Ganz sicher nicht. Auch nicht beim Mega16. Bezüglich der SPI-Hardware
> gibt es praktisch keine funktionalen Unterschiede zwischen den
> verschiedenen ATmegas. Nur die Pin-Zuordnungen und die Registeraddressen
> variieren. Bei keinem ATmega passiert mehr automatisch bezüglich des
> SS-Pins als im Datenblatt beschrieben. Bei der Anwendung als Master also
> exakt garnix, höchstens, dass die SPI-Hardware aus der Master-Rolle
> rausgeschossen wird, wenn der Pin als Eingang konfiguriert ist und ein
> Low zu sehen bekommt...

Was ich meinte ist, dass ich den SS angeschlossen habe und im Register 
als Ausgang festgelegt habe.
Ich habe mich aber nie irgendwo im Programm darum gekümmert, den auf LOW 
zu ziehen, um den Slave anzusprechen. Das wurde bisher immer automatisch 
vorgenommen. Es steht aber im DB, dass bevor die Kommunikation gestartet 
werden soll ich das in der Software realisieren soll. Das habe ich nie 
getan.

"When configured as a Master, the SPI interface has no automatic control
of the SS line. This must be handled by user software before
communication can start. When this is done, writing a byte to the SPI
Data Register starts the SPI clock generator, and the hardware shifts
the eight bits into the Slave. "

von Pandur S. (jetztnicht)


Lesenswert?

Allenfalls den Zusatnd des SS mit einem Ozilloskop verifizieren ?

Der uebliche Fehler bei Displayansteuerungen ist das timing nicht nach 
Datenblatt zu implementieren. Das Timing also gegen das Datenblatt 
verifizieren. Auch mit einem Ozilloskop .

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.