Forum: Mikrocontroller und Digitale Elektronik SPI Basicproblem


von eh (Gast)


Lesenswert?

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

von holger (Gast)


Lesenswert?

>Hab jetzt ewig nach
>irgendwelchen Headern gesucht.

Hättest du ins Datenblatt geschaut wärst du nach 5 Minuten
fertig gewesen.

von eh (Gast)


Lesenswert?

Die Seiten 163-170 vom Datenblatt kann ich schon auswendig.
Aber ich brings leider nicht zum laufen.

von Cyblord -. (cyblord)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

von Cyblord -. (cyblord)


Lesenswert?

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
Noch kein Account? Hier anmelden.