Go Down

Topic: 1 sortie MISO / MOSI avec plusieurs peripheriques ? (Read 1 time) previous topic - next topic

Bonsoir,

je souhaite afficher de la température et enregistrer en meme temps sur une carte SD.

Or, le LCD ET le lecteur de carte utilisent les sorties MISO/MOSI de l'arduino, comment faire pour que les deux utilisent les memes pin ?

al1fch

#1
Dec 11, 2012, 07:37 pm Last Edit: Dec 11, 2012, 07:48 pm by al1fch Reason: 1
les divers 'périphériques' SPI sont tous câblés sur la même groupe MISO MOSI SCLK, la sélection de l'un d'entre eux (un seul à la fois, chacun son tour) se fait par une broche de sélection individuelle.

C'est par exemple le cas du shield Ethernet ou l'embase SD et la puce W5100 sont sur le bus SPI. On active pin10 quand on s'adresse à la puce Ethernet ou pin 4 quand on s'adresse à la carte SD


les divers 'périphériques' SPI sont tous câblés sur la même paire MISO MOSI, la sélection de l'un d'entre eux (un seul à la fois, chacun son tour) se fait par une broche de sélection individuelle.

C'est par exemple le cas du shield Ethernet ou l'embase SD et la puce W5100 sont sur le bus SPI. On active pin10 quand on s'adresse à la puce Ethernet ou pin 4 quand on s'adresse à la carte SD



Et ou se trouve cette broche ?

al1fch

#3
Dec 11, 2012, 07:51 pm Last Edit: Dec 11, 2012, 08:06 pm by al1fch Reason: 1
côté Arduino : là ou tu veux,  sur toute sortie numérique disponible, il suffit de l'indiquer dans le soft.
il faut donc gérer l'état de cette pin (en général la mettre à 0 = état actif, puis s'adresser au périphérique concerné  et enfin la remettre à 1 pour désactiver ce périphérique et s'adresser à un autre sur le bus)

côté périphériques : chacun a une broche d'entrée sélection imposée (appelée CS ou SS)
Sur une carte SD c'est la broche 1


côté Arduino : là ou tu veux,  sur toute sortie numérique disponible, il suffit de l'indiquer dans le soft.
il faut donc gérer l'état de cette pin (en général la mettre à 0 = état actif, puis s'adresser au périphérique concerné  et enfin la remettre à 1 pour désactiver ce périphérique et s'adresser à un autre sur le bus)

côté périphériques : chacun a une broche d'entrée sélection imposée (appelée CS ou SS)
Sur une carte SD c'est la broche 1



Ok, donc rien de physique à effectuer sur l'arduino.

Juste dans le soft :

1. recup de valeurs de température
2. ouverture de la pin du LCD
3. affichage sur LCD
4. fermeture de la pin du LCD

5. ouverture de la pin de la carte sd
6. ecriture de la valeur sur la carte
7. fermeture de la pin de la carte.

8 retour au debut.

al1fch

Quote
Ok, donc rien de physique à effectuer sur l'arduino.

juste à cabler les deux CS sur les pins Arduino choisies et en suite manipuler les pins (haut/bas) pour produire les ouvertures/fermetures LCD ou carte SD


Quote
Ok, donc rien de physique à effectuer sur l'arduino.

juste à cabler les deux CS sur les pins Arduino choisies et en suite manipuler les pins (haut/bas) pour produire les ouvertures/fermetures LCD ou carte SD


Sue la plaque d'essai, j'enfiche les ports miso/mosi sur la meme colonne pour la carte sd et l'ecran lcd ?

al1fch

Oui : les MOSI reliées, les MISO reliées , les SCLK reliées


Bon, testé ce matin, et l'affichage affiche des lignes de caracteres.

qu'appelle t'on gesrer les PIN ? ouverture, fermeture ? une ligne dans le programme ?

Un exemple à me donner ?

Merci

al1fch

#9
Dec 12, 2012, 12:58 pm Last Edit: Dec 12, 2012, 01:34 pm by al1fch Reason: 1
Bingo !!
je découvre à l'instant ton message du forum 'Display' sur le même sujet.
http://arduino.cc/forum/index.php/topic,137071.0.html
Si la question initiale avait été posée comme celà je n'aurai pas fait tout ce baratin sur l'association de périphériques SPI multiples !!!!  :smiley-red:

J'aurai répondu : cabler l'entrée CS de la carte SD à une sortie Arduino réservée exclusivement à cette fonction.
(la carte SD ne s'intéresse à MISO et MOSI et SCLK que quand on la sélectionne, le reste du temps elle est comme 'isolée' du bus SPI)
De la même manière il faudrait que E (Enable) du LCD vienne d'une pin Arduino non partagée avec un autre composant.

Le conflit constaté provient très probablement d'un choix de câblage à revoir. (double usage de la pin 4 ?)
Je reprend le câblage LCD de ton programme 'Température sur LCD' :
Code: [Select]
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
Il ne devrait plus y avoir de conflit si le CS de la carte SD est piloté par la pin 10 disponible(et non la pin 4 qui sert déjà):
Code: [Select]
const int chipSelect = 10;  


j'ai changé la pin 4 du lcd, basculée sur la pin 6, l'ecran fonctionne.

Par contre, j'alimente ma carte sd et l'alime part de la carte sd vers la plaque d'essai. Alimenter la carte sd à partir de la plaque d'essai ne marche pas...

Etrange.  Voila la carte que j'utilise : http://dx.com/p/sd-card-reading-writing-module-for-arduino-deep-blue-142121


j'ai changé la pin 4 du lcd, basculée sur la pin 6, l'ecran fonctionne.

Par contre, j'alimente ma carte sd et l'alime part de la carte sd vers la plaque d'essai. Alimenter la carte sd à partir de la plaque d'essai ne marche pas...

Etrange.  Voila la carte que j'utilise : http://dx.com/p/sd-card-reading-writing-module-for-arduino-deep-blue-142121


Finalement, j'ai changé le cabalge du LCD, acces à la carte ok et affichage ok... le LCD ne doit donc pas avoir besoin de miso/mosi...

Prochaine etape, ecriture des données sur la carte...

Go Up