RTX Digitale

© by Vittorio Crapella - i2viu

ISTRUZIONE 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:

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.