Go Down

Topic: utilisation de deux "périphériques" avec un carte UNO (Read 478 times) previous topic - next topic

dbrion06

JE ne comprends pas ce que vous faites avec la carte SD.
Si vous choisissez de n'avoir qu'un periphérique SPI, vous avez tout interet à utiliser la patte D10 comme Slave Select(de toutes façons, cette patte est inutilsée dans votre schéma) au lieu de D4
Quote
The communication between the microcontroller and the SD card uses SPI, which takes place on digital pins 11, 12, and 13 (on most Arduino boards) or 50, 51, and 52 (Arduino Mega). Additionally, another pin must be used to select the SD card. This can be the hardware SS pin - pin 10 (on most Arduino boards) or pin 53 (on the Mega) - or another pin specified in the call to SD.begin(). Note that even if you don't use the hardware SS pin, it must be left as an output or the SD library won't work.
Ceci est un extrait de https://www.arduino.cc/en/Reference/SD
(et une particularité des SPI materiels des avr: la patte prévue par le constructeur comme SS doit être utilisée effectivement comme SS ou laissée en sortie))

68tjs

Quote
la patte prévue par le constructeur comme SS doit être utilisée effectivement comme SS ou laissée en sortie
Effectivement si elle est configurée en entrée, selon qu'elle reçoit un 1 ou un 0, le SPI sera maître ou esclave (ou esclave ou maître --> voir la datasheet).
Pour éviter de retrouver le SPI en mode esclave il faut la configurer en sortie, le plus simple est de l'utiliser pour sélectionner un esclave, ce pour quoi elle est prévue.

dbrion06

"le plus simple est de l'utiliser pour sélectionner un esclave,"
Comme la carte SD est le seul esclave de la liste... la solution la plus simple est triviale....

68tjs

Dans le cas où  il n'y a qu'un seul esclave le plus simple serait de positionner  en fixe la pin CS du module esclave.
Il restera sélectionné  en permanence ce qui ne sera pas gênant puisqu'il est seul sur le bus et la pin 10 serait disponible pour un autre usage..

C'est dans cette situation où  la pin 10 (uno) est disponible pour un autre usage qu'il faut qu'elle soit absolument configurée  en sortie si on veut éviter que le SPI du micro passe involontairement en mode esclave.

Quand il reste des pins disponibles autant ne pas jouer avec le feu et l'utiliser pour le SPI.

Samanu

Bonjour,

-Souhaitant fixer la configuration HW avant de m'attaquer au logiciel, j'ai sélectionné la patte 4 sur la base d'exemples existants ( donc sans réfléchir ! ), ayant noté que pour que la bibliothèque SD fonctionne il fallait impérativement déclarer la patte D10 en mode OUTPUT.

- Suite aux échange et au dernier post de 68tjs, je n'arrive pas à comprendre logiquement  pourquoi ne pas utiliser en fait D10 comme liaison SS.  Si j'ai bien compris:
       . C'est la liaison SS de base de la carte UNO ( et je n'aurais qu'un seul périphérique sur le bus SPI, donc un seul esclave).
       . En terme de disponibilité d'E/S  je perd D10 mais je libère D4. Dans le cas SS = D4, D10 ne peut plus être utilisée qu'en sortie, petite restriction ?

dbrion06

"Suite aux échange et au dernier post de 68tjs, je n'arrive pas à comprendre logiquement  pourquoi ne pas utiliser en fait D10 comme liaison SS.  "
C'est ce que je conseille depuis des posts... et votre raisonnement (qui est le mien) est, pour moi, parfaitement valide.
a noter que mettre un arduino en esclave SPI est, si le logiciel ne le supporte pas (et ça n'a vraiment pas l'air de ce que vous voulez faire), extrêmement déroutant.

Samanu

Je ne vois pas dans quel type d'application un arduino peut-être esclave d'un périphérique ( à mettre sur le compte tenu de mon inexpérience), une autre carte arduino ou un périphérique "intelligent" ?

fdufnews

Je ne vois pas dans quel type d'application un arduino peut-être esclave d'un périphérique, une autre carte arduino ou un périphérique "intelligent" ?
On pourrait par exemple envisager un système exigeant un certain niveau de sécurité sur lequel il y aurait 2 maitres redondants qui pourraient prendre le contrôle du bus SPI. Lorsque l'un des 2 prend le contrôle du bus il faut que l'autre devienne esclave pour libérer le bus.

dbrion06

* gammon (demandez à google ou a kwark "gammon arduino SPI" gammon.com.au/spi) fait un très beau cours sur les SPI et un exemple de cours avec 2 arduini.

* Si vous avez un RPi, (qui n'a pas de convertisseur analogique numérique -CAN- , mais deux SPI, une solution pour avoir un CAN à 6 voies est d'utiliser un Arduino et un esclave SPI (avec des fils pas trop longs -10, 20 cm)

* https://www.gotronic.fr/art-afficheur-7-segments-blancs-4-digits-20162.htm est un module commercial, qui est suivant la configuration esclave I2C ou SPI: c'est pratiquement un arduino (même processeur, même chargeur de démarrage) spécialisé... Il est assez populaire chez les amateurs de RPi, car très joli et servant à des tutoriels sur les bus..

Des myriades d'autres idées peuvent jaillir de cerveaux créateurs.

Samanu

- Merci a vous deux d'avoir éclairé ma lanterne, ainsi il est plus facile dans le monde informatique de trouver des exemples ou le maitre peut devenir esclave que dans le notre ...

- Le cours de Nick Gammon me semble très clair et bien illustré, je vais m'y coller.

68tjs

Tu as exactement le même fonctionnement maître ou esclave avec l'I2C.
Dans les exemples de la bibliothèque "Wire"  tu as le cas où un microcontrôleur utilise l'I2C en mode maître pour  pilote un autre microcontrôleur dont l'I2C a été positionné en mode esclave.
Voir les exemples : master_reader, master_writer, slave_reader, slave_writer.

Pour déclarer en maître tu écris simplement Wire.begin()
Pour déclarer en esclave tu imposes une adresse I2C au microcontrôleur en écrivant Wire.begin(xx), xx étant l'adresse définie par le programmeur.

Go Up