Vai al contenuto
PLC Forum


ADC 10bit dspic30f


peppe855

Messaggi consigliati

Buon giorno a tutti, sono qui ancora a chiedere il vostro aiuto, vi spiego:

Sto studiando e provando singolarmente tutte le periferiche del dspic30f6010a il problema riguarda la periferica a/d 10bit in pratica ho settato i registri in modo tale da utilizzare i riferimenti di tensione interni AVdd AVss [0 +5V], pero' quando vado tramite debug a visualizzare il contenuto del buffer li dove è contenuta la conversione cioè il registro ADCBUF0 questo mi restituisce valori esatti fino a che esternamente applico 2.5V segnando correttamente 511, ma se provo ad alzare il voltaggio es. 3V questo mi segna sempre 511.

Eppure dal manuale ( http://ww1.microchip.com/downloads/en/DeviceDoc/70046E.pdf ) pag. 446 dice chiaramente che visualizzando il risultato come integer (cosa che ho fatto settando i bit FORM) dovrei portarmi fino a 1024.

Dal debug il registro ADCBUF0 non muove il bit 10.

Da cosa puo' dipendere??

Vi ringrazio anticipatamente.

Link al commento
Condividi su altri siti


Giusro, allora ho preso un esempio che c'è nel manuale stesso:

int main (void)
{


int ADCValue;

TRISBbits.TRISB13=1; 

ADPCFG = 0xDFFF;

ADCON1 = 0x00E0; /inizio conversione triggerato su contatore interno

ADCON1bits.FORM0=0; / per avere il risultato come spiegato prima

ADCON1bits.FORM1=0;

ADCHS = 0x000D; / connette AN12 al canale 0 

ADCON2 = 0; / in questo modo le tensioni V+ref e V-ref sono quelle interne

ADCON3 = 0x1F02; / dopo aver iniziato il campionamento attende 31 Tad  e inizia la conversione

ADCON1bits.ADON = 1; / attiva l'adc

while (1) // repeat continuously
{
 ADCON1bits.SAMP = 1;

while (!ADCON1bits.DONE); // conversion finita?
 ADCValue = (ADCBUF0)

}

}

 

 

Link al commento
Condividi su altri siti

Piccola nota, sopra ho scritto:

ADCHS = 0x000D; / connette AN12 al canale 0 

l'istruzione è corretta, pero' il commento giusto è che connette AN13 al canale 0.

Link al commento
Condividi su altri siti

Livio ho trovato l'errore! In pratica l'errore era effettivamente nel settaggio dell' ADC in quanto  avevo erroneamente impostato il tempo di campionamento (troppo piccolo), aumentandolo ho correttamente visualizzato le misure.

Adesso ho impostato il tutto per fare le seguenti operazioni:

 - start del campionamento manuale (di due canali in modo contemporaneo);

 - fine campionamento ed inizio conversione (sequenziale) automatica tramite trigger;

 - controllo del bit DONE per capire quando l'acquisizione è terminata;

 

Queste impostazioni mi servono per acquisire in modo contemporaneo le due correnti di fase del mio motore asincrono, nell'ottica di implementare un controllo vettoriale FOC, quello che non ho ben compreso è cio' che dice a pag. 449 in cui spiega le massime velocità di campionamento in base al tipo di configurazione utilizzata, in pratica per quello che vorrei fare io seguendo le immagini dovrei stare sulla quarta riga? 

  

Link al commento
Condividi su altri siti

Scusa, abbi pazienza ma io non conosco nei dettagli il tuo dispositivo e non ho tempo per leggermi il manuale.

Se non vado errato c'è un solo A/D che è multiplexxato sui vari ingressi quindi non puoi leggere 2 canali contemporaneamente.

Se non ricordo male ci dovrebbe essere la possiibilità di avere un interrupt di fine conversione.

Io lancerei la conversione a tempo fisso su interrupt di timer e, sull'interrupt sulla fine della prima conversione, lamcerei la seconda.

Link al commento
Condividi su altri siti

Perfetto, grazie del consiglio! Riguardo il messaggio precedente hai ragione ho preteso una cosa che non esiste è gia' tanto aver trovato tempo per rispondermi quindi chiedo perdono non accadrà piu'. 

Un saluto e ancora grazie per la disponibilità

Link al commento
Condividi su altri siti

Quote

quindi chiedo perdono non accadrà piu'.

 

Ma no via.:smile: la mia non era una reprimenda ma una spiegazione delle difficoltà.

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...