Está en la página 1de 35

COMUNICACIN SERIE

PARA SISTEMAS BASADOS EN


MICROCONTROLADORES PIC
COMUNICACIN SERIE

Los datos se envan bit a bit por una misma lnea y durante un tiempo fijo

Velocidad de transmisin: nmero de bits enviados por segundo (baudios)

Transferencia Sncrona: se enva seal de reloj para sincronizar cada bit

Transferencia Asncrona: no se enva la seal de reloj. Se necesitan relojes


en el emisor y en el receptor de la misma frecuencia y en fase
COMUNICACIN SERIE

Se emplean dos registros de desplazamiento (uno en el emisor y otro


en el receptor) encadenados para la conversin paralelo/serie en la emisin
y la serie/paralelo en la recepcin

Sincronizaciones:

* De los sucesivos bits


* De cada paquete de bits (8 9 bits)

Se enva la seal de reloj si la distancia entre Emisor y Receptor es corta:


menores retardos en las transiciones y menores flancos en la seal de reloj
Recibida

Codificaciones posibles de cada bit:


* NRZ (nivel alto: 1 / nivel bajo: 0)
* NRZI (cambio de nivel: 1 / sin cambio de nivel: 0)
* RZ (impulso: 1 / sin impulso: 0)
* ....
COMUNICACIN SERIE

TRANSFERENCIA SNCRONA

Dispositivo Maestro: el que genera la seal de reloj, es el que tiene capacidad


de iniciar o finalizar una transferencia

Dispositivo Esclavo: recibe la seal de reloj, no tiene capacidad para iniciar


una transferencia de informacin

Es posible una transmisin continua de bits, no hay limite en tamao de datos


COMUNICACIN SERIE
TRANSFERENCIA ASNCRONA

Se emplean relojes de igual frecuencia (se acuerda y configura la velocidad


de transmisin) pero es necesario que estn en fase (sincronizados)

Cada paquete de bits de tamao fijo se enmarca con bits de arranque y de


parada que sirven para sincronizar los relojes del emisor y del receptor

La lnea de datos inactiva a 1, si se desea enviar un dato se manda un bit


de arranque que sita a 0 la lnea durante el tiempo correspondiente a un bit

Al finalizar el envo de un dato, la lnea se sita a 1 al menos durante el


tiempo de un bit: bit de parada
COMUNICACIN SERIE
COMUNICACIN SERIE

MDULO SCI

Configurable en tres modos de trabajo:

1.- Asncrono (full dplex)


- Recepcin y transmisin independientes compartiendo generador
de relacin de baudios (BRG)
- TX: pin de transmisin (salida)
-RX: pin de recepcin (entrada)

2.- Sncrono modo Maestro (semi dplex)


- CK: reloj generado por el PIC (salida)
-DT: datos entrantes (recepcin) o salientes (transmisin)

3.- Sncrono modo Esclavo (semi dplex)


- CK: reloj entrante
- DT: datos entrantes (recepcin) o salientes (transmisin)
COMUNICACIN SERIE
MDULO SCI (II)
Los pines relacionados con la comunicacin no es necesario que sean configurados
como salidas en el TRISC, si est operativo el mdulo prevalecen sobre el registro
de direccin de datos

Registros asociados al SCI:


Registros de control y estado
TXSTA (0x98) & RCSTA (0x18)

Registro de Relacin de Baudios


SPBRG (0x99)

Registro de datos de transmisin:


TXREG (0x19)

Registro de recepcin de datos:


RCSTA (0x18)
COMUNICACIN SERIE

MDULO SCI EN TRANSMISIN ASNCRONA

Es la conexin ms adecuada para la comunicacin con un equipo alejado

Los niveles lgicos de las seales se corresponden con los niveles elctricos de
alimentacin del microcontrolador

Hay varias normas de transmisin serie asncrona: RS232, RS485, RS422,... que
emplean niveles de tensin ms inmunes al ruido (RS232) o que emplean tensiones
diferenciales (RS485, RS422) y que son ms apropiadas para distancias largas entre
dispositivos

Para implementar estas transmisiones, sera necesario la adaptacin de niveles


elctricos mediante los correspondientes circuitos integrados de adaptacin (drivers o
transceivers )

Si los microcontroladores a comunicar estn cercanos podra obviarse esa adaptacin

La transmisin puede ser unidireccional o bidireccional y simultnea


COMUNICACIN SERIE
COMUNICACIN SERIE

BLOQUES PARA SCI EN MODO ASNCRONO:

Generador de Relacin de Baudios (BRG)

- Define la velocidad de transferencia (transmisin y recepcin)


- Genera reloj de comunicacin a partir del oscilador del MCU

Circuito de Muestreo

- Deteccin de 1 0 en pin RX
- Sincronizacin de reloj

Transmisor Asncrono

- Registro serie de transmisin con buffer de carga

Receptor Asncrono

- Registro serie de recepcin con doble buffer


COMUNICACIN SERIE

Generador de Relacin de Baudios (BRG)

Se emplea para determinar la frecuencia de reloj para los registros de desplazamiento


de los bloques de transmisin y recepcin

Depende del valor X cargado en el registro de generacin de la relacin de baudios


SPBRG (direccin 0x99) y del estado del bit BRGH del registro TXSTA

Modo Sncrono (1) Asncrono (0)

BRGH = 1 (velocidad alta): baudios = fosc /(16*(X+1))


BRGH = 0 (velocidad baja): baudios = fosc /(64*(X+1))

SCI Asncrono ( en modo sncrono BRGH se ignora y es otra la frmula)


COMUNICACIN SERIE

Generador de Relacin de Baudios (II)

Al ser SPBRG un registro de 8 bits, puede que no sea posible alcanzar de manera exacta
la velocidad de transmisin deseada

Clculo del Error = (Valor calculado - Valor deseado) / Valor deseado

Ejemplo:

Valor deseado = 9600 baudios


fosc = 16MHz
BRGH = 0 -> 9600 = 16000000 / (64 * (X+1))
X = 25,042 -> SPBRG = 25

Valor calculado = 16000000 / (64 * (25+1)) = 9615 baudios

Error = (9615 - 9600)/9600 = 0,16 %

Puede alcanzarse menor error configurando velocidad alta (BRGH=1)


COMUNICACIN SERIE
COMUNICACIN SERIE
COMUNICACIN SERIE
Circuito de Muestreo

Codificacin de los bits de los datos NRZ (Non Return to Zero) con un bit de start,
8 9 bits de datos y un bit de stop

El transmisor saca sus bits por TX (empezando por B0) con los flancos que marca su
generador de relacin de baudios (reloj), pero no lo enva

El receptor introduce los bits que van apareciendo en su lnea RX al ritmo de su


generador de relacin de baudios (que tendr un valor similar al del transmisor) pero
debe sincronizarse mediante la aparicin del bit de start en la lnea de datos

Es materialmente imposible hacer coincidir flancos de relojes de TX y RX

Por tal motivo se necesita un circuito de muestreo de la lnea de datos que trata de
leer si hay un uno o un cero en la mitad del periodo de cada bit (seal estabilizada
tras posible cambio)
COMUNICACIN SERIE
Transmisor Asncrono
COMUNICACIN SERIE
Si TSR vaco y se escribe en TXREG, el dato pasa a TSR y se inicia transmisin
COMUNICACIN SERIE
COMUNICACIN SERIE
COMUNICACIN SERIE
COMUNICACIN SERIE

Pasos a dar para realizar una Transmisin serie Asncrona:

1.- Cargar SPBRG para una velocidad de transmisin dada (baudios) y configurar
velocidad alta o baja (BRGH)

2.- Activar mdulo SCI (SPEN=1) y definirlo como Asncrono (SYNC=0)

3.- Si se quiere detectar buffer vaco por interrupcin TXIE=1

4.- Si se desea tamao de datos de 9 bits configurar TX9=1

5.- Activar transmisin (TXEN=1) que har que TXIF=1

6.- Si se seleccionaron 9 bits, cargar el 9 en TX9D

7.- Cargar el dato en TXREG (se inicia la transmisin)


COMUNICACIN SERIE
COMUNICACIN SERIE
COMUNICACIN SERIE
COMUNICACIN SERIE
COMUNICACIN SERIE
COMUNICACIN SERIE
Pasos a dar para preparar una Recepcin serie Asncrona:

1.- Inicializar el registro SPBRG para una velocidad dada (baudios) de recepcin y
configurar velocidad alta o baja (BRGH)

2.- Activar mdulo SCI (SPEN=1) y definirlo como Asncrono (SYNC=0)

3.- Si se quiere detectar recepcin por interrupcin RCIE=1

4.- Si se desea tamao de datos de 9 bits configurar RX9=1

5.- Activar recepcin (CREN=1)

6.- Al completarse la recepcin de un dato RCIF=1 y si se habilitaron interrupciones,


se generar una

7.- Si se seleccionaron 9 bits, leer el 9 en RX9D de RCSTA. Se determina tambin si


se dio algn error (OERR FERR)

8.- Leer el dato en RCREG para obtener el dato recibido

9.- Si se dio algn error resetear con CREN=0


COMUNICACIN SERIE

EJEMPLO:
Transmitir muestras analgicas provenientes del canal AN0 del ADC del PIC hasta la
computadora y visualizar el dato por el hyper terminal de Windows.

Definiciones previas

-Ttrabajando con un cristal de 4MHz.

-Necesitamos de un programa que nos permita recibir o transmitir datos al


microcontrolador por esoemplearemos el Hyper terminal que es un accesorio de
comunicaciones que encontramos en Windows. La configuracin es bastante sencilla y la
configuracin debe coincidir con la que hemos seleccionado para en el PIC.

- Este programa lee un dato del canal AN0 del A/D y lo transmite a la PC a (2400 baudios:8
bits de datos: ninguna paridad:1 bit de parada y ningn control de flujo). El manejo del A/D
es similar a los programas anteriores con la diferencia que no usamos el timer 0 para
generar el retardo (mnimo 19,2 us) para el tiempo de adquisicin sino que las instrucciones
que empleamos en el programa nos permiten asegurar el tiempo apropiado.
COMUNICACIN SERIE
Diseo del programa
Algoritmo

1. Ir banco 0.
2. ADCON0: ADCS1 ADCS0 CH2 CH1 CH0 GO/-DONE ----- ADON
0 1 0 0 0 0 --- 1
Seleccionamos el canal 0 del A/D (CH2-0), encendemos el modulo (ADCON=1) y elegimos el
TAD Fosc/8 (ADS1:0)
3. Ir banco 1.
4. TRISA=TRISB=TRISC==Salidas
5. ADCON1: ADMF ADCS2 ------ ------ PCFG3 PCFG2 PCFG1 PCFG0
0 0 0 0 1 1 1 0
Justificamos el resultado de los registros ADRES a la izquierda (ADMF=0). Solo el pin RA0
ser canal analgico y las tensiones de referencia para el ADC sern VREF+=VDD y VREF-= VSS
6. TRISA<0>=0, configurar el pin RA0 como entrada.
7. TRISC<6>=1, configurar el pin RC6 como salida para la Tx serial.
8. SPBRG =25 (si y solo si el Cristal es de 4MHz )para lograr una frecuencia de 2400 baudios
(referirse a la tabla).
COMUNICACIN SERIE
Diseo del programa
Algoritmo

9. TXSTA<BRGH>=0 para baja velocidad de acuerdo a la tabla del registro SPBRG


10. TXSTA<SYNC>=0 configuramos en modo asncrono
11. Ir banco 0
12. RCSTA<SPEN>=1 habilitamos la puerta serial.
13. Ir banco 1
14. TXSTA<TX9>=0 , elegimos 8 bits de datos para la transmisin.
15. TXSTA<TXEN>=1, habilita la transmisin, automticamente el bit TXIF se va a 1-lgico
16. GO/-DONE=1. Iniciar la conversin A/D.
17. Si GO/-DONE es 1 ir paso 17
18. Si GO/-DONE es 0 ir paso 19
19. TXREG=PORTC=ADRESH
20. Si TXIF=0 Ir paso 20
21. Si TXIF=1 Ir paso 16
COMUNICACIN SERIE

Diagrama de Flujo
COMUNICACIN SERIE
list p=16F877 ;Procesador PIC16F877
include <p16F877.inc>

org 0

nop
nop
bcf STATUS,RP0 ;Ir banco 0
bcf STATUS,RP1

movlw b'01000001' ;A/D conversion Fosc/8


movwf ADCON0
bsf STATUS,RP0 ;Ir banco 1
bcf STATUS,RP1

movlw b'00000111'
movwf OPTION_REG ;TMR0 preescaler, 1:256

clrf TRISA ;PORTA salida


clrf TRISC ;PORTC salida
movlw b'00001110' ;A/D Port AN0/RA0
movwf ADCON1
bsf TRISA,0 ;Canal AN0 como entrada
bcf TRISC,6 ;RC6/TX salida, pin de transmisin
movlw d'25' ;2400 baud rate Xtal=4Mhz
movwf SPBRG
bcf TXSTA,BRGH ;Seleccin de baja velocidad
bcf TXSTA,SYNC ;Modo asncrono
bcf STATUS,RP0 ;Ir banco 0
bcf STATUS,RP1
bsf RCSTA,SPEN ;habilita el puerto serie
COMUNICACIN SERIE

bsf STATUS,RP0 ;Ir banco 1


bcf STATUS,RP1

bcf TXSTA,TX9 ;8 bits de datos a transmitir


bsf TXSTA,TXEN ;Activa la transmisin serial, TXIF = 1
bcf STATUS,RP0 ;Ir banco 0
bcf STATUS,RP1
_adc
btfss INTCON,T0IF
goto _adc ;Esperar que el timer0 desborde
bcf INTCON,T0IF ;Limpiar el indicador de desborde
bsf ADCON0,GO ;Start A/D conversion
_espera
btfsc ADCON0,GO ;ADCON0 es 0? (la conversion esta completa?)
goto _espera ;No, ir _espera
movf ADRESH,W ;Si, W=ADRESH
movwf TXREG ;TXREG = W
_esperatx
btfss PIR1,TXIF ;Espera hasta que transmisin culmin
goto _esperatx
goto _adc ;Ir adc

END
COMUNICACIN SERIE
Ejemplo 2:
Recibir datos provenientes de la computadora de forma serial y mostrarlos
en el PORTD
list p=16F877 ;Procesador PIC16F877
include <p16F877.inc>

org 0
nop
nop
bsf STATUS,RP0 ;Ir banco 1
bcf STATUS,RP1

clrf TRISC ;PORTC salida


clrf TRISD ;PORTD salida
bsf TRISC,7 ;RC7/Rx entrada, pin de recepcin
movlw d'25' ;2400 baud rate Xtal=4Mhz
movwf SPBRG
bcf TXSTA,BRGH ;Seleccin de baja velocidad
bcf TXSTA,SYNC ;Modo asncrono

bcf STATUS,RP0 ;Ir banco 0


bcf STATUS,RP1
bsf RCSTA,SPEN ;habilita el puerto serie
bcf RCSTA,RX9 ;8 Bits de datos
bsf RCSTA,CREN ;Para Rx Continuo
_espera
btfss PIR1,RCIF ;Pregunta si el buffer de RX es full
goto _espera ;No, ir _espera
movf RCREG,W ;Si, W=RCREG y pone a cero el RCIF
movwf PORTD ;PORTC = W
goto _espera
end

También podría gustarte