Go Down

Topic: SPI Arduino Nano Transmission de Données (Read 1 time) previous topic - next topic

clem0613

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

fdufnews


clem0613

Merci mais j'ai compris le mécanisme pour le SPI le problème est que je ne suis pas trop branché programmation j'ai beaucoup de mal. En ce qui concerne le lien envoyé par fdufnews je l'avais déjà vu j'ai regardé les deux programmes mais je ne comprend pas tout, je ne peux donc pas me servir de ce programme pour lien.

Go Up