Forum: Mikrocontroller und Digitale Elektronik SPI programmieren wie?


von Tobias Tschech (Gast)


Lesenswert?

Hi@all,

ich bin ein absoluter neuling in sachen microcontroller. Ich versuche 
momentan 3 ATMEGA8515 über SIP zu vernetzen (1 Master 2 Slave). Ich habe 
mich schon durch das ganze Internet gewühlt aber nichts gefunden. Bzw. 
wenn ich was gefunden habe, habe ich es nicht wirklich verstanden. 
Vielleicht könntet ihr mir auf die sprünge helfe. Also was ich bisher 
weiß ist das ich folgende verkabelund machen muss:

MISO(Master) --> MISO(Slave)
MOSI(Master) --> MOSI(Slave)
SCK(Master)  --> SCK(Slave)
PB0(Master)  --> SS(Slave 1)
PB1(Master)  --> SS(Slave 2)

Zudem weiß ich wenn ich an Slave 1 senden will PB0 low sein muss.

So nun hört es aber schon auf mit meinem wissen. Vielleicht kennt jemand 
eine Gute anleitung wie ich jetzt was zu initialisieren habe bzw welche 
funktionen ich benutzen muss.

Schonmal danke für eure hilfe

Tobi

von ... .. (docean) Benutzerseite


Lesenswert?

datenblatt, da müßte für beide eine beispielcode drinstehen

von Uwe N. (ex-aetzer)


Lesenswert?

schau mal hier:
http://www.atmel.com/dyn/products/app_notes.asp?family_id=607

-> "AVR151: Setup and use of the SPI on tinyAVR and megaAVR devices"


Vielleicht helfen die Assembler/ C -Code Beispiele.

Gruss Uwe

von Uwe N. (ex-aetzer)


Lesenswert?

Nachtrag:
Ich seh gerade, die Beispiele sind nur für C. Im DB der Controller 
sollte aber (AFAIK) auch ein Assembler Code-Happen zu finden sein.

von Tobias Tschech (Gast)


Lesenswert?

Hi

schonmal danke für eure Hilfe. Also ich hab vorhin vergessen zu erwähnen 
das ich das ganze in C programmieren will. Der Code im Datenblatt bringt 
mich schonmal etwas weiter nur will ich das der slave noch etwas zurück 
gibt. Wie schaffe ich das?

Tobi

von Uwe N. (ex-aetzer)


Lesenswert?

Du könntst beispielsweise folgendes versuchen:

1. Master wählt den gewünscht Slave
2. Master sagt Slave, was er wissen will (z.B. Zustand PortB am Slave x)
3. Slave legt diese Info im SPI-Senderegister ab
4. Master holt sich diese Info, indem er Dummy-Daten in den Slave taktet 
und dabei den MISO-Pin abfragt.

Gruss Uwe

von aeMKai (Gast)


Lesenswert?

SPI ist wie eine lange Kette (Schieberegister), wenn du auf der einen 
Seite etwas reinschiebst (z.B. 3 Bit), kommt auf der anderen Seite etwas 
raus (dann auch 3 Bit).
Wenn du was vom Slave empfangen willst, musst du es bei diesem ins 
Senderegister schreiben. Dann vom Master was Beliebiges an den Slave 
senden - Hauptsache, du "schiebst was rein". Gleichzeitig sendet der 
Slave dann an den Master. Jetzt musst du nur noch dessen 
Empfangsregister auslesen.

Eine einfache Übersicht findest du hier:
http://www.uni-koblenz.de/~physik/informatik/MCU/SPI.pdf

MfG,

Michael

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.