Rapsberry Pi: SPI con wiringPi

In fase di sviluppo Deprecato In fase di sviluppo

WiringPi mette a disposizione alcune funzioni che semplificano l'uso dell'interfaccia SPI:

Per la documentazione dettagliata di rimanda al sito ufficiale: http://wiringpi.com/reference/spi-library.

Primo esempio

Questo esempio utilizza un convertitore analogico digitale MCP3202 connesso al canale 1 SPI. Il circuito può essere realizzato su breadboard oppure può semplicemente essere utilizzato RPi demo, come mostrato nella fotografia di apertura.

Lo schema è particolarmente semplice:

Schema con il collegamentodi MCP3202 a RPi

Il codice lo trovare a fondo pagina e semplicemente utilizza le due funzione descritte ad inizio pagina.

Di seguito le forme d'onda misurate eseguendo il codice e quanto riportato nei fogli tecnici di MCP3202.

pi@raspberrypi:~ $ ./mcp3201
Data read: 0x00 0x05 0x2d -> 1325 -> 1.067 V

Forme d'onda reali SPI

Forme d'onda SPI riportate nei fogli tecnici

Secondo esempio

A fondo pagina il codice di esempio che utilizza un ADC MAX146. Lo schema è lo stesso già visto, pagina a cui si rimanda per la descrizione dei codici trasmessi e ricevuti

Acquisizione a frequenza costante

Il terzo esempio, sempre relativo al MAX146 mostra come è possibile acquisire una serie di campioni mantenendo una discreta temporizzazione: in pratica, e con molta fantasia, un oscilloscopio digitale. Occorre precisare che Raspbian è lontano dall'essere un sistema operativo real time e quindi le temporizzazioni sono tutt'altro che rigorose. Malgrado questo, il programma manifesta un buon comportamento se sono rispettate due condizioni:

Il codice è costituito da un loop che acquisisce 100 campioni e, al termine li salva nel file di testo voltage.txt. Come test è stato usato un segnale sinusoidale con ampiezza picco-picco di 2 V, valor medio 1 V e frequenza 50 Hz.

Per esaminare graficamente i risultati è stato utilizzato il programma gnuplot, direttamente eseguito su Rpi (nota 2) :

pi@vv-rpi-14:~ $ ./max146

pi@vv-rpi-14:~ $ gnuplot
gnuplot> plot "voltage.txt" w l lt 1

Il grafico con 100 punti acquisitiù

L'unica osservazione è quella relativa al ritardo (nell'esempio pari a 825 µs): tale valore, trovato sperimentalmente, è quello che sommato all'effettivo tempo di acquisizione ed elaborazione, garantisce una frequenza di campionamento mediamente vicina a 1 KHz.

Il codice

Note

  1. L'esempio mostrato era in esecuzione su un Rpi B+ e non ha utilizzato nice
  2. Se state eseguendo il programma in remoto da una macchina Linux usando ssh, per vedere il grafico occorre inserire l'opzione -X per l'inoltro di X11:
    vv@vv-15rse-2:~$ ssh -X pi@192.168.yyy.xxx

Esercizi

  1. Modificare MCP3202.c per leggere la tensione presente sul secondo canale dell'ADC

 

Data di creazione di questa pagina: marzo 2017
Ultima modifica: 31 marzo 2018


Licenza "Creative Commons" - Attribuzione-Condividi allo stesso modo 3.0 Unported


Pagina principaleAccessibilitàNote legaliPosta elettronicaXHTML 1.0 StrictCSS 3

Vai in cima