|
|
|
||||||||
| Arcade | Registrazione | Blogs | Regolamento | Feedback | FAQ | Lista Utenti | Calendario | Segna come Letti |
| Ultimi 5 blog pubblicati su PcTuner Blog | ||||||
|
||||||
![]() |
|
|
Strumenti Discussione | Modalità Visualizzazione |
|
|
#1 |
|
Registered User
|
Temperatura su display con PIC 16f84a
Salve a tutti..In vista degli esami di maturità sto pensando di creare un rilevatore di temperatura che comprenda un trasduttore di temperatura analogico, un covertitore A/D ad 8 BIT, un PIC 16f84A, due decoder driver e i due relativi display a 7 segmenti per visualizzare la temperatura... credo di sapere già realizzare lòa parte che comprende la memorizzazione degli 8 bit nel pic (grazie ad un topic di questo forum)...Ma mi sono fermato qui...In quanto non riesco a capire come interpretare i dati raccolti per visualizzarli correttamente sui display...Dovrei trovare una specie di correlazione matematica tra gli 8 bit che ricevo e quelli che devo inviare ai due decoder driver..sono molto confuso..Datemi qualche dritta
|
|
|
|
|
|
#2 | |
|
Chip8110
|
Quote:
Innanzitutto bisogna sapere che sensore usi, e quanti mV dà per ogni °C...Dopodichè ci sono delle librerie belle e fatte che permettono di gestire l'ADC interno del PIC e di pilotare LCD e Diasplay 7 segmenti. Per il momento facci sapere il modello del sensore, per l'ADC ne riparliamo! Ciao |
|
|
|
|
|
|
#3 |
|
Registered User
|
Ciao
concordo, posta uno schema di come hai pensato la parte di controllo temperatura. Se ancora sei nella fase di design io "svecchierei" un po' il progetto passando ad un PIC più recente, utilizzando il suo ADC interno e un bel display LCD 16x2... Se invece ti piace il digitale potresti pensare di adottare un sensore temperatura i2c, magari anche un RTC che ti dia l'ora esatta e visualizzare i dati sempre dopo averli acquisiti da un PICbye |
|
|
|
|
|
#4 |
|
Registered User
|
Grazie per l'attenzione...Comunque pensavo di usare un semplice DS60 che fornisce circa 6 mV per ogni grado celsius..penso sia adatto..Comunque preferisco usare un 16f84a poichè è quello che abbiamo sempre "usato a scuola" (più che altro a casa visto che a scuola non ci fanno fare quasi niente e il prof ne sa meno di me ed io ne so molto poco)..Come convertitore pensavo di usare un ADC0801 che accetta imput analogici da 0 a 5 volt e per questo pensavo di regolare l'amplificazione del segnale di uscita (tramite un semplice amplificatore)del sensore in modo che a fondo scala dia un uscita di circa 5 volt...Penso funzioni cosi... grazie per la pazienza...
Ultima Modifica di karl90 : 11-01-2009 14.55.13. |
|
|
|
|
|
#5 |
|
Registered User
|
ciao
capisco, allora sì ti conviene stare sul PIC che già usate... La sequenza come l'hai descritta va benissimo, il DS60 nelle temperature "ordinarie" ha sta intorno a 1V quindi devi amplificarlo (se vuoi una buona risoluzione) e darlo in pasto all'ADC, quindi PIC. Per la visualizzazione allora stai sui 7 segmenti? bye |
|
|
|
|
|
#6 |
|
Registered User
|
Grazie..Comunque per ora sto sui 7 seg poi forse li cambierò..Comunque il convertitore converte l'analogico in modo proporzionale? per esempio a 3 volt da 0000 0010 e a 3.5 da 0000 0011 (esempio spiccio spiccio)?
|
|
|
|
|
|
#7 |
|
Chip8110
|
Ogni A/D ha una formula fornita dal costruttore, che permette di ricavare la codifica binaria della tensione convertita in ingresso!
__________________In questo caso particolare la formula è la seguente: N=(Vi*2^n)/Vref Quindi collegando a Vref una tensione di 5Volt di riferimento, con una tensione di 3 volt come nel tuo esempio, avresti in uscita su n=8 bit, una codifica... N=(3*256)/5=153.6 che è arrotondato a 154 cioè 10011010 binario e con 3.5 Volt: N= (3.5*256)/5=179 che in binario corrisponde a 10110011 Occhio all'utilizzo di questo convertitore...Nel senso che devi fare attenzione a mandare correttamente mediante il PIC i segnali ci Interrupt Read e Write, altrimenti il convertitore non funzionerà.. Per ulteriori chiarimenti fatti sentire Ciao
Mario
|
|
|
|
|
|
#8 | |
|
Registered User
|
Quote:
|
|
|
|
|
|
|
#9 |
|
Chip8110
|
Si..La formula viene trovata sul datasheet!
__________________Ovviamente dopo aver letto i bit dalla porta del PIC, dovrai implementare una formuletta che ti permetterà di riconvertire il dato in decimale per poi mandarlo ai decoder..ovviamente dipenderà anche dai decoder che usi!! Hai già un'idea??
Mario
|
|
|
|
|
|
#11 |
|
Registered User
|
Oggi mi sono procurato un ADC0804L..Un convertitore ad 8 bit con uscite separate..quindi non su una sola linea..Ma non riesco a capire il datasheets..In particolare non trovo la famosa relazione che mi lega ingresso con il dato convertito...ma con questo tipo di convertitore mi complico la vita?
Ultima Modifica di karl90 : 14-01-2009 15.02.16. |
|
|
|
|
|
#12 | |
|
Chip8110
|
Quote:
Cmq non penso ti sia complicato la vita, visto che l'ADC0801 ed l'ADC0804 sono praticamente identici, cambia solo l'errore di conversione..ma per la tua applicazione entrambi hanno una precisione più che sufficiente!
Mario
|
|
|
|
|
|
|
#13 |
|
Registered User
|
Ciao....Scusa i miei numerosi dubbi ma...A cosa serve la Vref? Devo sempre impostarla come la metà dell'alimentazione o devo in qualche modo tararla? E per il clock, esso lo genero con una rete RC esterna, e devo impostarlo con qualche accorgimento particolare poichè devo interfacciarlo con il pic? Non so, devono essere sincronizzati..Bo..Oppure questo non mi interessa in quanto faccio leggere al pic il dato convertito quando arriva il segnale di fine conversione inviato dall'ADC?Leggevo di qualcuno che dava il clock all ADC tramite pic alzando e abbassando una specifica linea...
EDIT: Mi è venuto un grave dubbio..ovvero se uso questo convertitore mi occupa 8 linee del pic..e a me ne servirebbero altre 8 da inviare ai due decoder!!! |
|
|
|
|
|
#15 | |
|
Chip8110
|
Quote:
Se tu impostassi la Vref a Vdd/2 avresti un range di valori convertibili un pò più ristretto cioè da 2.5 Volt a 5Volt circa. Non è per niente vero che il convertitore ADC0801 dà un dadto d'uscita su una sola linea...Sial l'ADC0801 che l'ADC 0804 hanno un'uscita parallela ad 8 bit come ti ho spiegato in una delle risposte precedenti..L'unico modo per risparmiare sulle porte del PIC è escludere quelche bit di conversione, cioè invece di leggere tutti e gli 8 bit in uscita all'ADC ne leggi magari 7 oppure 6.Ovviamente toglierai i bit meno significativi, perdendo però nella risoluzione..In genere gli ultimi due bit d'uscita del'ADC, sono quelli che variano a fronte di una variazione del segnale analogico in ingresso di qualche decina o centinaia di millivolt, quindi se a te non interessa visualizzare le cifre decimali della temperatura, puoi tranquillamente escluderli.In ogni modo ti conviene fare delle prove pratiche oppure su carta adoperando la formula che ti ho descritto.. Esempio: supponi che i 3,5 volt rappresentino una temperatura di 3,5° N=(3,5*256)/5=179,2 che è arrotondato a 179 cioè 10110011 binario A fronte di una variazione di ingresso pari a 0.1 volt, cioè se in ingresso il sensore ti darà 3.6 volt la codifica d'uscita sarebbe: N=(3,6*256)/5=184 che è arrotondato a 184 cioè 10111000 binario Quindi puoi notare come i bit 0,1,2,3 partendo da sinistra non variano, mentre i bit dal 4 in poi cambiano. Ciò ti sta ad indicare che sono proprio i bit che variano a darti traccia della variazione di 0.1 Volt tra una conversione e l'altra, quindi se a te non interessa visualizzare le cifre dopo la virgola puoi tralasciare tranquillamente quei bit. Prendi questo solo come un esempio per spiegarti un pò come eliminare i bit meno significativi, per le tue esigenze magari sei costretto a togliere uno o massimo due bit.Tutto dipende da quanti valori vuoi visualizzare sul display, cioè se vuoi visualizzare 50 valori, (ES. temperatura da 1 a 50 gradi) hai bisogno di almeno 6 bit , (perchè 2^5 = 32 , 2^6=64), quindi 5 bit sono pochi, te ne servono 6. Dimenticavo..Per i display a 7 segmenti ci sono dei decoder che possono essere pilotati per via seriale, quindi anche il problema dei pin d'uscita può essere risolta così guarda un pò questi http://www.datasheetcatalog.org/data.../MC14499DW.pdf Ci vuole un firmware un pò più articolato, però con due linee del pic risolvi tutto.. Dipende un pò da ciò che vuoi fare.. Fammi sapere..
Mario
|
|
|
|
|
|
|
#16 |
|
Registered User
|
Grazie della risposta...Comunque io mi riferivo all' ADC0831..Nel datasheet esso ha una sola uscita D0...quindi dovrebbe fornire un bit alla volta in sincronia al clock....in questo modo mi toglierei il problema del'esclusione dei bit..Sto dicendo giusto o sto dicendo un pugno di cavolate?
|
|
|
|
|
|
#17 | |
|
Chip8110
|
Quote:
Puoi usarlo tranquillamente per risparmiare un pò pin..Ovviamente devi scrivere un firmware opportuno per la gestione dei dati seriali in ingresso! Buon lavoro
Mario
|
|
|
|
|
|
|
#18 |
|
Registered User
|
Pensavo di fare qualcosa del tipo:
temp=00000000 1: leggi D0 memorizza in w addw temp memorizza in "temp" rotale left temp goto 1 Tutto questo per 8 volte...Alla fine avrei il "temp" con il mio dato convertito completo..e poi devo lavorare su quello per mandarlo ai due decoder!! |
|
|
|
|
|
#19 | |
|
Chip8110
|
Quote:
Io ti consiglio di procurarti un simulatore e fare delle prove li..oppure fare delle prove pratiche come ti ho già consigliato..
Mario
|
|
|
|
|
|
|
#20 | |
|
Registered User
|
Quote:
![]() Dovrei fare: clk basso abilita CS clk alto call aspetta clk basso (dal datasheets vedo un ciclo di clk a vuoto prima dei dati) 1: call aspetta clk alto call aspetta clk basso 2: leggi D0 memorizza in w addw temp rotale left temp goto 1 Cosi dovrebbe funzionare...Ovviamente devo farlo per 8 volte quindi mettero anche un istruzione di decremento e controllo |
|
|
|
|
![]() |
Per le vostre immagini su questo forum potete usare PcTunerUp! Iscriviti gratuitamente alla nostra newsletter. |
| Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 visitatori) | |
| Strumenti Discussione | |
| Modalità Visualizzazione | |
|
|