Home
Accesso / Registrazione
 di 

Implementazione SPI Hardware

6 risposte [Ultimo post]
ritratto di giazax
Offline
Titolo: User
Utente
Ultima visita:
4 giorni 4 ore fa
Utente dal: 02/10/2012
Messaggi: 8
Utente PREMIUM

Salve a tutti,
dovrei interfacciare un pic18f con una scheda della ASD, su cui sono presenti ben tre sensori, il protocollo di comunicazione tra PIC e Scheda è SPI, mentre la "modalità SPI è TBD" (qualcuno può chiarirmi cosa significa esattamente?)...per poter interagire con la scheda ho dei "codici comando" con una descrizione di questo tipo

tipo comando codice comando origine Dati
Lettura sensore T1 0x0a Master nessuno
Risposta lettura sensore T1 0x0a Slave Temperatura

Il mio compilatore è il c18 per poter leggere il dato temperatura devo inviare DUE COMANDI (della libreria c18) uno dopo l'altro (ad esempio utilizzando la writeSWSPI) e poi per leggere il mio dato devo andare a vedere i bit del MISO?

grazie per i vostri suggerimenti

ritratto di Piero Boccadoro
Offline
Titolo: Moderator
Moderatore
Ultima visita:
4 ore 8 min fa
Utente dal: 28/06/2011
Messaggi: 793
Utente PREMIUM
Una domanda: posso sapere

Una domanda: posso sapere dove hai trovato tbd?
Perchè la mia prima reazione sarebbe dirti che vuol dire "To-Be-Defined", visto che si tratta di una sigla standard ISO 639-3...

Le tra righe "tipo comando .... Temperatura" sono testo scritto in una tabella, vero? Potresti postare da dove l'hai presa? Magari così è più facile darti una mano.

ritratto di giazax
Offline
Titolo: User
Utente
Ultima visita:
4 giorni 4 ore fa
Utente dal: 02/10/2012
Messaggi: 8
Utente PREMIUM
hardware spi

salve,
tbd era su un documento...che poi sono un paio di fogli che poi mi e' stato dato.....chiedendo in giro mi e' stato detto che devo usare le funzioni spi del compilatore c18.....e no il bit banging.....quello che non capisco e' che la funzione readspi legge solo un byte...mentre il mol dato e' composto da 4 byte....come faccio a leggerlo con questa funzione? perche' non posso usare il bit banging?

grazie per i suggerimenti

ritratto di Emanuele
Offline
Titolo: Moderator
Moderatore
Ultima visita:
4 ore 50 min fa
Utente dal: 28/07/2007
Messaggi: 1009
Utente PREMIUM
SPI TBD

Il fatto che la SPI sia in modalità TBD lo trovo abbastanza preoccupante in quanto TBD significa appunto ToBeDefined. Per quanto riguarda la SPI se ti metti in modalità master decidi tu cosa fare, ma bisognerebbe capire meglio le specifiche TBD del dispositivo :)

Considera che la SPI in C18 può essere CON o SENZA periferica e che per una verifica dovresti dare anche un'occhiata all'assembler ed infine:

si, puoi usare il bit banging e farti la routine di ricezione a mano (in assembler). Questa ultima potrebbe essere necessaria se il dispositivo utilizza una SPI anomala (forse proprio per queto è TBD???)

ritratto di giazax
Offline
Titolo: User
Utente
Ultima visita:
4 giorni 4 ore fa
Utente dal: 02/10/2012
Messaggi: 8
Utente PREMIUM
spi tbd

...la routine l'ho fatta in c, ma se uso le funzioni della lbreria del c18 potrei utilizzare una cosa del tipo :
writespi(istruzione di lettura sensore)
dato1 = readspi()
dato2 = readspi()
dato3 = readspi()
dato4 = readspi()

poiche il dato in uscita e' di 4 byte, di cui il primo e proprio l'istruzione data, il 2 e il 3 sono i 16 bit della misura, mentre il 4 e il crc calcolato sui primi 3 .....? oppure devo pulire il registro di scorrimento del pic (16f8723)?....oppure non ho capito nulla?

grazie per il tuo aiuto

ritratto di MIMMO_INT.C
Offline
Ultima visita:
1 anno 25 settimane fa
Utente dal: 03/07/2010
Messaggi: 1
Buona sera a tutti! Concordo

Buona sera a tutti!
Concordo con quanto detto da Emanuele. Bisognerebbe conoscere le specifiche della scheda per valutare al meglio le modalità di comunicazione.
Premetto che non ho ancora avuto modo di cimentarmi praticamente con il modulo MSSP dei microcontrollori Microchip.
Posso solo darti alcuni suggerimenti facilmente reperibili in rete.
Quando usi il modulo MSSP in modalità SPI, devi smanettare con quattro registri. Due registri di configurazione:
- SSPCON1 (registro di controllo)
- SSPSTAT (registro di stato)
e altri due registri:
- SSPBUF (buffer register)
- SSPSR (shift register non direttamemte accessibile)
Per far partire la comunicazione con il dispositivo Slave, il Master (il PICmicro in questo caso) deve scrivere un dato fittizio nel registro SSPBUF, in modo da innescare gli impulsi di clock (ovviamente il Master comanda la comunicazione). Ogni colpo di clock corrisponde a un bit trasmesso. Il formato dei dati dipende dalle specifiche dettate da una delle periferiche in gioco.
Un generico dato RICEVUTO dal registro SSPSR (bit a bit), viene copiato nel registro SSPBUF e viene generato un interrupt (il bit SSPIF assume lo stato logico 1). Questo può tornarti utile in qualche modo.
Altra cosa importante: quando l'intero byte viene trasferito nel registro SSPBUF, viene portato a 1 anche il bit BF (Buffer Full). Questo bit bisogna testarlo ognoqualvolta si voglia trasmettere un dato, evitando problemi di "collisione". In pratica, se il buffer è pieno (BF è uguale a 1) non si possono inviare dati DAL master, perché i dati trasmessi transitano anch'essi dal registro SSPBUF. In merito a tale problema, un ulteriore bit si porta a 1 per segnalare il DISASTRO: il bit WCOL (Write COLlision detect). Se WCOL vale 1, viene bloccata la richiesta di trasmissione del dato. WCOL va azzerato via software!
Un'ultima cosa, importantissima! In ricezione, se il buffer presenta dei dati validi, un semplice accesso in lettura a SSPBUF permette automaticamente di azzerare il bit BF, in modo tale da predisporre il modulo MSSP alla successiva ricezione o trasmissione del nuovo dato.
Puoi eseguire tale operazione attraverso un'istruzione simile alla seguente:

temp = SSPBUF; // Leggo dal registro SSPBUF e copio il contenuto
// nella variabile temp.
// Il bit BF viene portato a 0.

La routine per leggere il dato (da te scritta) potrebbe essere corretta (potrebbe!). Bisogna vedere in che modo vengono trasmessi quei 4 byte. Se fosse necessario un intervento in trasmissione da parte del Master per ricevere i 4 byte (magari dopo il primo), allora sarebbe il caso di adottare un accorgimento simile a quello sopra riportato.
Purtroppo non ho mai "giocato" con questi registri e con la libreria spi del C18. Spero comunque di esserti stato di aiuto.
Ti riporto le fonti dalle quali ho reperito le informazioni sopra riportate:

- Pillole di Microcontrollori PIC (Paolo Rognoni - INWARE edizioni)
- SD Card Projects using the PIC Microcontroller (Dogan Ibrahim - Newnes)
- http://ww1.microchip.com/downloads/en/devicedoc/spi.pdf

ritratto di giazax
Offline
Titolo: User
Utente
Ultima visita:
4 giorni 4 ore fa
Utente dal: 02/10/2012
Messaggi: 8
Utente PREMIUM
SPI

Grazie mille, per i tuoi suggerimenti....ho pensato di provare i due modi, sia il bit banging, che il modulo mssp....che postero', e poi ci sono due cose che mi piacerebbe capire, il primo se i due metodi sono equivalenti per quanto riguarda le prestazioni, la seconda riguarda proprio la lettura di 32 bit in uscita...se cioe' basta la lettura in sequenza del buffer per riuscire a catturare tutti i dati che mi servono....non mi resta altro che imlementare le funzioni e fare delle prove....sperando di non fare errori

 

 

Visita il sito EOS-Book con centinaia di progetti ed articoli!

Visita il nuovo sito di EOS-Book
Login   
 Twitter Facebook LinkedIn Youtube Google RSS

Chi è online

Ci sono attualmente 3 utenti e 29 visitatori collegati.

Ultimi Commenti