Master SPI con MCC (modulo dedicato)

nRF25L01+

In fase di sviluppo In preparazione In fase di sviluppo

In questa pagina viene mostrato come utilizzare SPI in modalità master per collegare una periferica esterna al PIC18 sfruttando il modulo SPI presente nel PIC18(L)F26K42 utilizzando MCC (MPLAB Code Configurator).

In questa pagina non è spiegato cosa è e come si usa il bus SPI. Se serve, qui trovate qualche informazione.

Configurazione del modulo

La configurazione è estremamente semplice e presentata nell'immagine seguente:

Configurazione di SPI

Occorre inoltre impostare in Pin Manager quali pin esterni utilizzare:

Si noti che non è presente il CE (Chip Enable), in quanto non gestito dall'hardware SPI. Occorre utilizzare un pin generico di uscita e gestirlo esplicitamente via software.

Il software

L'uso delle funzioni è particolarmente semplice, attraverso le funzioni SPI1_Exchange8bit() oppure SPI1_Exchange8bitBuffer(). La prima permette di leggere e scrivere contemporaneamente un singolo byte, la seconda un buffer.

Per esempio, il seguente codice legge e scrive due byte, attivando esplicitamente il CE.

CE_SetLow(); // Enable Chip Select (active low)
RX1 = SPI1_Exchange8bit(TX1);
RX2 = SPI1_Exchange8bit(TX2);
CE_SetHigh(); // Disable Chip Select (active low)

Il diagramma temporale corrispondente è mostrato di seguito:

SPI:2 MHz - CPU CLock: 4 MHz

Nel caso specifico il codice è stato eseguito con il clock del processore impostato a 4 MHz (quindi relativamente basso) ed il clock SPI a 2 MHz (quindi relativamente alto). L'effetto è una trasmissione veloce del singolo byte, ma un tempo significativo tra un byte e l'altro: il throughput è piuttosto basso, ben inferiore ai 2 Mbit/s.

Il problema è meno grave aumentando la frequenza del clock del processore (nel diagramma temporale seguente portato a 64 MHz) oppure nel caso di clock SPI inferiore.

SPI:2 MHz - CPU CLock: 64 MHz

Per ottenere la trasmissione degli stessi dati è possibile utilizzare anche il codice seguente, sostanzialmente equivalente:

 dataIn[0] = TX1; // Data to send
dataIn[1] = TX2;
CE_SetLow(); // Enable Chip Select (active low)
SPI1_Exchange8bitBuffer(dataIn, 2, dataOut); // Read and write buffer (2 bytes)
CE_SetHigh(); // Disable Chip Select (active low)

Esercizi

  1. Esaminare il codice contenuto nel file NRF24L01-K42.zip relativo al solo funzionamento dell'interfaccia SPI. L'hardware corrispondente è PIC-WL-Sen oppure PICdemo R2. Quale Modo SPI va impostato? La risposta (0) è nascosta nel datasheet del nRF24L01+


Data di creazione di questa pagina: novembre 2019
Ultima modifica: 11 novembre 2019


Licenza Creative Commons Attribuzione 4.0 Internazionale


Pagina principaleAccessibilitàNote legaliPosta elettronicaXHTML 1.0 StrictCSS 3

Vai in cima