Comunicazione spi arduino

Comunicazione spi arduino

Comunicazione spi arduino

Arduino mega 2560 rev3

Il Raspberry Pi sarà configurato come master e Arduino come slave. Su Raspberry Pi useremo la libreria WiringPi all’interno di un esempio di codice Cpp. Più specificamente useremo la sottoparte WiringPiSPI della libreria.

Nota che per SPI, normalmente hai un altro filo collegato a CS (Chip Select), o SS (Slave Select). Questo è utile per scegliere con quale slave stai parlando. Qui, dato che abbiamo solo uno slave Arduino, non c’è bisogno di questo filo, la comunicazione funzionerà comunque.

Inoltre, qualcosa a cui prestare davvero attenzione: il Raspberry Pi funziona a 3.3V, mentre Arduino Uno funziona a 5V. Per questo piccolo esempio questo va bene perché il Raspberry Pi imporrà la sua tensione. Ma se decidete di fare qualcosa di più complesso di questo, vi consiglio vivamente di usare un convertitore di livello (3.3V – 5V) per evitare di bruciare alcuni GPIO.

Quando un byte viene ricevuto su SPI, Arduino lo leggerà da SPDR. Dopo averlo elaborato (qui: aggiungendo 10), Arduino imposterà il registro SPDR con il nuovo valore, così il master potrà leggerlo nel prossimo trasferimento SPI.

Esempio di comunicazione arduino spi

SPR1 e SPR0 – Imposta la velocità SPI, 00 è il più veloce (4MHz) 11 è il più lento (250KHz)Questo significa che per scrivere codice per un nuovo dispositivo SPI hai bisogno di notare diverse cose e impostare il SPCR di conseguenza:Una volta che hai il tuo registro di controllo SPI impostato correttamente hai solo bisogno di capire quanto tempo hai bisogno di fare una pausa tra le istruzioni e sei pronto a partire. Ora che hai un’idea di come funziona SPI, diamo un’occhiata ai dettagli del chip EEPROM.Introduzione alla EEPROM seriale

L’AT25HP512 è una EEPROM seriale da 65.536 byte. Supporta le modalità SPI 0 e 3, funziona fino a 10MHz a 5v e può funzionare a velocità inferiori fino a 1.8v. La sua memoria è organizzata come 512 pagine di 128 byte ciascuna. Si possono scrivere solo 128 byte alla volta, ma si possono leggere 1-128 byte alla volta. Il dispositivo offre anche vari gradi di protezione dalla scrittura e un pin di hold, ma non li copriremo in questo tutorial. Il dispositivo è abilitato tirando il pin Chip Select (CS) basso. Le istruzioni sono inviate come codici operativi a 8 bit (opcodes) e sono spostate sul fronte di salita del clock dei dati. La EEPROM impiega circa 10 millisecondi per scrivere una pagina (128 byte) di dati, quindi una pausa di 10ms dovrebbe seguire ogni routine di scrittura EEPROM.Preparare il BreadboardInserire il chip AT25HP512 nel breadboard. Collegare l’alimentazione a 5V e la terra dalla breadboard all’alimentazione a 5V e alla terra del microcontrollore. Collegare i pin 3, 7 e 8 dell’EEPROM a 5v e il pin 4 a terra.

Codice spi arduino

Il bus SPI può sembrare un’interfaccia complessa da padroneggiare, tuttavia con qualche breve studio di questa spiegazione ed esempi pratici diventerete presto un padrone del bus! Per fare questo impareremo la teoria necessaria, e poi la applicheremo controllando una varietà di dispositivi. In questo tutorial le cose saranno tenute il più semplice possibile.

SPI è un acronimo per “Serial Peripheral Interface”. È un bus dati seriale sincrono – i dati possono viaggiare in entrambe le direzioni allo stesso tempo, al contrario (per esempio) del bus I2C che non può farlo. Per permettere la trasmissione sincrona dei dati, il bus SPI usa quattro fili. Sono chiamati:

Utenti Arduino Mega – MISO è 50, MOSI è 51, SCK è 52 e SS è solitamente 53. Se stai usando un Arduino Leonardo, i pin SPI sono sui pin dell’header ICSP. Vedi qui per maggiori informazioni. Puoi controllare uno o più dispositivi con il bus SPI. Per esempio, per un dispositivo il cablaggio sarebbe:

I dati viaggiano avanti e indietro lungo le linee MOSI e MISO tra il nostro Arduino e il dispositivo SPI. Questo può avvenire solo quando la linea SS è impostata su LOW. In altre parole, per comunicare con un particolare dispositivo SPI sul bus, impostiamo la linea SS verso quel dispositivo su LOW, poi comunichiamo con esso, quindi impostiamo nuovamente la linea su HIGH. Se abbiamo due o più dispositivi SPI sul bus, il cablaggio sarebbe simile al seguente:

Arduino spi riceve

Nella pagina precedente ho mostrato come è possibile controllare un Arduino da un Raspberry Pi usando comunicazioni seriali USB (UART). In questo mostro un modo alternativo per comunicare tra un Raspberry Pi e un Arduino utilizzando il protocollo SPI (Serial Peripheral Interface).

SPI è un protocollo seriale, il che significa che i dati vengono inviati un bit alla volta lungo un filo. A differenza del protocollo seriale usato per USB che è asincrono, SPI è sincrono. Utilizza un segnale di clock in modo che tutti i dispositivi possano rimanere sincronizzati ed è full-duplex permettendo il trasferimento di dati in entrambe le direzioni allo stesso tempo. È anche una tecnologia bus, il che significa che si possono aggiungere più dispositivi sulle stesse porte seriali.

SPI è talvolta indicato come una relazione Master, Slave. Questo è ora considerato da molti inappropriato in quanto sta banalizzando la sofferenza degli schiavi sia storicamente che attraverso la schiavitù moderna che colpisce persone vulnerabili in tutto il mondo. Inoltre la terminologia non è sempre corretta.

In questo esempio il Raspberry Pi controllerà il bus di comunicazione, ma usando un Arduino è possibile che sia l’Arduino a dire al Raspberry Pi cosa fare. Il controllo si applica solo al bus e non ai dispositivi.