diff --git a/SPI_M0/SPI_M0_RECEIVE/SPI_M0_RECEIVE.ino b/SPI_M0/SPI_M0_RECEIVE/SPI_M0_RECEIVE.ino index bbf113d..b98569e 100644 --- a/SPI_M0/SPI_M0_RECEIVE/SPI_M0_RECEIVE.ino +++ b/SPI_M0/SPI_M0_RECEIVE/SPI_M0_RECEIVE.ino @@ -5,9 +5,7 @@ SPIClass mySPI (&sercom2, 3, 5, 4, SPI_PAD_0_SCK_3, SERCOM_RX_PAD_1); //digital void setup() { SerialUSB.begin(9600); - - // do this first, for Reasons - mySPI.begin(); + mySPI.begin(); //initiate the SPI communicaton // Assign pins 3, 4, 5 to SERCOM & SERCOM_ALT pinPeripheral(3, PIO_SERCOM_ALT); @@ -18,8 +16,8 @@ void setup() { uint8_t i=0; void loop() { mySPI.beginTransaction(SPISettings(8000000, MSBFIRST, SPI_MODE0)); - int recu = 0; - recu = mySPI.transfer(2); + int recu = 0; //create recu + recu = mySPI.transfer(2); //send and recieve using spi SerialUSB.println(recu); mySPI.endTransaction(); delay(100); diff --git a/SPI_UNO/masterSPI/masterSPI.ino b/SPI_UNO/masterSPI/masterSPI.ino new file mode 100644 index 0000000..8a8810e --- /dev/null +++ b/SPI_UNO/masterSPI/masterSPI.ino @@ -0,0 +1,66 @@ +#include + + void setup (void) + { + Serial.begin (115200); + Serial.println (); + + digitalWrite(SS, HIGH); // ensure SS stays high for now + SPI.begin (); + + // Slow down the master a bit + SPI.setClockDivider(SPI_CLOCK_DIV8); + } // end of setup + + byte transferAndWait (const byte what) + { + byte a = SPI.transfer (what); + delayMicroseconds (20); + return a; + } // end of transferAndWait + + void loop (void) + { + + byte a, b, c, d; + + // enable Slave Select + digitalWrite(SS, LOW); + + transferAndWait ('a'); // add command + transferAndWait (10); + a = transferAndWait (17); + b = transferAndWait (33); + c = transferAndWait (42); + d = transferAndWait (0); + + // disable Slave Select + digitalWrite(SS, HIGH); + + Serial.println ("Adding results:"); + Serial.println (a, DEC); + Serial.println (b, DEC); + Serial.println (c, DEC); + Serial.println (d, DEC); + + // enable Slave Select + digitalWrite(SS, LOW); + + transferAndWait ('s'); // subtract command + transferAndWait (10); + a = transferAndWait (17); + b = transferAndWait (33); + c = transferAndWait (42); + d = transferAndWait (0); + + // disable Slave Select + digitalWrite(SS, HIGH); + + Serial.println ("Subtracting results:"); + Serial.println (a, DEC); + Serial.println (b, DEC); + Serial.println (c, DEC); + Serial.println (d, DEC); + + delay (1000); // 1 second delay + } // end of loop diff --git a/SPI_UNO/slaveSPI/slaveSPI.ino b/SPI_UNO/slaveSPI/slaveSPI.ino new file mode 100644 index 0000000..03d61b0 --- /dev/null +++ b/SPI_UNO/slaveSPI/slaveSPI.ino @@ -0,0 +1,46 @@ +/* + * Pins: -> D10 : SS (Slave Select) + * -> D11 : MOSI (Master Out Slave In) (Communication maitre -> esclave) + * -> D12 : MISO (Master In Slave Out) (Communication esclave -> maitre) + * -> D13 : SCLK (Serial Clock) + * Informations : -> Si la pin SS n'est pas configuré en mode OUTPUT, le périphérique + * sera considéré comme un esclave. + * -> Ici, pas besoin de définir une pin SS car c'est un esclave + * + */ + +// Inclusion des bibliothèques +#include + +//Variables +const int MOSI_PIN = 11; +const int MISO_PIN = 12; +const int SCLK_PIN = 13; + +void setup() +{ + // Configuration des pins du SPI + pinMode(MOSI_PIN,INPUT); + pinMode(MISO_PIN,OUTPUT); + pinMode(SCLK_PIN,INPUT); + + // Initialisation du port série + Serial.begin(9600); + + // Initialisation du bus SPI + SPI.begin(); + SPI.setClockDivider(SPI_CLOCK_DIV4); // Diviseur d'horloge du bus SPI (choisir la fréquence de l'horloge en quart de l'horloge du microcontroleur) + //SPI.setBitOrder(MSBFIRST); // Sens d'envoi des bits (most significant bit first) + //SPI.setDataMode(SPI_MODE0); // Mode de transmission des données (parité ety phase de l'horloge) +} + +void loop() +{ + // Transmettre des informations + byte incomingByte = 0x0; + incomingByte = SPI.transfer(0x0); // se qu'on recois = transfert(ce qu'on transmet) + Serial.println(incomingByte,HEX); + + delay(1000); +} +