Gast
#664837
Hallo, wir haben ein Displaymodul von display3000.com. Der Atmega spricht das verbaute Display über SPI an (wahlweise Hard oder Software). Jetzt wollte wir 2 weitere Elemente über SPI anbinden. Nämlich einen DSP und einen MMC-Connector. Leider bereitet uns das SPI einige Probleme und zwar folgendes: Zunächst haben wir die Version mit Software-SPI für das Display verwendet. Hierbei werden zwar die SPI-Ports des Atmega benutzt (also SCLK,Data, etc) jedoch über Funktionen geschaltet. Wir haben dann für die Ansteuerung des DSP Hardware-SPI mit den entsprechenden Voreinstellungen durch Registereinträge konfiguriert und gestartet. Ergebnis: sobald man das SPI Enable Bit setzt geht nichts mehr. Grund: Wahrscheinlich kollidieren die verschiedenen Taktraten. Das Software-SPI läuft nahezu mit vollem Takt während wir für Hardware einen Vorteiler von 128 genommen haben. Also nächster Versuch: Ansteuerung von Display und DSP mit Hardware-SPI. Die Routinen für das Display sind vorhanden, brauchten wir also nicht ändern. Auch hier läuft der Takt nur mit einem Vorteiler von 2. Wir haben dann eigene Routinen geschrieben, die das Hardware-SPI mit unseren gewünschten Einstellungen laden. Diese Routinen werden dann VOR einer Befehlsausgabe zum DSP aufgerufen, anschließend werden wieder die alten SPI-Einstellungen für das Display hergestellt. Ergebnis: Es hängt wieder am SPI-Enable Bit, wird es gesetzt...geht nichts mehr. Auch wenn man vor der Neukonfigurierung alle SPI-Register auf 0 setzt, bleibt der Fehler bestehen. Letzter Versuch: ALLE Header,Funktion usw die mit dem Display zu tun haben entfernt. Auch aus dem Makefile. Dadurch sollte nur noch der Atmega128 angesprochen werden. Umgesetzt wurde SPI über Hardware mit Polling dann EXAKT nach der passenden Atmel-Application-Note (hab die Nummer gerade nicht im Kopf). Es wurden nur die Pins angepasst, die von der Application Note zum Atmega128 etwas verändert sind. Das ganze wurde mit AVR-Studio 4 simuliert und dort lief alles. Man kann schön den Registern zugucken wie sie Bytes in SPDR laden usw... Also alles fix mit Programmers Notepad kompiliert und auf das Board geladen. Ergebnis: Nichts.....mit dem Oszilloskop sieht man daß auf den SPI-Ports tote Hose ist. Ich hab dann noch zum Vergleich in einer while(1) PortD komplett auf High gelegt. Im AVRStudio ebenfalls problemlos simuliert. Wieder kompiliert und runtergeladen. Weder Action auf den SPI-Ports noch ist PortD auf High. Fazit: Sobald ich das SPI-Enable Bit setze scheint sich das ganze System abzuschießen. Obwohl das Bit in den passenden Funktionen fürs Display läuft. Wenn ich ein Programm aufs Board lade, was nichts macht als auf dem Display irgendwas anzuzeigen dann kann ich auf den SPI-Ports auch schön das Clock-Signal, Daten usw mit dem Osca messen bzw. angucken... Weiß jemand Rat?