Go Down

Topic: bus SPI 1 maître et 2 esclaves, comment fait on ? (Read 1 time) previous topic - next topic

harima2

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..... ::)


harima2

Hum, hum....help  :-[

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

Quelqu'un l'a t'il fait ?

Jean-François

#3
Feb 01, 2009, 07:24 pm Last Edit: Feb 01, 2009, 07:28 pm by jfs Reason: 1
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.
MacBook intel core 2 duo  os X snow Leopard 10.6
 eMac PPc G4  os X Leopard 10.5
powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

harima2

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 ???

Jean-François

#5
Feb 03, 2009, 04:57 pm Last Edit: Feb 03, 2009, 04:58 pm by jfs Reason: 1
Un lien vers les spécifications des périphériques que tu veux utiliser serait pas mal.
MacBook intel core 2 duo  os X snow Leopard 10.6
 eMac PPc G4  os X Leopard 10.5
powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa


HansLoepfe

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.
Dig-IT-all

Vincent

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

HansLoepfe

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.
Dig-IT-all

Vincent

#10
Jun 01, 2009, 06:54 pm Last Edit: Jun 01, 2009, 06:57 pm by Vincent Reason: 1
À 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 : http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus

fdufnews

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.

HansLoepfe

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.
Dig-IT-all

fdufnews

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);

Go Up