Vai Indietro   PcTuner Forum > Sezione Hardware > Programmazione PIC
Arcade Registrazione Blogs Regolamento Feedback FAQ Lista Utenti Calendario Segna come Letti

Ultimi 5 blog pubblicati su PcTuner Blog
Data Titolo

Rispondi
 
Strumenti Discussione Modalità Visualizzazione
Vecchio 10-01-2009, 15.30.28   #1
Registered User
 

Iscritto da: 19-12-2008
Messaggi: 28
Feedback: (0)
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
karl90 Non in Linea   Rispondi Citando
Vecchio 10-01-2009, 16.22.41   #2
Chip8110
 

Iscritto da: 10-01-2009
Messaggi: 19
Feedback: (0)
Quote:
Originariamente inviato da karl90 Visualizza Messaggio
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
Ciao!
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
mmottula Non in Linea   Rispondi Citando
Vecchio 10-01-2009, 16.40.46   #3
Registered User
 
L'avatar di  KurtzWeber
 

Iscritto da: 07-01-2009
Messaggi: 59
Feedback: (0)
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 PIC
bye
KurtzWeber Non in Linea   Rispondi Citando
Vecchio 11-01-2009, 14.49.56   #4
Registered User
 

Iscritto da: 19-12-2008
Messaggi: 28
Feedback: (0)
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.
karl90 Non in Linea   Rispondi Citando
Vecchio 11-01-2009, 19.42.19   #5
Registered User
 
L'avatar di  KurtzWeber
 

Iscritto da: 07-01-2009
Messaggi: 59
Feedback: (0)
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
KurtzWeber Non in Linea   Rispondi Citando
Vecchio 11-01-2009, 20.26.15   #6
Registered User
 

Iscritto da: 19-12-2008
Messaggi: 28
Feedback: (0)
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)?
karl90 Non in Linea   Rispondi Citando
Vecchio 13-01-2009, 14.49.58   #7
Chip8110
 

Iscritto da: 10-01-2009
Messaggi: 19
Feedback: (0)
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
mmottula Non in Linea   Rispondi Citando
Vecchio 13-01-2009, 15.06.20   #8
Registered User
 

Iscritto da: 19-12-2008
Messaggi: 28
Feedback: (0)
Quote:
Originariamente inviato da mmottula Visualizza Messaggio
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
Questa formula la si prende dal datasheet giusto? Comunque una volta acquisito il dato 8 bit devo riuscire a convertirlo (tramite pic) nella forma binaria corrispondente al valore di temperatura..giusto?Per poterlo inviare ai decoder
karl90 Non in Linea   Rispondi Citando
Vecchio 13-01-2009, 15.12.33   #9
Chip8110
 

Iscritto da: 10-01-2009
Messaggi: 19
Feedback: (0)
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
mmottula Non in Linea   Rispondi Citando
Vecchio 13-01-2009, 21.14.13   #10
Registered User
 

Iscritto da: 19-12-2008
Messaggi: 28
Feedback: (0)
Pensavo di usare due 74ls47 che ho già usato per creare un contatore a 2 cifre (con 16f84a)...

Ultima Modifica di karl90 : 14-01-2009 16.24.46.
karl90 Non in Linea   Rispondi Citando
Vecchio 14-01-2009, 14.36.18   #11
Registered User
 

Iscritto da: 19-12-2008
Messaggi: 28
Feedback: (0)
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.
karl90 Non in Linea   Rispondi Citando
Vecchio 14-01-2009, 22.45.47   #12
Chip8110
 

Iscritto da: 10-01-2009
Messaggi: 19
Feedback: (0)
Quote:
Originariamente inviato da karl90 Visualizza Messaggio
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?
la formula l'ho trovata su un mio libro di elettronica...Nel datasheet in effetti non l'ho trovata!Dovresti vedere in qualche application note!Cmq fidati che è quella, per tutti gli ADC ad approssimazioni successive paralleli vale la medesima relazione.
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
mmottula Non in Linea   Rispondi Citando
Vecchio 15-01-2009, 21.15.46   #13
Registered User
 

Iscritto da: 19-12-2008
Messaggi: 28
Feedback: (0)
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!!!
karl90 Non in Linea   Rispondi Citando
Vecchio 15-01-2009, 21.37.19   #14
Registered User
 

Iscritto da: 19-12-2008
Messaggi: 28
Feedback: (0)
Allora mi sa che cambio convertitore e uso un ADC0801 anche se ha una sola linea..Il clock lo do tramite pic..cosi come il CS per abilitare l'ADC
karl90 Non in Linea   Rispondi Citando
Vecchio 18-01-2009, 01.42.29   #15
Chip8110
 

Iscritto da: 10-01-2009
Messaggi: 19
Feedback: (0)
Quote:
Originariamente inviato da karl90 Visualizza Messaggio
Allora mi sa che cambio convertitore e uso un ADC0801 anche se ha una sola linea..Il clock lo do tramite pic..cosi come il CS per abilitare l'ADC
Il clock puoi darlo mediante il PIC, nei soli momenti in cui vuoi che avvenga la conversione, oppure lo mandi continuamente mediante un astabile con NE555.La tensione di riferimento Vref è necessaria al convertitore, per stabilire qual'è la sua soglia di funzionamento ovvero qual'è il range di tensione che può convertire.Ovviamente se alimenti il tutto con una tensione di +5Volt ti conviene mettere la Vref a GND, in questo modo hai un range di valori utili di conversione per tensioni d'ingresso che vanno da 0 a circa 5Volt.
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
mmottula Non in Linea   Rispondi Citando
Vecchio 18-01-2009, 14.59.49   #16
Registered User
 

Iscritto da: 19-12-2008
Messaggi: 28
Feedback: (0)
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?
karl90 Non in Linea   Rispondi Citando
Vecchio 18-01-2009, 19.14.29   #17
Chip8110
 

Iscritto da: 10-01-2009
Messaggi: 19
Feedback: (0)
Quote:
Originariamente inviato da karl90 Visualizza Messaggio
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?
Dici bene.. L'ADC0831 è un convertitore seriale!
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
mmottula Non in Linea   Rispondi Citando
Vecchio 18-01-2009, 20.22.04   #18
Registered User
 

Iscritto da: 19-12-2008
Messaggi: 28
Feedback: (0)
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!!
karl90 Non in Linea   Rispondi Citando
Vecchio 18-01-2009, 23.13.25   #19
Chip8110
 

Iscritto da: 10-01-2009
Messaggi: 19
Feedback: (0)
Quote:
Originariamente inviato da karl90 Visualizza Messaggio
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!!
No no..Mi dispiace deluderti ma con quel ciclo non leggi nulla, per il semplice fatto che il dato è seriale, quindi devi sincronizzarti con il clock (vedi datasheet).

Io ti consiglio di procurarti un simulatore e fare delle prove li..oppure fare delle prove pratiche come ti ho già consigliato..
__________________
Mario
mmottula Non in Linea   Rispondi Citando
Vecchio 19-01-2009, 14.49.50   #20
Registered User
 

Iscritto da: 19-12-2008
Messaggi: 28
Feedback: (0)
Quote:
Originariamente inviato da mmottula Visualizza Messaggio
No no..Mi dispiace deluderti ma con quel ciclo non leggi nulla, per il semplice fatto che il dato è seriale, quindi devi sincronizzarti con il clock (vedi datasheet).

Io ti consiglio di procurarti un simulatore e fare delle prove li..oppure fare delle prove pratiche come ti ho già consigliato..
Ah si giusto che stupido..Ho dimenticato la fase più importante
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
karl90 Non in Linea   Rispondi Citando
Rispondi 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

Regole di scrittura
non Puoi inserire messaggi
non Puoi rispondere ai messaggi
non Puoi inviare allegati
non Puoi modificare i tuoi messaggi

codice vB è Attivo
Smilies è Attivo
[IMG] il codice è Attivo
Il codice HTML è Disattivato
Trackbacks are Disattivato
Pingbacks are Disattivato
Refbacks are Disattivato
Vai al Forum


Tutti gli Orari sono GMT +2. Attualmente sono le 01.05.07.


Powered by vBulletin Versione 3.6.12
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0
Copyright © 2010 - Master New Media S.r.l. a socio unico - P.I. 02947530784. Tutti i diritti di proprietà letteraria e artistica sono riservati- Privacy
www.pctuner.net è testata telematica registrata presso il Tribunale di Torino, n. 39 del 07.05.2008, Editore Master New Media S.r.l.