Bonjour je voudrai faire un simple programme en SPI entre un maître et plusieurs esclaves. Le but étant d'envoyer par la maître plusieurs données ou adresses et les esclaves les reçoivent, or avec le MISO il y aura donc un décalage des données par rapport au MOSI. Je voudrai savoir comment on indique à l'esclave de recevoir les données envoyées par le maître et comme se servir de la patte SS de l'arduino car avec plusieurs esclaves, le maître devra sélectionner un esclave.
Voici les programmes que j'ai pour l'instant avec en premier le maître
#include <SPI.h> //Inclusion de la bibliothèque SPI
#define SS_PIN 10 // definition de la patte SS sur la patte 10 de l'arduino
//char mot[20]; //Variable "mot" de type char 8 bits,initialisé a 20
//const int led13=13; //Variable led sur la pin 13 de type const int, pour allumer une led.
void setup() //Fonction setup / début de l'exécution du programme
{
SPI.begin(); //Configuration du port SPI
Serial.begin(9600); //Configuration du port série
SPI.setClockDivider(SPI_CLOCK_DIV16); //Configuration de l'horloge SPI de fréquence 16MHz
pinMode(10, OUTPUT); //Pin 10, en OUTPUT
pinMode(11, OUTPUT);
pinMode(12, INPUT);
pinMode(13, OUTPUT);
}
void setValue(int value) // Boucle d'écriture SPI
{
digitalWrite(10, LOW); // Ecriture numérique sur la pin 10 en mode LOW donc led éteinte
//byte n = SPI.transfer(0); //On récupère l'octet depuis le CD4021
SPI.transfer(value);
digitalWrite(10, HIGH); //On allume la led sur la pin 10
}
//byte n; // Définition de l'octet n
char c;
void loop() //Fonction loop / éxecution en boucle
{
//Affichage des valeurs/////////////////////////////////////////////////////////
//for (const char * p = "Hello world !\n" ; c = *p; p++) setValue(c);
setValue(0x34);
setValue(0x35);
setValue(0x36);
delay(10); //Tempo de 500 ms
}
Certains lignes de commande en commentaire sont des anciens tests !
Voici maintenant l'esclave...
#include <SPI.h>
//int del=200; //Delay 200 ms
//const int led13=13; //Variable led sur la pin 13 de type const int, pour allumer une led
//char mot[20]; //Variable "mot" de type char 8 bits, initialisé à 20
//int c; //Déclaration de "c" de type int
void setup() //Fonction setup / début de l'exécution du programme
{
pinMode(10, INPUT); //10,SS,OUTPUT
SPI.begin(); //Utilisation du SPI
//Serial.begin(9600);
SPI.setClockDivider(SPI_CLOCK_DIV16);
SPI.setBitOrder(MSBFIRST); //Envoi du MSB
pinMode(11, INPUT);
pinMode(12, OUTPUT);
pinMode(13, INPUT);
}
void setValue(int value) //Boucle d'écriture SPI
{
digitalWrite(10, LOW); //Pas d'écriture sur la pin SS
SPI.transfer(0);
SPI.transfer(value); //Envoi d'une valeur (0~255)
digitalWrite(10, HIGH);
}
byte c;
void loop() //Fonction loop / Execution en boucle
{
delay(10);
}