- Messaggi: 1010
- Ringraziamenti ricevuti 107
Ottenimento Gradi giusti dal LM35DZ
- Tecnica
- Autore della discussione
- 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?
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
-
Less
Di più
12 Anni 5 Mesi fa #2
da Pinna
Chi vola vale, chi vale vola, chi non vola è un vile
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.
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
-
Less
Di più
- Messaggi: 1222
- Ringraziamenti ricevuti 104
12 Anni 5 Mesi fa #3
da StefA
..avevano magari fatto lo sgambetto al ka, ma il sangue restava sempre più denso dell'acqua.. [cit.]
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
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
-
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....
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
-
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 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
-
- Watchdog
- da FABRIZIO
-
- Timer0 e interrupt
- da marcoilgrande
-
- Strana anomalia LT lib module_EEPROM
- da marcoilgrande
-
- Nuova versione Kicad 9
- da Mauro Laurenti
-
- MODULO GSM SIM900A
- da embedded