Ottenimento Gradi giusti dal LM35DZ

  • Tecnica
  • Autore della discussione
  • Visitatori
  • Visitatori
12 Anni 5 Mesi fa #1 da Tecnica
Ottenimento Gradi giusti dal LM35DZ è stato creato da Tecnica
Buongiorno a tutti ho realizzato la lettura della temperatura su display LCD come indicato su manuale di Mauro.
Tutto funziona ma in casa mi segnava una temperatura di ben 43° il che mi sembrava alquanto strano.
Ragiono un po' sul codice e vario rispetto al programma scritto da Mauro questa stringa:

sommatoria = sommatoria >> 1; da cosi' a
cosi' sommatoria=sommatoria >>2; adesso i gradi sono giusti ovvero 21°

Ho sbagliato qualcos'altro io?
Ho c'e' un errore nel manuale?

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

  • Pinna
  • Moderatore
  • Moderatore
Di più
12 Anni 5 Mesi fa #2 da Pinna
Risposta da Pinna al topic Re: Ottenimento Gradi giusti dal LM35DZ
Ciao, partendo dal presupposto che tu stai usando il sensore LM35 o LM35DZ, ti dico in modo molto laconico che hai sbagliato qualcosa tu oppure il sensore è difettoso...

il modello LM35 ha una risoluzione pari a 5V/1024 = 0.0049V corrispondenti a 4,9 mV (1 bit), che approssimiamo a 5 mV per semplificarci i calcoli. Sappiamo anche che 10 mV, ovvero 2 bit, corrispondono ad 1°C. Ora facciamo un esempio e supponiamo di leggere una temperatura di 30°C. Il convertitore leggerà un valore corrispondente a 30*2/1 = 60 bit che, nel main, è la variabile "lettura". Il valore 60 viene letto e sommato per 64 volte, il che significa che alla fine del ciclo avrai, nella variabile sommatoria, un totale corrispondente a 60*64 = 3840 bit. Facendo lo shift a destra per sei volte dividi la variabile sommatoria per 64, cioè 3840/64 = 60 (valore medio dei bit letti). Facendo ancora una volta lo shift a destra ottieni la temperatura media (60/2 = 30°C), dato che, come già detto, ad ogni due bit corrisponde un grado di temperatura.

Non so se sono stato chiaro, in caso contrario fammelo sapere.

Chi vola vale, chi vale vola, chi non vola è un vile

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

  • StefA
  • Moderatore
  • Moderatore
Di più
12 Anni 5 Mesi fa #3 da StefA
Risposta da StefA al topic Re: Ottenimento Gradi giusti dal LM35DZ
io utilizzo un LM35CAZ e l'esempio del libro di Mauro funziona, utilizzo la freedom II con a bordo un PIC18F4550.
Tu che pic usi? I riferimenti di tensione del sensore sono impostati a +5V e 0V?
Al di la del valore sbagliato di temperatura, poi il sensore risponde bene alle variazioni?

Ste

..avevano magari fatto lo sgambetto al ka, ma il sangue restava sempre più denso dell'acqua.. [cit.]

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

  • Tecnica
  • Autore della discussione
  • Visitatori
  • Visitatori
12 Anni 5 Mesi fa - 12 Anni 5 Mesi fa #4 da Tecnica
Risposta da Tecnica al topic Re: Ottenimento Gradi giusti dal LM35DZ
Ciao a tutti allora io utilizzo un p18f2550 e lm35dz come sensore di temperatura, allora ho provato diverse opzioni ma lasciando quella sommatoria >>1 cosi mi da dei gradi che in casa proprio non ho.
Cambiando e facendo >>2 i gradi sono giusti..
Vi posto il codice magari vedete qualcosa che mi sfugge....

Code:
#include <p18f2550.h> #include <LCD_44780.h> #pragma config FOSC = HS #pragma config WDT = OFF #pragma config LVP = OFF #pragma config PBADEN = OFF //OSC = HS Impostato per lavorare ad alta frequenza //WDT = OFF Disabilito il watchdog timer //LVP = OFF Disabilito programmazione LVP //PBADEN = OFF Disabilito gli ingressi analogici void main (void){ // Variabile per salvare la sommatoria dei dati letti unsigned int sommatoria = 0; // Variabile per salvare il valore della conversione int lettura = 0; // Variabile utilizzata per il numero delle letture char i; // Imposto PORTA tutti ingressi TRISA = 0b11111111; // Imposto PORTB tutte uscite TRISB = 0b00000000; // Imposto PORTC tutti ingressi e RC1 come uscita TRISC = 0b11110000; // Inizializzazione LCD OpenLCD (20); BacklightLCD (TURN_ON_LED); WriteStringLCD (" Temp : "); WriteCharLCD (223); WriteCharLCD ('C'); ShiftCursorLCD (LEFT,5); // Abilito AN0 come ingresso analogico // VREF sono impostate a massa e VCC ADCON1= 0b00001110; // Seleziono AN0 come ingresso ADCON0 = 0b00000000; // Imposto i tempi di conversione e giustificazione a destra // TAD : FOSC/4 // TACQ: 16 TAD ADCON2 = 0b10110100; //Abilito ADC ADCON0 |=0b00000001; // Ciclo infinito while (1) { sommatoria = 0; // Effettuo 64 letture per fare una media for (i =0; i<64; i++){ // Avvio la conversione Analogico/Digitale ADCON0bits.GO = 1; // Attendo la fine della conversione while(ADCON0bits.GO); // Prelevo il valore della conversione lettura = (((int) ADRESH) << 8) | ADRESL; // Sommatoria delle letture fatte sommatoria = sommatoria + lettura; } // 6 shift per la media sommatoria = sommatoria >> 6; // 1 shift per avere la temperatura in gradi // divido cioè per 2 sommatoria = sommatoria >> 2; WriteIntLCD (sommatoria,2); ShiftCursorLCD (LEFT,2); // Aspetto 2 secondi delay_ms (2000); } }
Ultima Modifica 12 Anni 5 Mesi fa da Mauro Laurenti.

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

  • Tecnica
  • Autore della discussione
  • Visitatori
  • Visitatori
12 Anni 5 Mesi fa #5 da Tecnica
Risposta da Tecnica al topic Re: Ottenimento Gradi giusti dal LM35DZ
Cortesemente qualcuno mi manda uno schema di collegamento.... che magari sbaglio io... AH comunque si cambia la temperatura se lo metto fuori o lo avvicino al calore

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