ePerTutti
Appunti, Tesina di, appunto elettronica

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

Scrivere la parola
Seleziona una categoria

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 ± 0,2 ° 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