RTX Digitale
© by Vittorio Crapella - i2viuISTRUZIONE PROFESSIONALE
ESERCITAZIONI - PRATICHE - "OPERATORE TELECOMUNICAZIONI"
TRASMISSIONE E RICEZIONE DI UN BYTE CON ST62
TRASMISSIONE DIGITALE SU LINEA BIFILARE:
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 semi periodo a livello alto di durata pari 1/4 T mentre l’impulso che
rappresenta un 1 avrà il semi periodo a livello alto di durata pari a 3/4 T come raffigurato nel grafico.
ESEMPIO CON ST6 - FLOW CHART TX:
SCHEMA TX
RICEZIONE DIGITALE SU LINEA BIFILARE:
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.
SCHEMA RX:
LISTATO RXBYTE
© by Vittorio Crapella - i2viu.title "RXBYTE" ; Titolo del programma
.vers "ST62E10" ; Microprocessore usato
.w_on ; Abilita la memoria a finestre
; 8 Mhz ;vers 31/7/96
;----------------------------------------------------------------------------
;| VARIABILI DEL MICROPROCESSORE
a .def 0ffh ;Registro accumulatore
x .def 080h ;Registro x
y .def 081h ;Registro y
v .def 082h ;Registro v
w .def 083h ;Registro w
port_a .def 0c0h ;Registro Dati porta A
port_b .def 0c1h ;Registro Dati porta B
port_c .def 0c2h ;Registro Dati porta C
pdir_a .def 0c4h ;Registro Direzione porta A
pdir_b .def 0c5h ;Registro Direzione porta B
pdir_c .def 0c6h ;Registro Direzione porta C
popt_a .def 0cch ;Registro Opzioni porta A
popt_b .def 0cdh ;Registro Opzioni porta B
popt_c .def 0ceh ;Registro Opzioni porta C
ior .def 0c8h ;Registro Opzioni per le Interruzioni
addr .def 0d0h ;Registro Dati dell'A/D converter
adcr .def 0d1h ;Registro di Controllo dell'A/D converter
psc .def 0d2h ;Registro per il Prescaler del Timer
tcr .def 0d3h ;Registro Dati del Timer
tscr .def 0d4h ;Registro TSCR del Timer
wdog .def 0d8h ;Registro del WatchDog
drw .def 0c9h ;Registro della zona dati ROM (Rom Data Window)
;--------------------------------------
;VARIABILI usate da questo PROGRAMMA
;--------------------------------------
prima_var .def 084h
;fino a 0bfh massimo
;------------------------
;SETTAGGIO INIZIALE
;------------------------
.org 0880h
inizio ldi wdog,0ffh ;Carico il Watch-Dog.
;*** Setta la porta A
ldi port_a,00000000b ;pa0=input
ldi pdir_a,00000000b
ldi popt_a,00000000b
;*** Setta la porta B
ldi port_b,00000000b ;default out=0
ldi pdir_b,11111111b ;tutti out
ldi popt_b,11111111b
reti
jp main
;------------------------
;GESTORI di INTERRUPT
;------------------------
ad_int reti
tim_int reti
BC_int reti
A_int reti
nmi_int reti
;------------------------
;PROGRAMMA PRINCIPALE
;------------------------
main ldi wdog,255 ;RICEVE UN BYTE
ldi w,25 ;resta in questo loop fino a che input
testa jrs 0,port_a,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
input ldi wdog,255
jrr 0,port_a,input ;resta qui se non riceve dalla linea
ldi w,13 ;predispone per la campionatura a 1/2 T
decr dec w
jrnz decr
jrr 0,port_a,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 preapara
resta jrs 0,port_a,resta ;per il prossimo
jp input ;se linea =1 resta altrimenti input
out ld port_b,a ;ha ricevuto il byte e lo mette su port_b
jp main ;ricomincia per altro byte
zero res 0,a ;bit0= 0
dec x
jrz out ;se sono finiti salta
sla a ;altrimenti sposta a sinistra e libera x prox
jp input ;ne aspetta un altro
;-------------------------
;VETTORI DI INTERRUPTS
;-------------------------
.org 0ff0h
jp ad_int ;A/D int vector #4
jp tim_int ;timer int vector #3
jp BC_int ;port B & C int vector #2
jp A_int ;port A int vector #1
.org 0ffch
jp nmi_int ;nmi int vector #0
jp inizio ;reset vector
.end ; Fine del programma
LISTATO TXBYTE
© by Vittorio Crapella - i2viu.title "TXBYTE" ; Titolo del programma
.vers "ST62E10" ; Microprocessore usato
.w_on ; Abilita la memoria a finestre
; 8 Mhz ;vers 31/7/96
;--------------------------------
;VARIABILI DEL MICROPROCESSORE
;--------------------------------
a .def 0ffh ;Registro accumulatore
x .def 080h ;Registro x
y .def 081h ;Registro y
v .def 082h ;Registro v
w .def 083h ;Registro w
port_a .def 0c0h ;Registro Dati porta A
port_b .def 0c1h ;Registro Dati porta B
port_c .def 0c2h ;Registro Dati porta C
pdir_a .def 0c4h ;Registro Direzione porta A
pdir_ .def 0c5h ;Registro Direzione porta B
pdir_c .def 0c6h ;Registro Direzione porta C
popt_a .def 0cch ;Registro Opzioni porta A
popt_b .def 0cdh ;Registro Opzioni porta B
popt_c .def 0ceh ;Registro Opzioni porta C
ior .def 0c8h ;Registro Opzioni per le Interruzioni
addr .def 0d0h ;Registro Dati dell'A/D converter
adcr .def 0d1h ;Registro di Controllo dell'A/D converter
psc .def 0d2h ;Registro per il Prescaler del Timer
tcr .def 0d3h ;Registro Dati del Timer
tscr .def 0d4h ;Registro TSCR del Timer
wdog .def 0d8h ;Registro del WatchDog
drw .def 0c9h ;Registro della zona dati ROM (Rom Data Window)
;-------------------------------------
;VARIABILI usate da questo PROGRAMMA
;-------------------------------------
prima_var .def 084h
;fino a 0bfh massimo
;-------------------------
;SETTAGGIO INIZIALE
;-------------------------
.org 0880h ; Significa: da qui in poi memorizziamo il
; programma nella memoria ROM inizio
;Inizializzazione del micro
ldi wdog,0ffh ;Carico il Watch-Dog.
;*** Setta la porta A
ldi port_a,00000000b ;pa0=OUT
ldi pdir_a,00000001b
ldi popt_a,00000001b
;*** Setta la porta B
ldi port_b,00000000b
ldi pdir_b,00000000b ;tutti INPUT
ldi popt_b,00000000b
reti
jp main
;---------------------------
;GESTORI di INTERRUPT
;---------------------------
ad_int reti
tim_int reti
BC_int reti
A_int reti
nmi_int reti
;---------------------------
;PROGRAMMA PRINCIPALE
;---------------------------
main ldi wdog,255
ld a,port_b ;mette in a il byte da trasmettere
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
decw 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
decw_ dec w
jrnz decw_
decx 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
;-------------------------
;VETTORI DI INTERRUPTS
;-------------------------
.org 0ff0h
jp ad_int ;A/D int vector #4
jp tim_int ;timer int vector #3
jp BC_int ;port B & C int vector #2
jp A_int ;port A int vector #1
.org 0ffch
jp nmi_int ;nmi int vector #0
jp inizio ;reset vector
.end ; Fine del programma
SULLA STESSA LINEA DATI E +5V
© by Vittorio Crapella - i2viu
Il circuito qui descritto é nato dall'esigenza di far convivere sulla stessa linea (doppino telefonico - 20/30 metri) l'alimentazione a +5V e i dati PWM da trasmettere da una postazione con ST6225 ad un'altra sempre con ST6225.
La postazione di comando doveva inviare i dati a quella remota e ricevere l'alimentazione +5V attraverso la linea, mentre la postazione remota viceversa ricevere i dati e mandare in linea il +5V.
SCHEMA:
TRASFORMATORE:
Il nucleo del trasformatore é in ferroxube nero a doppio E con nucleo centrale di 5 x 5 mm. Le spire in serie al +5V sono 30 di filo di rame smaltato del diametro di 0,55 mm mentre l'avvolgimento in serie ai dati é realizzato con 90 spire sempre di filo smaltato del diametro di 0,28 mm.
FUNZIONAMENTO:
Ai fini dei segnali variabili come i dati, gli avvolgimenti delle 30 spire dei due trasformatori sono in parallelo uniti dalle capacità da 1000 µF che alla frequenza degli impulsi dei dati offrono una reattanza Xc molto bassa.
Ne consegue che le variazioni di segnale dei dati sull'avvolgimento delle 90 spire si ripercuote su quello di 30 con un rapporto 3/1 e a sua volta quello di 30 su quello di 90 (in ricezione) ridando quasi lo stesso segnale di partenza anche se molto deformato.
A questo punto interviene l'operazionale LM393 in configurazione a trigger che ricostruisce perfettamente squadrati gli impulsi dei dati.