PDA

View Full Version : Termometro digitale 8bit 2 display 7 segmenti + bs2


garbage
05-12-2009, 13:43
salve a tutti, spero di riuscire a spiegare il mio problema.
Il mio progetto è quello di utilizzare un lm35 (sensore di temperatura ) con un convertitore analogico digitale, per poi arrivare al pic che leggerà il valore shifatatogli dentro.
a questo punto con il pic shifto il valore letto in gradi, a un Sipo (74hc/ls164), a sua volta; L'intenzione era quella di collegarli un encoder per display a 7 segmenti, però questi encoder che ho trovato sono tutti a 4bit, esiste un dual encoder a 8bit per pilotare 2 display?
Oppure esiste il modo tramite il pic di spezzare la variabile?, cioè per esempio Il sensore legge 28gradi, io prendo il 2 lo shifto al sipo, poi shifto 8 e a sua volta a un flip flop (dato che i numeri entrerebbero un po in ritardo, cosi li potrei mandare al encoder tutti e 2 contemporaneamente) e poi 2 encoder a 4bit collegati ognuno a un display

Se è possibile spezzare una variabile, qualcuno sa dirmi come si fa in ambiente Basic Stamp 2?
grazie e saluti

Jarni
05-12-2009, 20:03
salve a tutti, spero di riuscire a spiegare il mio problema.
Il mio progetto è quello di utilizzare un lm35 (sensore di temperatura ) con un convertitore analogico digitale, per poi arrivare al pic che leggerà il valore shifatatogli dentro.
a questo punto con il pic shifto il valore letto in gradi, a un Sipo (74hc/ls164), a sua volta; L'intenzione era quella di collegarli un encoder per display a 7 segmenti, però questi encoder che ho trovato sono tutti a 4bit, esiste un dual encoder a 8bit per pilotare 2 display?
Oppure esiste il modo tramite il pic di spezzare la variabile?, cioè per esempio Il sensore legge 28gradi, io prendo il 2 lo shifto al sipo, poi shifto 8 e a sua volta a un flip flop (dato che i numeri entrerebbero un po in ritardo, cosi li potrei mandare al encoder tutti e 2 contemporaneamente) e poi 2 encoder a 4bit collegati ognuno a un display

Se è possibile spezzare una variabile, qualcuno sa dirmi come si fa in ambiente Basic Stamp 2?
grazie e saluti

Multiplexa i due display.
Basta un solo encoder e due transistor.
4 linee per mandare i due dati BCD e 2 per accendere e spegnere il display delle decine e delle unità. I due display sono collegati allo stesso encoder, e i transistor operano sui loro catodi(o anodi) comuni, pilotati da due linee del PIC.

In pratica fau questo:

-mandi l'8 all'encoder
-accendi il display delle decine
-attendi qualche ms
-spegni il display delle decine
-mandi il 2 all'encoder
-accendi il display delle unità
-attendi qualche ms
-spegni il display delle unità
-ricominci da capo

garbage
05-12-2009, 20:12
ciao, grazie mille della risposta, e dell'attenzione
il problema è propio questo, cioè non riesco a dividere questo valore, come posso fare per mandare prima il l'8 poi il 2?

anche perchè il problema è che in binario 28 = 00011100
quindi se io prendo i primi 4 bit non riesco a ottere 2(0010) , e nemmeno se prendo gli altri 4 ottengo 8(1000)!

Jarni
05-12-2009, 20:26
ciao, grazie mille della risposta, e dell'attenzione
il problema è propio questo, cioè non riesco a dividere questo valore, come posso fare per mandare prima il l'8 poi il 2?

anche perchè il problema è che in binario 28 = 00011100
quindi se io prendo i primi 4 bit non riesco a ottere 2(0010) , e nemmeno se prendo gli altri 4 ottengo 8(1000)!

Convertilo in decimale, no?

garbage
05-12-2009, 20:33
Temperatura var byte
Cs con 0
Data_ con 1
Clock_ con 2

high cs

loop:

low cs
shiftin Data_,clock_,msbpost,[temperatura/8]
high cs
pause 500
goto loop

temperatura = in gradi per l'esempio 28 gradi


ora come posso fare? è gia in decimale la temperatura!

Jarni
05-12-2009, 20:52
Temperatura var byte
Cs con 0
Data_ con 1
Clock_ con 2

high cs

loop:

low cs
shiftin Data_,clock_,msbpost,[temperatura/8]
high cs
pause 500
goto loop

temperatura = in gradi per l'esempio 28 gradi


ora come posso fare? è gia in decimale la temperatura!

28 DIV 10 = 2
28 MOD 10 = 8

garbage
05-12-2009, 21:14
28 DIV 10 = 2
28 MOD 10 = 8


:eek: che cosè mod?

Jarni
05-12-2009, 21:45
:eek: che cosè mod?

Eh, vabbé, ma questa è l'ABC della programmazione....
MOD è l'operatore modulo, cioè quello che ti da' il resto di una divisione.
Che linguaggio usi per i PIC?

garbage
05-12-2009, 21:58
Eh, vabbé, ma questa è l'ABC della programmazione....
MOD è l'operatore modulo, cioè quello che ti da' il resto di una divisione.
Che linguaggio usi per i PIC?
purtroppo non ho studiato programmazione... sto facendo per conto mio....

si mi sono appena documentato su wiki pedia,
io come progammazione uso basic stamp 2
conosci percaso come si utilizza in ambiente bs2 questa funzione?

Jarni
05-12-2009, 22:08
purtroppo non ho studiato programmazione... sto facendo per conto mio....

si mi sono appena documentato su wiki pedia,
io come progammazione uso basic stamp 2
conosci percaso come si utilizza in ambiente bs2 questa funzione?

Ci sarà pure un elenco delle istruzioni, da qualche parte.

garbage
05-12-2009, 22:10
Ci sarà pure un elenco delle istruzioni, da qualche parte.

si ho parecchi tutorial al riguardo,anche cartacei, purtroppo però questo mod o è sotto altre voci, o sono orbo io :mc:

Jarni
05-12-2009, 22:19
si ho parecchi tutorial al riguardo,anche cartacei, purtroppo però questo mod o è sotto altre voci, o sono orbo io :mc:

Cerca l'operatore percentuale %.
Nella sintassi C è lui che svolge l'operazione di modulo.

garbage
05-12-2009, 22:25
Cerca l'operatore percentuale %.
Nella sintassi C è lui che svolge l'operazione di modulo.

la % nel bs2 viene utilizzata per assegnare un numero binario a una variabile

Jarni
05-12-2009, 22:29
la % nel bs2 viene utilizzata per assegnare un numero binario a una variabile

Tagliamo la testa al toro:

unità= numero - 10*(numero DIV 10)

Jarni
05-12-2009, 22:33
Trovato.
L'operatore modulo è //. (doppia barra)
http://award.altervista.org/docs/pbasic4dummies210104.pdf
Pagina 11.

garbage
05-12-2009, 22:38
Tagliamo la testa al toro:

unità= numero - 10*(numero DIV 10)

ok grazie mille, allora sulla calcolatrice ovviamente funziona :D , purtroppo una volta che la vado a implementare sulla programmazione, il pic non si comporta come dovrebbero ovvero

con la calcolatrice in modalita programmatore funziona
28 - 10*(28/10) = 8

mentre nelle uscite del pic mi ritrovo 100100=36


edit letto ora ora, provo subito

garbage
05-12-2009, 22:40
Trovato.
L'operatore modulo è //. (doppia barra)
http://award.altervista.org/docs/pbasic4dummies210104.pdf
Pagina 11.

siii grazie milleeeeeee :D funziona:D!!! non so come ringraziarti :D