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.
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).
> 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.
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?
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.
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...
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. "
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.