Valore ADC in volt
- Lello Guidi
-
Autore della discussione
- Platino Utente
-
Less
Di più
5 Anni 5 Mesi fa #1
da Lello Guidi
Valore ADC in volt è stato creato da Lello Guidi
Il sorgente è questo:
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
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 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.
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
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
-
Less
Di più
- Messaggi: 1010
- Ringraziamenti ricevuti 107
5 Anni 5 Mesi fa #3
da Pinna
Chi vola vale, chi vale vola, chi non vola è un vile
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
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.
5 Anni 5 Mesi fa #4
da Mauro Laurenti
Risposta da Mauro Laurenti al topic Valore ADC in volt
Ottimo
Saluti,
Mauro
Saluti,
Mauro
Si prega Accesso o Crea un account a partecipare alla conversazione.
- Lello Guidi
-
Autore della discussione
- Platino Utente
-
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
Grazie!
Saluti
Lello
Si prega Accesso o Crea un account a partecipare alla conversazione.
Moderatori: Mauro Laurenti, Pinna, StefA, Matteo Garia
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.
Forum - Ultimi messaggi
-
- progetto can
- da marcelloraja
-
- MODULO GSM SIM900A
- da Mauro Laurenti
-
- Freedom III e compilazioni fallite
- da Mauro Laurenti
-
- Gestione degli errori su comunicazione seriale
- da Mauro Laurenti
-
- Timer0 e interrupt
- da Mauro Laurenti