Forum Italiano sui Prodotti NI

annulla
Visualizzazione dei risultati per 
Cerca invece 
Intendevi dire: 

SPI bidirezionale

Salve a tutti!

Devo far comunicare il PC (con una scheda PCI-6224) con un PIC18F4550 tramite il protocollo SPI. Il bus deve essere bidirezionale, mandare dati è facile... il problema è riceverli!

Premetto che ciò che sto facendo è per lavoro e da pochi mesi c'è stato un passaggio di consegne dal vecchio softwarista che ha cambiato lavoro a me, quindi sto mettendo le mani su codice non scritto da me. Detto questo vi pongo una semplice domanda: come faccio a scrivere e contemporaneamente leggere dati dalle linee IO della scheda?

Il softwarista precedente aveva adottato questa soluzione:
un task di scrittura sul bus e un task di lettura. Il task di scrittura (oltre a generare i segnali di clock e dei dati da mandare al pic) genera un segnale di temporizzazione. Il pin che genera questo segnale è collegato ad un altro pin (configurato come ingresso) della scheda. Il task di lettura viene temporizzato da questo segnale: ad ogni impulso legge un altro pin di ingresso (che è collegato al pin serial out del PIC).

Ora mi chiedo: non è possibile fare in altro modo? Mi sembra tremendamente complicato o meglio macchinoso. Forse perchè non sono ancora entrato in questa filosofia dei task (dal mio punto di vista bizzarra). Mi sembra strano che l'unico modo per leggere una linea a dei dati momenti sia quello di collegare tra di loro due pin in quel modo.


Chiedo lumi e possibilmente una soluzione alternativa a quella adottata, che mi pare poco elegante 🙂

Vi ringrazio!
0 Kudos
Messaggio 1 di 3
3.821Visualizzazioni
Dimenticavo: il linguaggio di programmazione utilizzato è (purtroppo) Visual Basic 6.

Gracias 😉
0 Kudos
Messaggio 2 di 3
3.821Visualizzazioni

Salve Freestyler,

Per quanto riguarda i Task sono sicuro che una volta afferrato il meccanismo ti sarà tutto più chiaro.
La tecnica adottata dal suo ex-collega mi pare assolutamente corretta.
Puo' fare riferimento a questa KB per trovare degli esempi in Visual Basic che l'aiutino a entrare nel meccanismo di creazione e configurazione dei Task.

NI-DAQmx Examples for Visual Basic 6.0

L'unica parte del suo messaggio che mi lascia un po' perplesso e' il collegamento esterno tra il segnale di clock e l'acquisizione.

In linea di principio, se il segnale di clock è prodotto a bordo scheda dovrebbe poter ottenere lo stesso risultato facendo riferimento al corretto piedino PFI.
Faccio un esempio per chiarire, se il segnale di clock è prodotto dal contatore 0 della 6224 il clock out esce su PFI12. Facendo riferimento a dev1/PFI12 come come clock source il pezzo di filo all'esterno dovrebbe essere superfluo.

Cordiali Saluti

FiloP
It doesn't matter how beautiful your theory is, it doesn't matter how smart you are. If it doesn't agree with experiment, it's wrong.
Richard P. Feynman
0 Kudos
Messaggio 3 di 3
3.796Visualizzazioni