Go Down

Topic: SPI schnittstelle in Arduino Mega2560? (Read 1 time) previous topic - next topic

milito

Hallo, habe auf der Arduino Page folgendes zu dem SPI auf dem Board gelesen
siehe : http://arduino.cc/en/Reference/SPI.
Meine Frage ist, so auf den pins 50-53 bei dem Arduino Mega2560 habe ich SPI aber laut der Tabelle auch auf ICSP wären die Anschlüsse MOSI,MISO und SCK vorhanden, heißt es das ich zwei SPI anschlüsse habe oder wie verstehe ich das?
Z.B wenn ich zwei SPI gerät am Arduino anschliessen möchte, könnte ich 1 Gerät an den PINS 50-53 und das andere an den ICSP anschließen?

Doc_Arduino

#1
Apr 01, 2013, 04:29 pm Last Edit: Apr 01, 2013, 04:34 pm by Doc_Arduino Reason: 1
Hallo,

die Pins 50-53 und der ICSP Kontakt ist ein und das selbe. Und Du kannst dennoch soviele Geräte anschließen wie Du möchtest. Funktioniert ähnlich wie der I2C Bus, nur das beim SPI jedes Gerät seinen eigenen ChipSelect Anschluss bekommt. Wird hier als SlaveSelect bezeichnet. Darüber wählst Du Dein Gerät an, der Rest geht über die gemeinsame Datenleitung (MISO bzw. MOSI) und Taktleitung (SCK).

Der ICSP Stiftkontakt ist eher für Shields gedacht damit alles kompatibel bleibt. Ein Shield für Uno, Mega usw. Wenn Du keine Shields nimmst kannste natürlich auch direkt selbst drauf gehen.




Tschau
Doc Arduino

milito

Danke dir, so jetzt bin ich  aber noch etwas verwirrt und zwar du meintest ja der ICSP und SPI (PINS 50-53)wären das Gleiche.
Jetzt meine Frage: ich habe ja den SD Card Reader von LC Studio der über SPI angeschlossen wird und noch einen SPI device den ich auch anschliessen möchte. So, könnte ich also mein SD Card Reader über den ISCP Header(SPI PINS) und das andere SPI - Gerät direkt über die PINS (50-53) gleichzeitig anschliessen ? oder verstehe ich da etwas falsch ?



Doc_Arduino

Hallo,

Du hast keine Shields, wo zum Bsp. die SD Karte über den Pin 4 angesprochen wird? Slave-Select.

Jedes SPI Device hat einen Chip-Select [CS] bzw. Slave-Select [SS] Anschluss. Bezeichnungen im Datenblatt manchmal verschieden. In der Arduinosprache Slave-Select genannt. An diesen bekommt jedes SPI Device einen Pin vom Arduino für sich. Nimmste je einen freien Digitalpin. Alle anderen Anschlüsse wie Taktleitung, Datenleitung bekommen alle SPI Devices gemeinsam. Denn SS Anschluss vom ICSP bzw. Pin 53 kannste auch mitnutzen. Aber wie geschrieben nur einem SPI Device geben. Würde ich aber erstmal nicht nutzen. Kommt man vielleicht durcheinander.

Es darf nur immer ein Device per CS bzw. SS aktiv sein. High/Low Pegel beachten!

Beim fertigen WiFi Shield wird zum Bsp. Pin 4 für Select SD-Karte verwendet und Pin 10 für Select WiFi. Das wären zum Bsp. zwei SPI Device am SPI Bus. Den Rest bekommen die gemeinsam übern ICSP.


Tschau
Doc Arduino

milito

Hallo,
also ne shields zum draufsetzen habe ich nicht. Also ich habe nur den obengenannten SD card reader von LC studio , da  benutze ich den Pin 53 für mein chipselect. Das andere SPI gerät, was ich parallel an SPI anschliesse ist ein Device, das ich über dem Arduino ansprechen möchte.
Also meine idee war es die daten die in der SD auszulesen und es dem anderen SPI gerät zu senden.
Deshalb muss ich die beiden geräte parallel an den MISO, MOSI, SCK anschliessen und den CS-PIN jeweils anders belegen.
Stimmt es so jetzt von meiner Logik?



Doc_Arduino


Hallo,
also ne shields zum draufsetzen habe ich nicht. Also ich habe nur den obengenannten SD card reader von LC studio , da  benutze ich den Pin 53 für mein chipselect. Das andere SPI gerät, was ich parallel an SPI anschliesse ist ein Device, das ich über dem Arduino ansprechen möchte.
Also meine idee war es die daten die in der SD auszulesen und es dem anderen SPI gerät zu senden.
Deshalb muss ich die beiden geräte parallel an den MISO, MOSI, SCK anschliessen und den CS-PIN jeweils anders belegen.
Stimmt es so jetzt von meiner Logik?


Genau richtig verstanden.   :)
Den SD Card Reader kannste mit CS an Pin 53 lassen und für das andere Gerät suchste noch einen freien digitalen Pin aus. Davon hat der Mega ja reichlich.
Tschau
Doc Arduino

milito

ok danke dir für deine Geduld. ;)
Mir ist es wichtig , dass ich beide zur gleichen Zeit beide betreiben kann.
Also von SD card auslesen und an SPI - Device senden. (beide laufen ja über SPI).

Doc_Arduino

Hallo,

zeitgleich geht sowieso nicht, da immer nur ein Gerät zur Zeit aktiv sein darf. Wie bei I2C Bus auch. Das spielt aber keine Rolle. Ein µC kann eh nur immer eine Sache machen und dann das nächste. Vielleicht stellst Du Dir das auch nur etwas falsch vor. Du liest bestimmt mittels einer Funktion die Karte aus und willst das mit einer anderen Funktion woanders ausgeben. Genau das funktioniert. Die SD Karten Funktion liest das in eine Variable ein, Deine nächste SPI Funktion gibt diese Variable wieder wo aus. Und weil es im Loop läuft wird das ständig gemacht hintereinander.

Zur Verdeutlichung. Bei Youtube gibts ein Bsp. wo jemand eine SD Karte ausliest und den Text im Terminalfenster ausgibt. Quasi Zeitgleich. Das erfolgt jedoch auch immer nur im Wechsel, lesen in Variable, seriell ausgeben, lesen in Variable, seriell ausgeben ... usw.
Tschau
Doc Arduino

Go Up