PDA

View Full Version : giroscopio SPI


sunny_day
27-06-2012, 21:38
Ciao a tutti
progettando un sistema di controllo attivo per un aeromodello è giunto il momento di pensare ai sensori..
Il giroscopio che ho prescelto sarebbe SPI oppure I²C, che vorrei utilizzare usando un microcontrollore PIC.
Ora... ho programmato qualche pic finora e di protocolli so poco - nulla e wikipedia non mi chiarisce del tutto le idee..

Qualcuno saprebbe aiutarmi?

Dunque, quel che mi sembra di aver capito e' che (SPI)
1) il gyro e' il mio slave, il micro e' il master
2) il micro da un impulso sul clock, il gyro risponde sul piedino MISO, che col micro posso leggere. Così ho un bit alla volta e quando arriva a 8 passa direttamente al successivo canale (asse nel caso del giroscopio)

Ma... Allora a cosa serve il piedino MOSI?? Ed il CS? mi sembra arabo :mc:

Giusto per farvi capire, il giroscopio e' questo(datasheet inside):

http://it.rs-online.com/web/p/accelerometri/7428666/

Ma secondo voi conviene usare il protocollo I2C o SPI?

hibone
27-06-2012, 22:54
Ciao a tutti
progettando un sistema di controllo attivo per un aeromodello è giunto il momento di pensare ai sensori..
Il giroscopio che ho prescelto sarebbe SPI oppure I²C, che vorrei utilizzare usando un microcontrollore PIC.
Ora... ho programmato qualche pic finora e di protocolli so poco - nulla e wikipedia non mi chiarisce del tutto le idee..

Qualcuno saprebbe aiutarmi?

Dunque, quel che mi sembra di aver capito e' che (SPI)
1) il gyro e' il mio slave, il micro e' il master
2) il micro da un impulso sul clock, il gyro risponde sul piedino MISO, che col micro posso leggere. Così ho un bit alla volta e quando arriva a 8 passa direttamente al successivo canale (asse nel caso del giroscopio)

dipende da come è fatto il pic solitamente.
in linea generale il pic dovrebbe avere un buffer di 8/16 bit per la trasmissione e 8/16 bit per la ricezione.
Il segnale di clock serve per pilotare lo scorrimento dei bit nel buffer.
La fase di lettura e scrittura vengono eseguite "contemporaneamente" ( il bus è sincrono )
Quando usi il device inserisci una word nel buffer, e questa viene trasmessa al device. Per ogni bit trasmesso al device, il master riceve un bit.
Questo significa che per realizzare una lettura del device devi inviare due comandi. Il primo impartisce l'ordine di lettura e durante la sua trasmissione viene ricevuta una word priva di significato che va scartata.
Il secondo comando è un comando fittizio, e durante la sua trasmissione viene ricevuto il valore richiesto.
Questa pratica apparentemente inefficiente serve per il pipelining dei comandi, perché permette di impartire una sequenza di comandi senza soluzione di continuità.

Il segnale cs ad attivare il device.
Il protocollo spi prevede infatti configurazioni multi punto, e quindi un master può gestire più slave. In questo caso i differenti device ignorano i comandi trasmessi sul bus a meno che non ricevano il segnale CS sulla loro porta.

Ma secondo voi conviene usare il protocollo I2C o SPI?

dipende essenzialmente dalla complessità circuitale che puoi permetterti, il numero di master, la quantità di dati che devi trasferire,

i confronti tra i due protocolli li trovi un po ovunque, ad esempio qui:

http://www.byteparadigm.com/kb/article/AA-00255/

!fazz
28-06-2012, 09:53
Ciao a tutti
progettando un sistema di controllo attivo per un aeromodello è giunto il momento di pensare ai sensori..
Il giroscopio che ho prescelto sarebbe SPI oppure I²C, che vorrei utilizzare usando un microcontrollore PIC.
Ora... ho programmato qualche pic finora e di protocolli so poco - nulla e wikipedia non mi chiarisce del tutto le idee..

Qualcuno saprebbe aiutarmi?

Dunque, quel che mi sembra di aver capito e' che (SPI)
1) il gyro e' il mio slave, il micro e' il master
2) il micro da un impulso sul clock, il gyro risponde sul piedino MISO, che col micro posso leggere. Così ho un bit alla volta e quando arriva a 8 passa direttamente al successivo canale (asse nel caso del giroscopio)

Ma... Allora a cosa serve il piedino MOSI?? Ed il CS? mi sembra arabo :mc:

Giusto per farvi capire, il giroscopio e' questo(datasheet inside):

http://it.rs-online.com/web/p/accelerometri/7428666/

Ma secondo voi conviene usare il protocollo I2C o SPI?

occhio che la spi è full duplex
imho ti conviene usare quella è facilissima da usare come interfaccia

la spi è fatta da 4 linee
CS , mosi, miso e clk

clk è il clock un onda quadra emessa dal master (il micro)
cs o chip select è la linea che attiva / disattiva la periferica, è attiva bassa e devi abbassarla quando vuoi parlare con il giroscopio ( serve per configurazioni multislave in cui hai più periferiche collegate in parallelo alla spi, usando cs puoi scegliere quale periferica deve essere attiva in un determinato momento) se il giroscopio è l'unica periferica che parla sulla spi piantala a massa con una resistenza di pulldown
ora vediamo alla parte di comunicazione la spi è una periferica full duplex simmetrico quindi per leggere un byte dalla spi devi scrivere un byte sulla spi, e una volta fatto quello ti troverai il dato letto

devi guardare il datasheet del tuo giroscopio per vedere se implementa un protocollo di comunicazione o meno ma alla fine usare la spi è facilissimo, se non implementa nessun protocollo scrivi qualche byte sulla spi e leggerai i dati dal sensore, non ho mai lavorato con i pic ma alla fine di solito la scrittura sulla spi si limita ad abilitare la periferica e poi scrivere un byte sul registro, controllare il flag di fine trasmissione e recuperare dal registro di lettura il valore,

se hai problemi chiedi pure

sunny_day
28-06-2012, 14:56
Aaaah, ora tutto inizia ad avere senso!

Grazie mille ad entrambi per le spiegazioni!! :D

!fazz
28-06-2012, 15:04
Aaaah, ora tutto inizia ad avere senso!

Grazie mille ad entrambi per le spiegazioni!! :D

di niente se hai problemi con la spi chiedi pure ho messo la notifica al thread non dovrebbe sfuggirmi, comunque calcola che è un interfaccia di una banalità allucinante, ad esempio l'anno scorso l'ho dovuta emulare completamente via sw a causa di un errore di progettazione (un modulo che non rilasciava il cs ) e non ha fatto una piega, un lavoretto di mezzora