Home
Accesso / Registrazione
 di 

pilotaggio ADC7680

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

Salve a tutti,
sono alle prese con il pilotaggio di un ADC - l'AD7680, dalla lettura del datasheet ho capito (almeno credo) che per effettuare una lettura ci vogliono 20 cicli di clock....insomma per farvela breve avevo pensato di scrivere un codice di questo tipo (lo riporto qui sotto) per potermi interfacciare (bitbanging)... oppure c'è qualcosa di più "pulito" che posso utilizzare? che cosa ne pensate?

saluti e grazie

Codice funzione di lettura dall'ADC

unsigned short LeggiADC()
{
unsigned short app;

app=0u;

//Abilitiamo l'ADC
SPI_SS_ADC_ON

//i primi 4 bit in uscita sono tutti zero --- Rif. Datasheet
SPI2_SCKw=0; SPI2_SCKw=1;
SPI2_SCKw=0; SPI2_SCKw=1;
SPI2_SCKw=0; SPI2_SCKw=1;
SPI2_SCKw=0; SPI2_SCKw=1;

//pilotiamo il clock e scriviamo i 16 utili

//MSB First
SPI2_SCKw=0; SPI2_SCKw=1; app|=0x8000;
SPI2_SCKw=0; SPI2_SCKw=1; app|=0x4000;
SPI2_SCKw=0; SPI2_SCKw=1; app|=0x2000;
SPI2_SCKw=0; SPI2_SCKw=1; app|=0x1000;

SPI2_SCKw=0; SPI2_SCKw=1; app|=0x800;
SPI2_SCKw=0; SPI2_SCKw=1; app|=0x400;
SPI2_SCKw=0; SPI2_SCKw=1; app|=0x200;
SPI2_SCKw=0; SPI2_SCKw=1; app|=0x100;
//LSB
SPI2_SCKw=0; SPI2_SCKw=1; app|=0x80;
SPI2_SCKw=0; SPI2_SCKw=1; app|=0x40;
SPI2_SCKw=0; SPI2_SCKw=1; app|=0x20;
SPI2_SCKw=0; SPI2_SCKw=1; app|=0x10;

SPI2_SCKw=0; SPI2_SCKw=1; app|=0x08;
SPI2_SCKw=0; SPI2_SCKw=1; app|=0x04;
SPI2_SCKw=0; SPI2_SCKw=1; app|=0x02;
SPI2_SCKw=0; SPI2_SCKw=1; app|=0x01;

//Chiudiamo il sensore
SPI_SS_ADC_OFF

return app;

}

ritratto di Piero Boccadoro
Offline
Titolo: Moderator
Moderatore
Ultima visita:
8 ore 6 min fa
Utente dal: 28/06/2011
Messaggi: 793
Utente PREMIUM
Sul discorso dei cicli di

Sul discorso dei cicli di clock hai capito bene: ne servono 20 per avere un dato valido.
Infatti dice esplicitamente: "A minimum of 20 serial clock cycles are required to perform the conversion process and to access data from the AD7680".

Per quanto riguarda il codice mi sembra abbastanza pulito ma non ho capito l'inizializzazione di app...

ritratto di giazax
Offline
Titolo: User
Utente
Ultima visita:
2 giorni 6 ore fa
Utente dal: 02/10/2012
Messaggi: 8
Utente PREMIUM
pilotaggio ADC

Grazie per le tue osservazioni...per quanto riguarda app è per l'appunto una inzializzazione...perchè dici che è sbagliato?

un saluto

ritratto di Piero Boccadoro
Offline
Titolo: Moderator
Moderatore
Ultima visita:
8 ore 6 min fa
Utente dal: 28/06/2011
Messaggi: 793
Utente PREMIUM
No no, non volevo dire che è

No no, non volevo dire che è sbagliato ma solo capire...
Dunque, la funzione che tu stai scrivendo restituisce app che immagino poi userai nel main assegnando il suo valore ad una variabile.
La mia domanda è: ti è più utile avere una variabile locale o non ti sarebbe più comoda una variabile globale da passare alla funzione per assegnarle un valore nello scope?

Certo, si tratta di una domanda fatta da uno che il tuo codice non lo conosce proprio se non per questa funzione ma era pura curiosità, non una critica :)

ritratto di giazax
Offline
Titolo: User
Utente
Ultima visita:
2 giorni 6 ore fa
Utente dal: 02/10/2012
Messaggi: 8
Utente PREMIUM
pilotaggio adc

Ciao,
premetto che non sono un firmwarista (..l'avrai capito :-) ) so per esperienza che e' meglio non utilizzare variabili globali...sia per questioni di leggibilita' del codice ma anche perche' con le variabili globali e' molto facile incorrere in errori...questo codice fa parte di un codice molto piu' complesso.....non fatto da me tranne che per alcune funzionalita'.....

un saluto
g.

ritratto di Piero Boccadoro
Offline
Titolo: Moderator
Moderatore
Ultima visita:
8 ore 6 min fa
Utente dal: 28/06/2011
Messaggi: 793
Utente PREMIUM
Ah ok, se ti devi "inserire"

Ah ok, se ti devi "inserire" in un codice non tuo allora si :)
Perchè onestamente io cerco di utilizzare, quando possibile, variabili globali per via del fatto che trovo comodo preallocare tutto in memoria ed utilizzare all'occorrenza variabili che non cambino nome e che rischiano di sporcare il codice...
Con questa politica anche riprendere in mano un vecchio programma diventa molto semplice.
Però è sempre una questione di scelte e, forse, anche di abitudine :D

ritratto di divivoma
Offline
Titolo: PowerUser
Utente Power
Ultima visita:
5 ore 11 min fa
Utente dal: 02/03/2011
Messaggi: 208
Non vedo ritardi tra l'alzare

Non vedo ritardi tra l'alzare e abbassare il clock...
Io ci metterei una: delay(T_clk) tra le due funzioni..

 

 

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 2 utenti e 23 visitatori collegati.

Utenti online

Ultimi Commenti