Vai al contenuto
PLC Forum


Stranezza Valore Analogico Pic


Edge

Messaggi consigliati

Ho un sensore di temperatura LM35DZ con cui visualizzo su un display LCD 16x2 il valore della temperatura acquisia con un PIC. Tutto ovviamente funziona correttamente. Il codice è banalissimo e lo riporto di seguito (è scritto in C con programma mikroC):

....

....

unsigned char temperatura;

char txt[4];

unsigned int temp;

unsigned long mV;

ADCON1 = 0x80;

temp = ADC_Read(0); //Acquisisco il valore sul pin RA0

mV=(unsigned long)temp*5000/1024; //L'acquisizione è a 10 bit

temperatura = mV/10; //Trovo i °C in quanto la risoluzione è 10mV/°C

ByteToStr(temperatura,txt);

----> Poi visualizzo txt sul display

Per pura curiosità ho comprato un display grafico (retroilluminazione blu) 240x128 con controller T6963C già incorporato.

Ho solo sostituito il display lcd 16x2 con quello 240x128 (collegandolo opportunamente). Il display grafico funziona correttamente, solo che quando vado a visualizzare il valore analogico della temperatura, questa "oscilla" ripetutamente, nel senso che il valore letto non è stabile. Supponiamo ad esempio che la temperatura corrente sia di 20°C. Allora il valore letto sullo schermo oscilla continuamente tra 18,19,20,21,22 gradi. Perchè mi capita questo?

Utilizzo lo stesso identico codice di prima. Per visualizzare il dato utilizzo la funzione di libreria che è già fatta per il T6963C. Non ho tempo al momento di crearmene personalmente di nuove per questo display.

Riporto a titolo informativo la funzione di libreria che utilizzo per visualizzare il dato acquisito dal sensore di temperatura:

void T6963C_Write_Char(unsigned char c, unsigned char x, unsigned char y, unsigned char mode);

Per fare delle verifiche di acquisizione, ho utilizzato anche il sensore DS1802 che sfrutta il protocollo OneWire. Siccome tale sensore mi fornisce già una uscita digitale, ho provato a visualizzare la temperatura letta dal sensore sullo schermo. Con il DS1802 funziona correttamente e il valore non oscilla per niente. Questa prova l'ho voluta fare per vedere se c'era un problema nella funzione (che ho citato sopra) di invio del dato.

Saluti

Link al commento
Condividi su altri siti


In un progetto simile al tuo avevo letto qualcosa a riguardo il fato che il valore oscillasse a causa della conversione A/D e quindi il trucco stava nel campionare diversi valori e fare la media.........cioè per esempio acquisendo 10 volte al secondo l'analogica , si fa la media dei 10 valori e ogni secondo si aggiorna il display---

Spero di averti dato un consiglio utile.....altrimenti aspetta chi ne sa di più ! Ciao

Link al commento
Condividi su altri siti

In effetti mi è balzato in testa di fare una cosa simile, solo che non capisco perchè se utilizzo l'lcd 16x2 funziona correttamente, mentre con un 240x128 capita questo.

Saluti

Link al commento
Condividi su altri siti

Solo una piccola aggiunta al cosniglio di Tesla leggi 10 scarta min e max e tieni 8 valori così è facile da dividere e hai eliminato gli estremi del range.

Per il problema due sono le cose o la procedura che scrive sul grafico agisce in qualche modo sul convertitore A/D non chiedermi come forse sono pin sulla stessa porta. Se non è troppo complicato potresti evitare la scrittura sul display e inviare al PC tramite seriale il valore letto dall A/D

Hai controllato l'input analogico con e senza il display grafico con un oscilloscopio ? Ci sono cambiament nel segnale di ingresso ?

altra idea il riferimento di tensione è stabile nei due casi ?

Potrebbe esserci qualche problema sull'alimentazione che in un caso è stabile nell'altro no.

più che soluzioni sono idee da verificare

Link al commento
Condividi su altri siti

Talvolta i display hanno un "inverterino" per l'illuminazione... potrebbe essere che il nuovo display disturbi un pò di più rispetto al precedente, e quindi il PIC acquisisce i disturbi , cui però valore medio è 0 , e quindi sono nell'intorno dl valore analogico che stai acquisendo.

Link al commento
Condividi su altri siti

Ciao accacca,

già controllato tutto, sia l'uscita con l'oscilloscopio che il riferimento di tensione (che è stabile). Tutto a posto. Non credo che comunque che ci siano influenze del display sull'analogica anche se in verità non ho controllato. Ad ogni modo il display è collegato SOLO su pin digitali. La scrittura su seriale può essere una idea anche se volevo evitarla. Pensavo di non avere di questi problemi solo cambiando un display.

Saluti

Link al commento
Condividi su altri siti

Se usi come valore di riferimento per A/D la tensione interna derivata dal +5v di alimentazione, il problema sta proprio li. L'inverter di illuminazione del display "sporca" l'alimentazione. Prova a disaccoppiare il +5V del PIC con un LC o CLC (pgreco), Se le masse son fatte bene dovresti elimiare il problema. Oppure potresti usare un riferimento esterno stabile e pulito.

Dimenticavo, anche l'alimentazione del sensore analogico deve essere filtrata e pulita.

Modificato: da Livio Orsini
Link al commento
Condividi su altri siti

Caspita, non la sapevo questa cosa! In effetti se il firmware è sempre quello e il sensore sempre quello, il problema è da ricercare nel display. Non pensavo potesse disturbare l'alimentazione. Volendo fare un circuito di prova non sono stato a filtrare l'alimentazione. Proverò subito con un filtro CLC e poi vi saprò dire.

Grazie. Non sapevo proprio dei disturbi della retroilluminazione!

Saluti

Link al commento
Condividi su altri siti

Allora, qui al lavoro sono riuscito a racattare qualcosa da vecchie schede, non molto, ma abbastanza per fare un piccolo filtrino.

Ho trovato una induttanza da 47uH e un paio di condensatori al tantalio da 22uF.

Ho fatto un filtro pigreco sull'alimentazione del PIC. Posso dire che già così il problema si è praticamente risolto. Mentre prima oscillava ripetutamente tra 3/4 valori sia in eccesso che in difetto, ora fa una piccola oscillazione di solo 1 grado. Si tratta solo di settare correttamente il filtro e metterne uno anche per il sensore. Però già così ho visto che il problema si è ben attenuato.

Grazie mille. Sempre bravi. Complimenti.

Saluti

Link al commento
Condividi su altri siti

Perfetto, tutto a posto. Ora tutto funziona correttamente. Ho fatto anche delle prove con altri ingressi analogici e va perfettamente. BENE smile.gif . Molto utile anche la possibilità in Mikroc di convertire immagini .bmp direttamente in codice C per poterle visualizzare su lcd.

Saluti

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...