ePerTutti


Appunti, Tesina di, appunto elettronica

MISURAZIONE DELLA TEMPERATURA - SCHEMA A BLOCCHI, AMPLIFICATORE, TRASMISSIONE DIGITALE, RICEZIONE DIGITALE, CONVERSIONE ADC E TRASMISSIONE DEL DATO

ricerca 1
ricerca 2

MISURAZIONE DELLA TEMPERATURA

Si intende misurare la temperatura di un locale e visualizzare il suo valore su un display a tre cifre con la precisione di C.

Il sensore è un integrato tipo LM35 che alla sua uscita dà 10 mV/ C.

Si ipotizza che la temperatura possa variare tra il minimo di 0 C e 51 C.

Il diplay si trova distante dal punto della misura e pertanto si vuole utilizzare una trasmissione, via doppino telefonico, di dati digitali seriali contenenti il valore numerico della temperatura.



Si utilizza un micro controllore ST6210.





SCHEMA A BLOCCHI

La sonda LM35 dà 10 mV / C pertanto a 51 C avremo una tensione di 510 mV.

Per sfruttare tutta l'escursione dell'ADC cioè da 0 a 5 V per avere una conversione con un numero compreso tra 0 e 255, dovrò amplificare il segnale della sonda di :

A = 5 : 0,51 = 9,804

così da avere a 51 C un byte di conversione contenente 255.

Se trasmetto tale byte in forma seriale e lo ricostruisco in sede di ricezione, basterà dividerlo per il fattore 5 così da ottenere :

255 : 5 = 51 con resto 0 51 : 10 = 5 con resto 1

se invio al diplay in maniera multiplexata il primo resto = 0 per i decimi , secondo resto = 1 per le unità e il risultato = 5 per le decine di gradi, sul display apparirà 51.0 C.

Altro esempio :

Supponiamo che dalla conversione si abbia il numero 138 si avrà :

138 : 5 = 27 con primo resto = 6 27 : 10 = 2 con secondo resto = 7
cifra decine = 2 cifra unità = 7 cifra decimi = 6 cioè sul display avremo 27.6
C

Così per tutti gli altri possibili valori di conversione.


AMPLIFICATORE

Per adattare la tensione della sonda secondo quanto sopra esposto, si usa un operazionale in conurazione non invertente in grado di amplificare 9,804.

Sapendo che A=1+( R8 : (R7+R5)) dovrà essere R7+R5 = 470 : 8,804 = 53,4 Kohm si è pertanto scelto R7 = 22K e R5 un trimmer da 50K così da poterlo regolare per ottenere l'amplificazione desiderata.

Per la taratura si dovrà , con Vin della sonda = 0 V, regolare R4 per azzerare l'uscita sul pin 6 del uA741 mentre con una Vin di 500 mV si regola R5 per una Vout sul pin 6 di 4,9 V.

Per una più accurata taratura ripetere entrambe le regolazioni precedentemente fatte.

TRASMISSIONE DIGITALE

Un metodo semplice per trasmettere dei dati digitali (bit 0/1 di un byte) su una linea bifilare consiste nell'associare allo 0 e all'1 un impulso di tensione o corrente sulla linea di uguale durata T avente però diverso duty-cycle a secondo se rappresenta uno 0 o un 1.

Precisamente un impulso di durata T che rappresenta uno 0 avrà il semiperiodo a livello alto di durata pari 1/4 T mentre l'impulso che rappresenta un 1 avrà il semiperiodo a livello alto di durata pari a 3/4 T come rafurato nel grafico.

Si osservi il FLOW CHART TX e il corrispondente LISTATO TXBYTE.ASM


RICEZIONE DIGITALE

Vediamo ora come ricevere gli impulsi di linea e ricostruire il byte di partenza bit per bit.

Se si campionano gli impulsi in arrivo dopo un tempo pari a ½ T potremo trovare o un livello alto a 1 se l'impulso rappresenta un bit=1 oppure un livello basso 0 se rappresenta un bit=0.

Si osservi il FLOW CHART RX e il corrispondente LISTATO RXBYTE.ASM









FLOW CHART TX :











SCHEMA ELETTRONICO:






CONVERSIONE ADC E TRASMISSIONE DEL DATO


.title 'ADC+tx' ; Titolo del programma

.vers 'ST62E10' ; Microprocessore usato a 8 Mhz

; Setta la porta A

ldi pdir_a,00000001b ;out solo pa0 TX

ldi popt_a,00000001b

ldi port_a,00000001b

; Setta la porta B

ldi pdir_b,00000000b ;tutti input

ldi popt_b,00000001b ;verrà usato solo pb0 come ADC

ldi port_b,00000001b

PROGRAMMA PRINCIPALE

main ldi wdog,255

ldi adcr,00110000b ;abilita A/D ( su pb0)

att    jrr 6,adcr,att ;attende conversione

ld a,addr ;mette in a il valore convertito

res 1,port_a ;sincronismo per l'oscilloscopio

nop ;piccolo ritardo

set 1,port_a ;l'impulso torna alto

ldi wdog,255

ldi x,8 ;numero dei bit da tx

unbit rlc a ;ruota nrl cy il bit 7 del byte

jrnc zero ;se cy=0 salta a zero

jp uno ;se cy=1 salta a uno

zero set 0,port_a ;mette linea=1

ldi w,6 ;resta a 1 per 1/4 T

dec w

dec w

jrnz decw

res 0,port_a ;mette linea=0

ldi w,19 ;resta a 0 per 3/4 T

dew dec w

jrnz dew

jp decx

uno   set 0,port_a ;lineaa=1

ldi w,19 ;resta per 3/4 T

decc dec w

jrnz decc

res 0,port_a ;lineaa=0

ldi w,6 ;resta a 0 per 1/4 T

dec w_

dec w

jrnz decw_

dec x

dec x

jrz ldiw ;se i bit tx sono 8 ritorna

jp unbit ;altrimenti ne prende un altro

ldiw ldi w,35 ;pausa fra byte = circa 2T

duet ldi wdog,255

dec w

jrnz duet

jp main ;altro byte


FLOW CHART RX:



SCHEMA RX+DISPLAY:


.title 'RX+display' ; Titolo del programma

.vers 'ST62E10' ; Microprocessore usato 8 Mhz


aa .def 084h

decimi .def 085h

unita .def 086h

decine .def 087h

resto .def 088h

risul .def 089h

xx .def 08ah


; Setta la porta A

ldi pdir_a,11111111b ;dipsonibili solo pa0,1,2,3 verso CA3161

ldi popt_a,11111111b ; tutti ouput

ldi port_a,11111111b


Setta la porta B

ldi pdir_b,00000111b ;pa0,1,2 output

ldi popt_b,00000111b ;pb3 in rx

ldi port_b,00000111b ; rimanenti non utilizzati conf. input


media add a,resto ;somma il precedente valore con il nuovo

jrnc etic2 ;se non c'è riporto salta

inc risul ;altrimenti incrementa

etic2   ld resto,a

ld a,xx ;verifica se ha eseguito 255 conversioni

jrz etic4 ;se si salta

dec xx ;altrimenti un conversione in meno

ret

etic4 ld a,resto ;arrotonda

cpi a,127

jrc etic3 ;se a é minore salta e continua a sottrarre

inc risul ;altrimenti arrotonda incrementando risultato

etic3 ld a,risul ;valore mediato 255 volte va in a

ldi xx,5

call div

ld a,resto

sla a ;moltiplica per 2

ld decimi,a

ld a,risul

ldi xx,10

call div

cpi a,0

jrnz no0

ldi a,15

no0 ld decine,a

ld a,resto

ld unita,a

clr resto

clr risul

ldi xx,255

ret


div clr w

ldi wdog,255

cp a,xx ;se a< div salta

jrc ok

sub_ sub a,xx ;sottrae x ad a

inc w ;conta quante volte ci sta x in a

ldi wdog,255

cp a,xx

jrnc sub_ ;se a >= salta e continua a sottrarre

ok ld resto,a ;resto UNITA

ld a,w ;risultato

ld risul,a ;DECINE

ret


;DISPLAY


mux ld aa,a

ldi port_b,00001111b ;spegne display

ld a,v

cpi a,0

jrnz uno_

ld a,decimi

ld port_a,a

ldi port_b,0001011b

jp normal

uno_ cpi a,1

jrnz due

ld a,unita

ld port_a,a

ldi port_b,00001101b

jp normal

due ld a,decine

ld port_a,a

ldi port_b,0001110b

ldi v,255

normal  inc v

ld a,aa

ret


;PROGRAMMA PRINCIPALE RX


main clr resto

clr risul

ldi xx,255

main_   ldi wdog,255 ;RICEVE UN BYTE

ldi w,25 ;resta in questo loop fino a che input

testa jrs 3,port_b,main_ ;da alto torna basso e permane + di un T

dec w ;per assicurarsi che sia un nuovo byte

jrnz testa

ldi x,8 ;numero bit da ricevere x confronto

rx ldi wdog,255

jrr 3,port_b,rx

call mux

ldi w,6 ;predispone per la campionatura a 1/2 T

decr dec w

jrnz decr

jrr 3,port_b,zero ;se dopo 1/2 T e` 0 salta

uno set 0,a ;altrimenti setta bit0 di a

dec x ;conta un bit ricevuto

jrz out ;se sono finiti salta

sla a ;altrimenti sposta a sinistra bit0 e prepararesta

jrs    3,port_b,resta ;per il prossimo

jp rx ;se linea =1 resta altrimenti input

out call media

jp main_ ;ricomincia per altro byte

zero res 0,a ;bit0= 0

dec x

jrnz

sla a

jp out ;se sono finiti salta

sla a

sla a ;altrimenti sposta a sinistra e libera x prossimo

jp rx ;ne aspetta un altro


Circuiti stampati PCB.ZIP

Modifiche per temperature di 99 C Circutio correlato:DISPLAY





Privacy

© ePerTutti.com : tutti i diritti riservati
:::::
Condizioni Generali - Invia - Contatta