Ma qui siete abituati a lasciar le discussioni insospese? Avevo postato un codice e nessuno si è degnato di dare un giudizio se fosse corretto o meno. A me ancora non funziona nulla , sull'lcd compare il solo cursore lampeggiante senza alcuna temperatura, una cosa del genere:
Temp: _ °C
In pratica non mi invia i numeri perché ci saranno problemi nella conversione a/d ma non capisco cosa.
Nel caso in cui vi foste dimenticati vi riepilogo sostanzialmente ciò che fa il mio codice sperando in un'illuminazione concreta:
1) Lavoro con un mcu atmel con l'ADC a 10 bit per cui ADLAR = 0 e leggo prima ADCL e poi ADCH
2) L'lm35 mi da 1°C ogni 10mV = 0.01V
3) Utilizzo la Vref interna di 2.56V con un ceramico da 100nF sul pin di AREF
4) Il risultato della conversione è :

Cioè per 1°C ottengo il valore 4 , per 2°C il valore 8 , per 3°C il valore 12 , in pratica ottengo sempre

. Considerando che a me interessa un range compreso tra 0°C e 50°C , il valore massimo che otterrò (per 50°C) sarà ADC = 200. Per cui non supererò mai il valore 256 ed è come se stessi lavorando ad 8bit , quindi è vero che leggo sia ADCL o ADCH ma ADCH sarà sempre vuoto, quindi mi basterà lavorare su ADCL giusto?
5) Setto ADMUX e ADCSRA (scelgo Vref , canale di acquisizione, 10bit ecc ecc..) e MCUCR con la modalità di sleep per l'ADC noise reduction , ma non inizio ancora la conversione (ADSC = 0)
6) Leggo ADCL e ADCH con questa routine:
- Codice: Seleziona tutto
sbi ADCSRA , ADSC
sleep
wait: sbis ADCSRA , ADIF
rjmp wait
in r18 , ADCL
in r19 , ADCH
rjmp convert
7) Vado alla routine convert in cui faccio le seguenti operazioni:
- Faccio 2 shift a destra (divido x 4 in modo da ottenere la temperatura) su r18 (che contiene il risultato di conversione)
- Eseguo la routine di divisione per 10 ad 8 bit che trovate nello scorso post , in modo da ottenere decine ed unità.
- Aggiungo sia alle decine che alle unità 0x30 per convertire in ASCII ed invio al display
Io ancora non capisco cosa c'è che non vada , questi miei ragionamenti non fanno una grinza
