Hallo, ich möchte ein Modul via SPI ansteuern. Hab jetzt ewig nach irgendwelchen Headern gesucht. Gibt es eine SPI-Library die ich in mein Projekt einfügen und mit dieser dann gleich Daten Senden/Empfangen kann? Hab bisher nur mit i2c gearbeitet und dabei das fleury lib benutzt. Gibts sowas ähnliches für SPI auf meinem Atmega64. Danke
>Hab jetzt ewig nach >irgendwelchen Headern gesucht. Hättest du ins Datenblatt geschaut wärst du nach 5 Minuten fertig gewesen.
Die Seiten 163-170 vom Datenblatt kann ich schon auswendig. Aber ich brings leider nicht zum laufen.
Bei SPI musst du mit einem Pin wackeln (Clock) und dabei die Daten über MOSI raustackern und über MISO einlesen. Was eine Herausforderung. Klar ohne Lib geht das natürlich gar nicht. Dazu haben die Megas doch sogar HW-SPI soweit ich weiß. Dann wirds noch einfacher. Im Datenblatt steht dazu sogar Beispielcode, fürs Init, fürs Senden und fürs Empfangen. Fehlt nur noch dass ein Atmel Mitarbeiter vorbekommt und einem den Code eintippt. gruß cyblord
Was bringst du nicht zum Laufen? Da sind doch fertige Funktionen abgebildet! OK. Die Senderoutine des Masters wird man sinnvollerweise ein wenig pimpen, so dass sie den Inhalt von SPDR wieder zurückgibt. Das folgt aber unmittelbar aus dem Funktionsprinzip von SPI, bei dem ja eigentlich nicht 'gesendet' wird, sondern Master und Slave tauschen 1 Byte aus, wobei der Master die volle Kontrolle hat und für die Generierung des Taktes verantwortlich ist. D.h. wenn der Master was vom Slave wissen will, dann schickt er ihm erst mal ein Kommandobyte und damit der Slave sein Ergebnisbyte zum Master rüberbringt, muss der Master eben noch ein Dummybyte hinten nach raustakten. Das wichtige an dieser Stelle ist nicht das Dummybyte, sondern dass der Master eine Aktion am SPI laufen lässt, so dass der Slave seinerseits das Byte zurückbringt. (Wenn die Übertragung auf Kommandobytes basiert. Wenn nicht, dann eben nicht. Aber das hängt davon ab, wie der Slave konkret funktioniert). Das, die Initialisierung des Master und eventuelle Sonderdinge die am Slave mit der SS Leitung (oder einer anderen Form von Chip Select) gemacht werden. Mehr ist das nicht.
Eine Fehlerquelle (steht aber im Datenblatt) ist der SS Pin. Den sollte man als CS hernehmen im Master Betrieb. Denn wenn dieser Pin auf Eingang steht UND auf Low gezogen wird (wie auch immer), dann springt dir der Master-Mode raus, und der Controller ist im Slave-Mode. Also in jedem Fall schauen dass der SS-Pin Ausgang ist. Am besten direkt als CS verwenden. gruß cyblord
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.