bus SPI 1 maître et 2 esclaves, comment fait on ?

Bonjour à tous,

Est il possible de connecter 2 périphériques sur le bus SPI de l'Arduino ? :
Un capteur Pression/température (SCP1000)
+
1 mémoire EEPROM (ou 1 mémoire flash) ?

En théorie, je suppose que oui?.

  • Activer le capteur, lire ses données, désactiver le capteur.
  • Activer l'EEPROM, y écrire des données, désactiver l'EEPROM
    Etc?

Mais je suis bloqué à la première étape :

Comment sélectionne t'on l'esclave à qui l'on s'adresse ? :-?

J'ai bien compris qu'il fallait mettre SS à '0'
digitalWrite(SLAVESELECT,LOW);

Mais comment différencie t'on un esclave d'un autre ...matériellement je veux dire... :-?

...si quelqu'un peut m'aider..... ::slight_smile:

hum hum ... ::slight_smile:

Hum, hum....help :-[

Je suppose qu'il faut un autre connecteur pour brancher le 2° esclave...

Quelqu'un l'a t'il fait ?

Je suppose que tu peux envoyé des chaines de caractères (string) dans lesquels certains caractères serviront à identifier les différents "esclaves".

Par exemple tu pourrais envoyer :

At3BsCm4x15.....

A, B, C seraient les identités et "t"voudrais dire à "A" lit la température sur le capteur numéro 3, "B" doit envoyer (s pour send) ses infos au "maitre" et "C" doit bouger le motor stepper 4 de 15 pas dans la direction "x".

Tu peux faire ça avec les pins Rx/Tx, avec l'ISP je suppose que c'est possible.

hum, hum... :-/

Déjà merçi pour cette réponse, mais je ne comprends toujours pas,

J'ai cru comprendre que la sélection de l'esclave se fait par le pin SS, mais autant d'esclaves, autant de pins différents??? c'est çà que je ne comprends pas bien,
DOnc on pourrait définir SS comme étant sur les pins 10 et 5 par exemple ???

Un lien vers les spécifications des périphériques que tu veux utiliser serait pas mal.

le capteur serait par exemple le SCP1000

et une carte SD comme par exemple

::slight_smile:

Salu 'harima2',

est-ce que tu as trouvé une solution pour cette probleme (2 slave devices on one ARDUINO)?.

J'ai exactement le même probleme et j'aimerai the connaitre la solution.

Merice, Hans.

Si tu a deux esclaves, il te faut deux Chip Select (CS ou SS), un pour chaque circuit.

ok, compris. Mais comment puis-je separer les deux esclaves si'ils sont sur le même ARDUINO PIN 10 (SS)? La separation doit être fait dans le code, correct? Et comment? Esc-que il y a une example quelques parts?
Merci pour l'aide,
Hans.

À mon avis tu ne peux pas, il faut une sortie Arduino par esclaves, que tu va mettre à 0 ou à 1 pour choisir tel ou tel composant. Je vois pas trop comment ça peut marcher sinon :-?

Si tu veux, il y a un schéma sur Wikipedia qui explique la topologie du bus et le SPI en général : Serial Peripheral Interface - Wikipedia

Il faut un chip select pour chacun des périphériques. Tous les autres signaux sont partagés.
Pour dialoguer avec un périphériques, tu mets à zéro son chip select, tu fais les transferts lecture/écriture, tu remontes le chip select. Si tu as plusieurs périphériques il ne doit y avoir qu'un seul chip select à zéro à la fois sinon tu auras des conflits sur la ligne MISO.
Le chip select peut être n'importe laquelle des sorties logiques de l'Arduino. La ligne SS n'a une fonction dédiée que si tu utilises le port SPI du processeur dans le mode esclave.

Merci pour vos reponses.

J'ai compris en theorie, mais comment fair en pratique?

J'ai commençé un 'thread' du même topic en anglais:
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1244417398.

A bientôt, Hans.

Je te l'ai dit au dessus :
Tu connectes le chip select d'un esclave (disons SLAVESELECT1) sur une sortie logique (disons la sortie 2).
Tu connectes le chip select du 2eme esclave (disons SLAVESELECT2) sur une autre sortie logique (disons la sortie 3)
Ensuite dans ton code :

digitalWrite(SLAVESELECT1,LOW);
ton code pour transférer les données
digitalWrite(SLAVESELECT1,HIGH);
digitalWrite(SLAVESELECT2,LOW);
ton code pour transférer les données
digitalWrite(SLAVESELECT2,HIGH);