Valore ADC in volt

  • Lello Guidi
  • Autore della discussione
  • Platino Utente
  • Platino Utente
Di più
5 Anni 5 Mesi fa #1 da Lello Guidi
Valore ADC in volt è stato creato da Lello Guidi
Il sorgente è questo:
Code:
/*********************** ****************************** * Fontanella v3.0 * * data: 8 dicembree 2019 * descrizione: Lettura del valore di una fotocellula e attivazione * di un rele'¨per 10 secondi se supera la soglia * librerie: Microchip * compilatore: MPLABX IDE v4.01 e XC8 v1.45 * picmicro: PIC12F675 * configurazione: * LDR = GP4/AN3 * LEDv = GP0 Rele * LEDr = GP2 Led giallo * /******************************************************************/ // Configuration Bit Settings #pragma config FOSC = INTRCIO #pragma config WDTE = OFF #pragma config PWRTE = OFF #pragma config MCLRE = OFF #pragma config BOREN = OFF #pragma config CP = OFF #pragma config CPD = OFF #include <xc.h> #define _XTAL_FREQ 4000000 #define LDR GPIObits.GP4 // pin3 AN3 #define Rele GPIObits.GP0 // pin7 #define Led GPIObits.GP2 // pin5 // variabili unsigned int lettura = 0; unsigned int volt = 0; int main(void) { OPTION_REG = 0b00000000; // bit 8 (GPPU) disabilitato) GPIO = 0b00000000; // tutte le uscite a zero WPU = 0b00000000; // Pull-up disabilitati TRISIO = 0b00001000; // GP4/AN3 IN, gli altri OUT ANSEL = 0b00101000; // AN3 ingresso analogico x ADC, Fosc/32 ADCON0 = 0b10001101; // risultato giustificato a Dx, Vref=Vdd, AN3(GP4), ADC abilitato while(1) { __delay_us(20); // delay to GO=1; GO_DONE = 1; // abilito conversione while(GO_DONE); // attesa fine conversione lettura = (unsigned int) ADRESL + ((unsigned int) ADRESH ) <<8; volt = ((lettura * 5)*3)/1000; // parte intera in volt if (volt >= 2){ Led = 0; // led spento Rele = 0; // attivo a 0 se relè a stato solido, altrimenti a 1 for(int i = 0; i <= 10; i++) { __delay_ms(1000); } } Rele = 0; Led = Led^1; __delay_ms(250); } // end while } // end main
Il programma sembra funzionare, ma testandolo con un potenziometro al posto della fotocellula mi sembra che la soglia dei due volt non funzioni.
Il rele si attiva molto prima.
Forse sbaglio nella formula della conversione ADC/volt o il mio tester non è affidabile nella lettura.
La formula della convwrsione l'ho presa da Internet.
Saluti

Lello

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Moderatore
  • Moderatore
Di più
5 Anni 5 Mesi fa #2 da Mauro Laurenti
Risposta da Mauro Laurenti al topic Valore ADC in volt
In effetti la formula non mi sembra corretta.

Devi dividere Vcc che usi per 1023 per determinare il quanto.

poi vedi a quanto equivale 1V, ovvero dividi 1 per il tuo quanto.

Poi dividi il valore di lettura per il valore ottenuto.

Se la tua Vcc è 5V, hai che il quanto è pari a 0,0049.

Per cui in 1V entrano 204 quanti.

quindi:

volt = lettura / 204;

Il risultato è la parte intera in volt.

Saluti,

Mauro
I seguenti utenti hanno detto grazie : Lello Guidi

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • Pinna
  • Moderatore
  • Moderatore
Di più
5 Anni 5 Mesi fa #3 da Pinna
Risposta da Pinna al topic Valore ADC in volt
Ciao Mauro, se mi permetti provo a spiegarglielo io in parole più semplici:

Lello, se il tuo convertitore adc è a 10 bit vuol dire che avrai una risoluzione uguale a 1023 bit ..... applicando una tensione di 5 volt tu potrai misurare per ognuno dei 1023 bit una tensione uguale a 5 volt/1023 = 0,0049 volt... per sapere il numero di questi bit che corrispondono al tuo voltaggio desiderato devi, come dice Mauro, dividere questo voltaggio (nel tuo caso 1 volt) per 0,0049 volt.... e se fai 1 volt/0,0049 otterrai esattamente 204 bit, corrispondenti ad 1 volt....

ricapitolando, per una tensione di 5 volt, adc 10 bit (risoluzione 1023):

tensione in volt minima rilevabile per ogni bit 5 volt/1023 bit = 0,0049 volt
bit corrispondenti per una tensione di 1 volt 1 volt/0,0049 volt = 204 bit
bit corrispondenti per una tensione di 2 volt 2 volt/0,0049 volt = 408 bit
bit corrispondenti per una tensione di 3 volt 3 volt/0,0049 volt = 612 bit

e così via.... è chiaro, Lello? :)


Marcello

Chi vola vale, chi vale vola, chi non vola è un vile
I seguenti utenti hanno detto grazie : Lello Guidi

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Moderatore
  • Moderatore
Di più
5 Anni 5 Mesi fa #4 da Mauro Laurenti
Risposta da Mauro Laurenti al topic Valore ADC in volt
Ottimo

Saluti,

Mauro

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • Lello Guidi
  • Autore della discussione
  • Platino Utente
  • Platino Utente
Di più
5 Anni 5 Mesi fa #5 da Lello Guidi
Risposta da Lello Guidi al topic Valore ADC in volt
Adesso il risultato mi è chiaro e ho finalmente capito come funziona l'ADC.
Grazie!
Saluti

Lello

Si prega Accesso o Crea un account a partecipare alla conversazione.

Moderatori: Mauro LaurentiPinnaStefAMatteo Garia

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Forum - Ultimi messaggi