Transmision de datos por radiofrcuencia

35
1 Transmisión de datos por Radio Frecuencia Diseño de Sistemas Basados en Microcontrolador Universidad de Las Palmas de Gran Canaria 2003 - 04 José Carlos Ruiz Luque Francisco García Rodríguez

description

 

Transcript of Transmision de datos por radiofrcuencia

Page 1: Transmision de datos por radiofrcuencia

1

Transmisión de datos por Radio Frecuencia

Diseño de Sistemas Basados en Microcontrolador

Universidad de Las Palmas de Gran Canaria

2003 - 04

José Carlos Ruiz Luque

Francisco García Rodríguez

Page 2: Transmision de datos por radiofrcuencia

2

CONTENIDOS

Introducción............................................. 3

Componentes.......................................... 3

Desarrollo práctico.................................. 3

1 Placa Radio frecuencia XE1201.......................... 4

1.1 Envío de un bit continúo........................ 15

2 Protocolo de comunicaciones........................... 20

2.1 Material........................................ 21

2.2 Algoritmo....................................... 21

3 Comunicación por radiofrecuencia...................... 24

4 Indicaciones de uso rápido............................ 25

5 Ampliaciones.......................................... 26

6 Ficheros.............................................. 27

Programa 1: Protocolo de comunicación............... 27

Programa 2: Programa principal...................... 31

7 Bibliografía.......................................... 35

Page 3: Transmision de datos por radiofrcuencia

3

Introducción

En el desarrollo de la práctica se utilizará el

transceptor XE 1201 para la comunicación entre varios

equipos.

Se ha planteado el desarrollo de la práctica en forma

piramidal, cuya base será la de configurar el transceptor y

de la transmitir un bit siendo capaz de captar el bit por

el receptor.

En cada nivel se irá aumentando la complejidad de la

información necesitando para ello un protocolo de

comunicación, como el rs-232, hasta llegar a trasmitir a la

frecuencia de las placas.

Componentes

Para la comunicación de radio frecuencia:

• Dos placas RF(radio frecuencia) con el chip XE1201

empotrado

Para el control de la placa XE 1201:

• Dos pic 16f84

• Placa AC84

Desarrollo práctico

La elaboración de la práctica se ha orientado en

una jerarquía de etapas. A continuación se expondrá un

breve resumen de las mismas:

• Primera Etapa: “Envío de un bit continuo” alternado su

valor entre 0 y 1 con el interruptor de la placa de

desarrollo.

• Segunda etapa: Implementación del protocolo RS-232.

• Tercera etapa: Combinación de las dos etapas

anteriores

Tras enunciar las etapas de realización de la práctica

se profundizará en cada etapa en los recursos usados y en

el código ensamblador del pic.

Page 4: Transmision de datos por radiofrcuencia

4

1 Placa Radio frecuencia XE1201

El XE1201A es un transceptor FSK half-duplex que opera

en banda ISM1 (optimizada) de 433 Mhz y en banda de 300-

500Mhz.

Aplica la modulación por desplazamiento de frecuencia

de fase continua a 2 niveles (CPFSK). La conversión directa

de la arquitectura del receptor permite al chip filtrar los

canales.

El XE1201A incluye un sincronizador de bit que genera

datos libres de interferencia y un reloj sincronizado a los

datos facilitando a un microcontrolador adquirir los datos

sin mucha complejidad. La alimentación de energía es de

3.5V y puede ser controlada por medio del bus o por los

pins Vcc y Vss. El XE1201A usa el estándar I-ETS300-220.

Figura del XE1201A

1 Como ya dice la definición de ISM en ingles esta es una banda para el uso: industial, científico y

médico, en la cual no es necesaria la posesión de una licencia para poder ser utilizada. Esta banda tiene

varios rangos de frecuencias una que está en Europa en los 433 Mhz normalmente usada para los

telemandos de garajes; otra en los 850 MHz para el uso de aplicaciones que necesitan una mayor ancho

de banda como pueden ser periféricos de ordenadores (ratones, teclados, etc.) Y una alrededor de los 2,4

Ghz que puede ser usada ya par la realización de redes de ordenadores inalámbricas.

Page 5: Transmision de datos por radiofrcuencia

5

Detalles de la descripción de los pines:

Page 6: Transmision de datos por radiofrcuencia

6

Los pins que son accesibles al exterior:

Configuración de los pines de la placa RF:

Page 7: Transmision de datos por radiofrcuencia

7

Resumen de los valores mínimos, máximos y tipos para

algunos pins del chip:

Page 8: Transmision de datos por radiofrcuencia

8

Lógica de control a través de 3 cables

El transceptor puede se configurado en varios modos a

través de la interfaz del bus 3 cables. Esta interfaz

consiste de un registro desplazador, que recoge cada bit de

dato en cada nuevo flanco de subida del SC (reloj serial).

El circuito interno incorporado chequea la validez de

algunas entradas y cuenta el número de flanco de subida de

la señal SC. El dato será transferido desde el registro

desplazador al correspondiente registro de configuración,

si sólo si el flanco de subida 16 ha sido detectado en el

reloj serial (SC). Después del decimosexto flanco de

subida, se debe activar la señal SE (habilitación serial).

La habilitación de la señal SE indica que ha terminado

la configuración del registro.

En la figura siguiente se nuestra el tiempo mínimo

necesario que el dato debe estar estable antes de un flanco

de subida de SC en el bus serial.

La transmisión de la configuración a través de la

interfaz del bus de 3 claves se empieza por el bit más

significativo (MSB) hasta el bit menos significativo (LSB).

Cada paquete de transmisión tiene la siguiente

configuración:

Page 9: Transmision de datos por radiofrcuencia

9

Registros internos

Las características principales de transceptor son

configuradas por medio de la interfaz bus de 3 cables y

registros internos (A, B, C). Como la frecuencia de

desmodulación, la habilitación del reloj, la frecuencia

de dato, etc. puede ser programado. Los primeros 2 bits D15

y D14 determinan el acceso a los registros A, B o C a

través de la siguiente tabla de verdad:

Los 3 registros son rellenado por los datos A13 a A0,

B13 a B0 o C13 a C0 de acuerdo a los valores del los bits

de 15 y 14.

El registro A

Este registro es usado para establecer el modo del

transceptor (modo emisor, modo recepto y modo stand-by) y

seleccionar la frecuencia de recepción.

Se accede al registro con lo siguiente valores de

en los bit 15 y 14:

D15 = 0

D14 = 0

Formato de los datos:

Page 10: Transmision de datos por radiofrcuencia

10

Control de modo:

Cuando es 0, este bit permite el control de los 3

modos de funcionamiento del transceptor y la activación del

chip para ser dirigido mediante los pin15 (RxTx) y el pin1

(EN). Cuando es 1, el control de los modos de

funcionamiento y de activación son dirigidos mediante los

bits A10 y A11. En este modo los pines 15 y el pin 1 no

tienen efecto.

Modo de control con el pin15 y pin1:

En este modo el transceptor puede ser apagado,

encendido y configurado en modo emisor o receptor como se

explica en la siguiente tabla y figura:

Diagrama de tiempo para el control con los pines RxTx

y EN

Control de reloj:

Este bit indica si activar o no el reloj interno del

XE1201A. Cuando es 1, el reloj siempre esta corriendo en

cualquier caso de los estados del chip activo (bit A11

cuando A13=1 o pin1 cuando A13=0). Cuando es 0, la

actividad del reloj es determinada por el bit(A11).

Activar el chip:

Cuando es cero, todas las señales del XE1201A están

desactivadas (excepto el reloj si el bit A12 esta a 1). Sin

embargo el bus de 3 cables puede ser programado en modo

Page 11: Transmision de datos por radiofrcuencia

11

desactivado mientras Vdd este presente. Este bit remplaza

el Chip Enable (pin1) when A13=1.

RXTX:

Modo receptor/emisor. Cuando es 1, el transceptor es

configurado como receptor y en modo transmisor cuando vale

0. Este bit reemplaza el RxTx (pin15) cuando A13=1.

Sync off

Estos bits son usados en aplicaciones cuando el

sincronizador no es necesario.

1) El receptor está en modo normal pero se ignora el

demodulador. La salida I y Q están habilitadas en el

pin 19 y pin18 respectivamente. El valor A9 a A6 debe

ser:

2) El receptor está en modo normal pero el sincronizador

de bit interno está parado. Los datos sin traza (en

bruto) están disponibles en el pin19 (RXD). El CLKD

(pin18) es insignificante. En este modo, el preámbulo

no es requerido para el sincronizador de reloj del

sincronizador de bit así que el tiempo mínimo de

reavivar el receptor es accesible. Los valores de A9 a

A6 deben ser configurados como en la tabla siguiente:

Frecuencia de recepción:

Estos bits son usado para configurar el sincronizador

de bit a la frecuencia de dato de acuerdo a la siguiente

fórmula:

Donde el valor de n es un decimal si signo de los bit

A5(MSB) a A0.

Nota: Cuando el sincronizador de bit esta en bypassed,

no es necesario programar la frecuencia del dato. Los datos

Page 12: Transmision de datos por radiofrcuencia

12

son remodulados consecuentemente a frecuencia de dato de

entrada.

El registro B

Este registro es usado para ajustar la frecuencia

central durante la transmisión. Se accede a través:

D15 = 0

D14 = 1

Formato de los datos:

Frecuencia de offset. Estos bits pueden ser usados para

calibrar la frecuencia central de oscilación.

Bits de test. Estos bits son solo para proposito de test.

Debe ser configurado a 0.

El registro C

Este registro es usado para la frecuencia de

desmodulación, establece los valores de la amplificación,

ajuste de potencia de la trasmisión y otras funciones

auxiliares. Es accedido con:

D15 = 1

D14 = 0

Page 13: Transmision de datos por radiofrcuencia

13

Potencia de salida en la transmisión. Puede ser ajustada

con el pin13 y pin12

Dato invertido en bit. Las tramas de datos recibidas están

invertidas si el bit está 1.

Bit de test. Estos bits deben estar siempre configurados a

C10 = 1 y C9 = 0

Habilitar el amplificador de salida transmitido. Cuando es

cero, esta desactiva esta función.

Bit de dato trasmitido (TXD). Este bit replaza el pin 17

(TXD) cuando el bit 13 del registro A es configurado a

1 y así permite una transmisión de dato mediante el

bus 3 cable.

Desviación de frecuencia. Estos bits son usado para ajustar

la desviación de frecuencia del modulador.

Al activar el transceptor los registros son

inicializados con los siguientes valores:

• Control pins.

• El reloj parado.

• Frecuencia de recepción a 16 KHz DR= 16 bits/s.

• PA = -12dBm.

• Fdev = +/- 125kHz.

Page 14: Transmision de datos por radiofrcuencia

14

Sincronizador de bit en modo receptor

El desmodulador interno del XE1201A necesita un

dato de 20 bits sincronizado para asegurar un correcto

reloj sincronizado. El dato de sincronización debe ser una

secuencia de 0 y 1 enviado alternativamente.

A continuación se ilustra con dos figura la recepción

de datos con sincronizador de bit o bypassed.

bypassed

sincronizador de bit

Page 15: Transmision de datos por radiofrcuencia

15

1.1 Envío de un bit continúo

En esta etapa se realizó la comprobación del cable

elaborado para la comunicación por la interfaz bus de 3

cables, el control del modo de funcionamiento y de la

activación de las placas a través de los interruptores.

Las características de configuración del transceptor

se realizarán a través del bus 3 claves. Sólo se configura

el registro A, los registros B y C se mantendrán con los

valores iniciales de la placa, ya que controlan algunos

parámetros que no controlamos.

El único registro que modificaremos será el A para

comprobar la función del código ensamblador de controla la

transmisión serie de configuración del transceptor. La

configuración de los registros es la siguiente:

reg 13 12 11 10 9 8 7 6 5 4 3 2 1 0

A 0 1 0 0 0 0 0 0 1 1 0 0 0 0

B 0 0 0 0 0 0 0 0 0 0 0 0 0 0

C 0 1 0 1 0 1 0 0 1 0 0 0 0 0

Tabla 1

Después de encender y haber sido configurado por el

microcontrolador, el transceptor está en el estado

siguiente: modo de control a través de las líneas

RxTx(pin15) y EN (pin1), el reloj activo, frecuencia de

datos 1 kbits/s, potencia de salida -5dBm, atenuación de la

potencia de entrada al circuito, y desviación de frecuencia

a 125 kHz. Listo para receptor o emisor.

Tras hablar de lo que se va realizar, y la

configuración de los registros se comentará el código

necesario para esta etapa.

Primero se comentará la configuración de los puertos

para la comunicación del pic con el transceptor y vicersa.

En esta etapa el puerto A se configurará con los 3 bit

menos significativo (LSB) como entrada:

• PORTA0: es el que controla el estado de

funcionamiento de la placa,

- 1: El transceptor activo.

- 0: El transceptor desactivado

• PORTA1: Se indica el modo de funcionamiento

- 1: modo transmisor.

- 0: modo receptor.

Page 16: Transmision de datos por radiofrcuencia

16

• PORTA2: el valor que disponga este puerto se

tendrá en cuenta cuando el modo de funcionamiento

de la placa RF está en transmisor. El valor del

puerto se transmitirá para el receptor. Los

valores que puede tomar este puerto son obvios al

hacer un bit (0 o 1).

La ristra de configuración del puerto A es en binario

“0 0111” y en hexadecimal “07”

La configuración del puerto B es meramente para la

comunicación entre el pic y el transceptor. En la tabla se

indica los pins del cable de conexión de la interfaz de la

placa RF con el puerto B del pic:

Nombre de la

linea

Pin Interfaz

placa

Pin del

puerto B

Estado

del pin

puerto b

TXD 1 0 Salida

RxTx 10 1 Salida

EN 8 2 Salida

DE 6 3 Salida

RXD 5 4 Entrada

SC 4 5 Salida

CLKD 3 6 Entrada

SD 2 7 Salida

De la anterior tabla se extrae la ristra binaria “0101

0000” para la configuración del puerto, o en hexadecimal,

50h.

Al saber la configuración de los puertos se ilustra a

continuación dicha configuración en el ensamblador del pic.

Page 17: Transmision de datos por radiofrcuencia

17

Se puede observar en el código que se ha puesto una

inicialización al puerto B, cuyo valor en binario es

“0000 1010”. El significado de la ristra, INI, es que las

lineas “RxTx” y “De” esta activada.

El registro TRANS es un registro de 2 bytes que nos

servirá para almacenar la configuración de los registros

que se transmitirá por la interfaz del bus serie de 3

cables (3-wire serial bus). Se usa este registro de 16 en

contra de uno de 8 bit para no producir retraso en la

transmisión por el puerto serie.

Las etiquetas “Asup” y “Ainf” representa la

configuración de registro de estado A que se comentó

anteriormente (tabla 1).

La etiqueta “CONT” representa la dirección del

registro CONT que se comenta posteriormente su

funcionamiento en el código.

A continuación se muestra el código que prepara el

registro TRANS con los valores correspondientes para la

transmisión a la placa RF. La transmisión se realizará con

;; SIMBOLOS E EQU 3 SC EQU 5 SD EQU 7 BIT3 EQU 3 CLKD EQU 6 TXD EQU 0 RXD EQU 4 RxTx EQU 1 EN EQU 2 CONFA EQU 07h CONFB EQU 50h ; Configuración del puerto B ASup EQU 10h ; Mitad superior del registro A de xemics AInf EQU 30h ; Mitad inferior del registro A de xemics ;estado inicial del puerto B INI EQU 0Ah ;Registros Generales utilizados TRANS EQU 0Ch ;tamaño 2 CONT EQU 0Eh

org 0 goto inicio org 5 ; configuramos el puerto B, interfaz con la placaRF BSF STATUS,RP0 MOVLW CONFB MOVWF TRISB MOVLW CONFA MOVWF TRISA BCF STATUS,RP0 ; inicializamos el puerto B MOVLW INI MOVWF PORTB

Page 18: Transmision de datos por radiofrcuencia

18

la función “transmitir” que se hablará de ella más delante

de esta memoria.

En el código de utiliza un modo de direccionamiento

indirecto para establecer los valores de TRANS.

Siguiendo el código original viene el bucle principal

del programa que interactúa con el usuario, indicado el

usuario el funcionamiento, modo de funcionamiento y cuando

está o no habilitado el transceptor.

Lo más relevante del código es cuando el transceptor

se encuentra en modo receptor no se mira el valor del

puerto PORTA2, debido a que no va ser transmitido.

A continuación es expone el código de la función

transmitir que se quedo antes sin hablar de ella:

; transmitimos el registro A

MOVLW TRANS

MOVWF FSR

MOVLW ASup

MOVWF INDF

INCF FSR, F

MOVLW AInf

MOVWF INDF

CALL transmitir

Begin BTFSC PORTA, 0 ; Se habilita o no el circuito? GOTO UNO BCF PORTB, EN ; inhibe el circuito GOTO SIG2 UNO BSF PORTB, EN ; se habilita el circuito SIG BTFSS PORTA,1 ; Se configura en el modo de ejecución GOTO TRANSIM BSF PORTB, RxTx GOTO SIG2 TRANSIM BCF PORTB, RxTx BTFSC PORTA, 2 GOTO UNO1 BCF PORTB, TXD GOTO SIG2 UNO1 BSF PORTB, TXD SIG2 GOTO begin

Page 19: Transmision de datos por radiofrcuencia

19

Como sabemos ya en este punto la configuración

del transceptor se realiza a través de los registros A, B,

C y se transmite por le bus serial de 3 cables (3-wire

serial bus). Las líneas que se involucran en este bus son

SC (reloj serial), SD (dato serial), DE (dato habilitado)

de la interfaz de la placa RF.

Se usa de nuevo un modo de direccionamiento indirecto

para tener acceso a los valores que se van a transmitir.

Lo primero que realiza la función es estable DE a

nivel bajo indicando al transceptor que estamos en un ciclo

de configuración y resetea el valor del contador “CONT” a

cero.

La transmisión se comienza por el byte más

significativo (MSB) y por el MSb (bit más significativo).

Tras enviar los 8 bits que es controlado por el

contador “CONT” se transmite el segundo byte del registro

A. Al terminar la transmisión del último byte se activa

la señal DE para confirmar al transceptor que la

configuración del registro A se ha terminado.

transmitir MOVLW TRANS MOVWF FSR BCF PORTB,E ; Duerme el dispositivo CLRF CONT ; Reinicia contador B1 BCF PORTB,SC ; Conmutar a bajo el reloj RLF INDF,F ; Rotar a izquierda TRANS BCF PORTB,SD ; Poner señal de envío a cero BTFSC STATUS,C ; ¿ Enviar un 1 ? BSF PORTB,SD ; Pone señal de envío a uno BSF PORTB,SC ; Conmutar a alto el reloj INCF CONT,1 ; Contar rotaciones realizadas BTFSS CONT,BIT3 ; ¿ Se ha rotado 8 veces ? GOTO B1 ; No, volver a empezar CLRF CONT ; Si, reiniciar contador INCF FSR,F ; Siguiente byte B2 BCF PORTB,SC RLF INDF,F BCF PORTB,SD BTFSC STATUS,C BSF PORTB,SD BSF PORTB,SC INCF CONT,1 BTFSS CONT,BIT3 GOTO B2 BSF PORTB,E ; Configuración terminada NOP BCF PORTB,SC BCF PORTB,SD RETURN

Page 20: Transmision de datos por radiofrcuencia

20

2 Protocolo de comunicaciones

Antes de comunicar cualquier dato entre las placas se

hace necesario crear un protocolo de transmisión que además

deberá ser probado inicialmente con dos PICS conectados

físicamente para descartar posibles problemas en el manejo

de las placas y centrarnos únicamente en el algoritmo.

Se ha escogido el protocolo RS232 por ser el más

familiar al haber trabajado con él previamente. Al tratarse

de una primera versión y en este caso inicial, se modificó

para que fuese lo bastante lento como para poder observar

visualmente su funcionamiento y la transmisión en curso.

Linea = Linea comunicación

Cont = Contador

Page 21: Transmision de datos por radiofrcuencia

21

Nótese que el programa no empieza antes de 12 marcos

de bits, esta espera tan larga la utilizaremos para

asegurar que no se empieza a procesar en medio de la

transmisión de un byte.

2.1 Material

Las pruebas del protocolo se realizan conectando con

un cable alguno de los conectores del puerto A de dos PICS,

dejando enteramente libre el B para poder mostrar con los

leds el estado de la transmisión. En el receptor, además,

se emplea el display led de 7 segmentos incorporado en las

tarjetas de entrenamiento para mostrar la codificación del

número enviado.

Los dos primeros switchs controlan el funcionamiento

de las placas. El RA0 decide si el circuito está activado y

el RA1 en qué modo lo hacen.

0 Transmisor

1 Receptor

2.2 Algoritmo

La implementación del programa hace uso de

interrupciones para controlar el tiempo que ha de tardar un

marco de bit. Como éstos duran 833 milisegundos y

necesitamos desbordar varias veces el timer calculando

múltiplos de 64 milisegundos, podemos resumir los valores

que necesita tomar el contador según la parte del programa.

Desbordamientos: 01 - Espera start bit = 64 ms

19 - Leer primer BIT = 833 + 833/2 ms

13 - Lectura de bits = 833 ms

RSI MOVWF Temp ; Guardamos W

DECFSZ Contador,1 ; Decrementa contador. Contador = 0?

GOTO SEGUIR ; Si contador != 0 ir a Seguir

MOVLW 01h ; Continuar cede el paso

MOVWF Continuar

SEGUIR MOVLW V_TIMER0

MOVWF TIMER0 ; Recarga TMR0

BCF INTCON,TOIF ; Borra bandera de interrupción

BSF INTCON,TOIE ; Rehabilita interrupción RTIE

MOVFW Temp ; Restaura W

RETFIE ; Repone GIE y Retorna

END

Page 22: Transmision de datos por radiofrcuencia

22

La interrupción lo único que hace una vez lanzada, es

decrementar un contador que fija cuántas veces ha de

desbordarse el timer antes de poner a uno el bit de

Continuar, con lo cual la función retardar conocerá el

tiempo que ha de retrasarse según el valor que le demos a

dicho contador.

De hecho, como esta es la única parte del programa

donde interesa conservar interrupciones, la propia

subrutina se encarga de activar las interrupciones antes de

entrar y desactivarlas al salir.

Para llamarla, lo único que se necesita es que se le

pase en el registro W el tiempo que ha de esperar en

múltiplos de 64 milisegundos.

La lectura de datos se realiza desde una función

específica que realiza todas las tareas necesarias para

captar el bit.

Como queremos tener un duplicado del byte enviado, se

insertan los bits uno a uno en un registro empezando por la

izquierda. Según sea un uno o un cero, se coloca en el bit

de desbordamiento de STATUS para que la función de rotación

lo coloque al final de la variable.

RETARDAR

movwf Contador ; Tiempo espera (x64ms)

clrf Continuar

BANCO1

movlw b'00000111'

movwf OPCION

BANCO0

movlw V_TIMER0 ; Desbordar cada 64 ms

movwf TIMER0

movlw b'10100000'

movwf INTCON ; Activa GIE y TOIE

LOOP1 btfss Continuar,0 ; Esperar señal de continuar

goto LOOP1

movlw 00h

movwf INTCON ; Activa GIE y TOIE TMR0

LEER btfsc LINEA_IN ; Mirar la LINEA_IN

goto LEER1 ; Poner un 1

bcf STATUS,0 ; Poner un 0

rrf Dato,1 ; Rotamos y lo cargamos

return

LEER1: bsf STATUS,0 ; Ponemos bit en STATUS,0

rrf Dato, 1 ; Rotamos sin cambiar W

incf C_Paridad,1 ; Incrementar contador de paridad

return

Page 23: Transmision de datos por radiofrcuencia

23

El algoritmo inicial del receptor es la implementación

directa del diagrama puesto al principio de esta sección.

En cuando al emisor,

sigue la secuencia

expuesta en esta página.

Durante la creación

del protocolo, tanto

emisor como receptor

fueron desarrollados por

etapas.

En la primera se

eludieron los bits de

paridad. El emisor enviaba

un byte programado y el

receptor al recogerlo,

limpiaba el puerto B y

volcaba el byte

reconocido.

Luego se añadió el

control de errores con un

bit de paridad y se

enviaron varios bytes en

cadena. El objetivo era

observar posibles

problemas al recibir una

transmisión contínua de

bytes, la recepción

correcta del resto de

datos cuando se encendía

el receptor en medio de

una transmisión y la

detección de errores

cuando desconectábamos

durante un tiempo el cable

de datos para simular una

alteración de la señal.

Linea = Linea comunicación

Cont = Contador

ContPar = Contador de paridad

Page 24: Transmision de datos por radiofrcuencia

24

3 Comunicación por radiofrecuencia

Después de depurar el protocolo de comunicación, se

procede a unir el código de configuración de las placas y

el de la transmisión, así, donde antes teníamos una unión

física con los cables entre los pics, ahora tenemos las

terminales RxD y TxD de las placas transceptoras.

Se conectan las placas siguiendo los pasos de la

sección 4 sobre uso rápido. Luego se repiten los pasos de

comprobación que se realizaron cuando la conexión era

física.

Una vez solucionados todos los inconvenientes

surgidos, se decide ampliar la funcionalidad de las placas

utilizando el teclado alfanumérico, para que espere en un

bucle la pulsación de una tecla que decidirá el byte a

enviar. Como se devuelve el código decimal, se necesita

construir una tabla que los traduzca al display de 7

segmentos que se utilizará para mostrar los datos.

Como consecuencia del uso completo del puerto B, no se

puede mostrar indefinidamente el byte recibido por el

display, así que se recurre a la función RETARDAR del

protocolo para mostrarlo un corto tiempo mientras se

deshabilita el receptor.

CODIGONUMERO MOVLW high CODIGONUMERO MOVWF PCLATH MOVF POS, W ADDWF PCL, 1

retlw 3Fh ; código del 0 retlw 06h ; código del 1 retlw 5Bh ; código del 2 retlw 4Fh ; código del 3 retlw 66h ; código del 4 retlw 6Dh ; código del 5 retlw 7Dh ; código del 6 retlw 07h ; código del 7 retlw 7Fh ; código del 8 retlw 67h ; código del 9 RETLW 77h ; A RETLW 7Ch ; B RETLW 39h ; C RETLW 5Eh ; D RETLW 79h ; E RETLW 71h ; F

Page 25: Transmision de datos por radiofrcuencia

25

4 Indicaciones de uso rápido

Estos son los pasos a seguir para empezar a usar

inmediatamente las placas con los programas incluidos.

1. Cargar el proyecto incluído en final.hex o compilarlo de

las fuentes para cargarlo en dos placas de laboratorio

con el pic 16F84.

2. Conectar al zócalo de ampliación un conector adaptado

para introducir los cables necesarios del conector de la

placa. Suministrar a las tarjetas transceptoras una

tensión de 3,5 voltios y unir sus tierras con la de las

placas. Por último se debe asegurar que se conectan

adecuadamente las líneas por donde se transmiten los

datos. Inicialmente la línea de recepción está incluida

en el zócalo, pero la trasmisora se conecta a la pata

TxD de las placas.

3. En la placa destinada a ser la receptora, conmutar los

dos primeros switchs del puerto a (RA0 y RA1) a uno, y

en la transmisora conmutar el primero a uno y el segundo

a 0. El primero indica que se desea activar las placas y

el segundo el modo bajo el que funcionarán.

4 Pulsar en el teclado alfanumérico una tecla, a

continuación se transmitirá por radiofrecuencia en un

plazo de 13,3 segundos el byte pulsado. En el display de

7 segmentos de la receptora justo antes de mostrarse el

byte, se activará el punto para a continuación,

exhibirse durante 1,5 segundos la tecla pulsada.

Nótese que como el protocolo de comunicaciones se

incluye en forma de librería, éste puede mejorarse siendo

los cambios transparentes para el programa principal

siempre y cuando se respeten las funciones exportadas en el

include.

El proyecto ocupa la mayor parte de los puertos, de

hecho ocupa todo el puerto B salvo el RB4 y del A solamente

coge el RA4. Sin embargo, cuando no transmite, se puede

poner en suspensión la placa y mientras tanto, todo el

puerto B queda libre.

Si se necesitase cambiar las líneas por donde se

comunican los datos, existe una macro para que esto pueda

realizarse sin problemas.

Page 26: Transmision de datos por radiofrcuencia

26

5 Ampliaciones

Se proponen diversos proyectos para los que se pueden

utilizar estas placas.

1. Interfaz entre periféricos del ordenador como

ratones, teclados o placas de adquisición de datos.

Como las señales son digitales, se pueden usar

directamente las patas emisoras y receptoras de las

placas, además, la comunicación puede ser en dos

sentidos.

2. Control y/o monitorización de dispositivos remotos.

3. Implementación de protocolos específicos para

comunicaciones inalámbricas, con control de errores

y verificación de tramas.

4. El protocolo actual no aprovecha el reloj para leer

los datos enviados, ni cambia dinámicamente de

función para el control de errores.

Page 27: Transmision de datos por radiofrcuencia

27

6 Ficheros

Programa 1: Protocolo de comunicación

Esta es la implementación de la versión simple del protocolo RS232 adaptada ya para ser usado como una librería usando memoria dinámica. ;; PROTOCOLO RS232 simple ;; ;; Programa que lee el bit que llega por una LINEA y lo procesa según ;; las normas RS232. Trabaja con un periodo de 833ms. Espera start bit ;; escaneando cada 64ms ;; ;; Transmisor:: El retardar va después de escribir en la línea ;; Receptor:: El retardar va antes de leer la línea ;; ;; José Carlos Ruiz Luque ;; Francisco García Rodríguez ;; ;; NOTAS ;; El programa principal ha de controlar que los puertos esten ;; configurados correctamente como entrada o salida ;; Cálculos para el contador ;; ;; 832ms = 256x13x (TMR0 = 256 - 250,30048) ;; ;; Cuenta para esperar Sync = 100 #include "p16f84.inc" ;; Macros #define LINEA_OUT PORTB,0 #define LINEA_IN PORTB,4 #define V_TMR0 06h #define BANCO1 bsf STATUS,RP0 #define BANCO0 bcf STATUS,RP0 GLOBAL Dato, Eviar, TRANSMITIR, ESTADO, RECIBIR, RSI, Contador, Continuar, RETARDAR udata ;; VARIABLES Contador res 1 ; Estado del circuito Temp res 1 ; Continuar res 1 ; Numero leído Veces res 1 ; Variable para RSI Eviar res 1 ; BYTE enviado C_Paridad res 1 ; Contador de paridad Dato res 1 ; BYTE recibido Recepcion res 1 ; Indica si hubo un error ESTADO res 1 ts2 code

Page 28: Transmision de datos por radiofrcuencia

28

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; RETARDAR ;; ;; Recoge en W el tiempo que pone en espera el micro en múltiplos de ;; 64 milisegundos ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; RETARDAR

movwf Contador ; Tiempo espera (x64ms) clrf Continuar ;; Preparar interrupciones BANCO1 movlw b'00000111' movwf OPTION_REG BANCO0 movlw V_TMR0 ; Desbordar cada 64 ms movwf TMR0 movlw b'10100000' movwf INTCON ; Activa GIE y TOIE TMR0 LOOP1

btfss Continuar,0 ; Esperar señal de continuar goto LOOP1 ;; Deshabilitar interrupciones movlw 00h movwf INTCON ; Desactiva GIE y TOIE TMR0 return ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Leer :: Lee el dato de la linea y lo pone al final de Dato después ;; de desplazarlo. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; LEER btfsc LINEA_IN ; Mirar la LINEA_IN goto LEER1 ; Poner un 1 bcf STATUS,0 ; Poner un 0

rrf Dato,1 ; Rotamos y lo cargamos return LEER1:

bsf STATUS,0 ; Ponemos bit en STATUS,0 rrf Dato, 1 ; Rotamos sin cambiar W incf C_Paridad,1 ; Incrementar contador de paridad return ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; TRANSMITIR :: Transmite el byte contenido en la variable Eviar ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; TRANSMITIR clrf C_Paridad bsf LINEA_OUT movlw 0E1h ; Esperar 833x15 ms call RETARDAR ;; Start bit bcf LINEA_OUT movlw 0Dh ; Esperar 833 ms call RETARDAR

Page 29: Transmision de datos por radiofrcuencia

29

movlw 08h movwf Veces LOOP_BYTE ;; Envío del byte btfss Eviar,0 ; Enviar 1 ó 0? goto ENVIA_0 ; 0 bsf LINEA_OUT ; 1 incf C_Paridad,f ; Incrementar contador de paridad goto RESTAR ENVIA_0 bcf LINEA_OUT RESTAR rrf Eviar,1 movlw 0Dh ; Esperar 833 ms call RETARDAR decfsz Veces,f goto LOOP_BYTE

;; Bit de paridad btfss C_Paridad,0 ; ¿Paridad? goto T_PAR ; PAR bsf LINEA_OUT ; IMPAR goto T_FIN T_PAR bcf LINEA_OUT T_FIN movlw 0Dh ; Esperar 833 ms call RETARDAR MOVLW 06h MOVWF Eviar return ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; RECIBIR :: Recoge el byte enviado por LINEA_IN y lo guarda en Dato ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; RECIBIR movlw 9Dh ; Veces que debería desbordarse movwf Veces clrf C_Paridad ; Resetear bit de paridad EST01 ;; Estado 01 -- Espera start bit movlw 01h ; Esperar 64 ms call RETARDAR decfsz Veces,1 ; Decrementa Veces goto A01 ; Aún no es 0 incf Veces,1 ; Ya es 0 A01 btfsc LINEA_IN ; ¿Linea ha pasado a 0? goto EST01 ; Aún no decfsz Veces,1 ; Si, ¿Ha durado lo suficiente? goto RECIBIR ; No EST02 ;; Estado 02 -- Saltar start bit y leer primer dato movlw 14h ; Esperar 833+833/2 ms (20d)

Page 30: Transmision de datos por radiofrcuencia

30

call RETARDAR call LEER movlw 07h ; Ahora tomaremos otros 7 bits movwf Veces EST03 ;; Estado 03 -- Leer 7 bits restantes movlw 0Dh ; Para esperar 833 ms (13d) call RETARDAR call LEER decfsz Veces,1 ; ¿Leído un byte? goto EST03 ; No bsf PORTB,7

;; Estado 04 -- Leer bit de paridad movlw 0Dh ; Para esperar 833 ms (13d) call RETARDAR

;; Comprobar bits de paridad btfsc LINEA_IN goto IMPAR ; Linea = 1 PAR btfss C_Paridad,0 ; Linea = 0 goto BIEN goto MAL IMPAR Btfsc C_Paridad,0 goto BIEN MAL movlw 00h goto OK BIEN movlw 01h OK movwf ESTADO return ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Rutina de Servicio a la Interrupción. Estados: ;; ;; 01 - Espera start bit 64 ms ;; 19 - Leer primer BIT 833 + 833/2 ms ;; 13 - Lectura de bits 833 ms ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; RSI MOVWF Temp ; Guardamos W DECFSZ Contador,1 ; Decrementa. ¿Contador = 0? GOTO SEGUIR ; Si contador != 0 ir a Seguir MOVLW 01h ; Continuar cede el paso MOVWF Continuar SEGUIR

MOVLW V_TMR0 MOVWF TMR0 ; Recarga TMR0 BCF INTCON,T0IF ; Borra bandera de interrupción BSF INTCON,T0IE ; Rehabilita interrupción RTIE MOVFW Temp ; Restaura W RETFIE ; Repone GIE y Retorna END

Page 31: Transmision de datos por radiofrcuencia

31

Programa 2: Programa principal

Este es el programa principal con el que se configuran las

placas y se envían todos los caracteres introducidos por el

teclado.

;; PROTOCOLO RS232 simple ;; ;; Programa que lee el bit que llega por una LINEA y lo procesa según ;; las normas RS232. Trabaja con un periodo de 833ms. Espera start bit ;; escaneando cada 64ms ;; ;; José Carlos Ruiz Luque ;; Francisco García Rodríguez #include <P16F84.INC> #include <ts2.inc> #include <tecla.inc> ;; Macros de atajo #DEFINE ENABLEPLACA BSF PORTA,4 #DEFINE DISABLEPLACA BCF PORTA,4 #DEFINE BANCO1 BSF STATUS,RP0 #DEFINE BANCO0 BCF STATUS,RP0 ;; SIMBOLOS para configurar las placas E EQU 3 ; Validar dato SC EQU 5 ; Reloj serial SD EQU 7 ; Línea transmisión serial BIT3 EQU 3 ; CLKD EQU 6 ; Reloj TXD EQU 0 ; Salida de datos RXD EQU 4 ; Entrada de datos RxTx EQU 1 ; Modo transmisor/receptor EN EQU 2 ; Habilitar placa ;; Configuraciones para los registros de las placas CONFA EQU 03h CONFB EQU 50h ; Configuración del puerto ASup EQU 10h ; Mitad superior del registro A de xemics AInf EQU 30h ; Mitad inferior del registro A de xemics INI EQU 08h ; Configuración inicial del puerto B udata ;; Registros Generales utilizados TRANS RES 2 ; Configuracion de 16 bits de la placa CONT RES 1 ; Contador para los 8 bits BACK RES 1 ; Guarda la configuracion del puerto B HF code 0 goto INICIO Inter code 4 goto RSI CodPrin code

Page 32: Transmision de datos por radiofrcuencia

32

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; CODIGONUMERO ;; ;; Convierte un un número binario a su correspondiente codificación ;; en el display de 7 segmentos. Utiliza W como variable de entrada y ;; salida ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; CODIGONUMERO

MOVLW high CODIGONUMERO MOVWF PCLATH MOVF POS, W ADDWF PCL, 1

retlw 3Fh ; código del 0 retlw 06h ; código del 1 retlw 5Bh ; código del 2 retlw 4Fh ; código del 3 retlw 66h ; código del 4 retlw 6Dh ; código del 5 retlw 7Dh ; código del 6 retlw 07h ; código del 7 retlw 7Fh ; código del 8 retlw 67h ; código del 9 RETLW 77h ; A RETLW 7Ch ; B RETLW 39h ; C RETLW 5Eh ; D RETLW 79h ; E RETLW 71h ; F ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ESCRIBIR ;; ;; Vuelca el byte recibido en el display de 7 segmentos y espera 1,5 s ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ESCRIBIR BANCO1 ; Guarda la configuración del puerto B movfw TRISB movwf BACK clrf TRISB BANCO0 movfw Dato

movwf PORTB movlw 17h call RETARDAR BANCO1 movfw BACK movwf TRISB BANCO0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Page 33: Transmision de datos por radiofrcuencia

33

INICIO

;; Configuramos el puerto B, interfaz con la placa RF BANCO1

MOVLW CONFB MOVWF TRISB MOVLW CONFA MOVWF TRISA BANCO0

;; Inicializamos el puerto B MOVLW INI MOVWF PORTB DISABLEPLACA

;; Transmitimos el registro A MOVLW TRANS

MOVWF FSR MOVLW ASup MOVWF INDF INCF FSR, F MOVLW AInf MOVWF INDF CALL transmitirConf BEGIN

;; Se habilita o no el circuito BTFSC PORTA, 0 GOTO UNO DISAB LEPLACA ; inhibe el circuito GOTO BEGIN UNO ;; Se configura en el modo de ejecución del transceptor SIG

BTFSS PORTA,1 GOTO TRANSIM bsf PORTB, RxTx ; Funcionamiento Receptor ENABLEPLACA ; se habilita el circuito call RECIBIR

call ESCRIBIR GOTO BEGIN TRANSIM Escanear call Key_Scan movlw 80h SUBWF Tecla, w btfss STATUS, 0 goto TCOD ; Ha leido algo btfsc STATUS, 2 goto E scanear TCOD

call Cods_Tecla call CODIGONUMERO movwf Eviar bsf OPTION_REG, NOT_RBPU

Page 34: Transmision de datos por radiofrcuencia

34

BANCO1 MOVLW CONFB MOVWF TRISB MOVLW CONFA MOVWF TRISA BANCO0 MOVLW INI MOVWF PORTB bcf PORTB, RxTx ; Se configura como emisor ENABLEPLACA ; Se Activa la placa call TRANSMITIR ; Se transmite el Dato DISAB LEPLACA ; Se desactiva la placa bcf PORTB, TXD GOTO BEGIN ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; CONFIGURACION :: Transmitir en serie configuración de las placas ;; ;; Envía mitad superior y luego inferior del registro de ;; configuración de las placas a un ritmo de 5us cada ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; transmitirConf

MOVLW TRANS MOVWF FSR BCF PORTB,E ; Comienza la configuración de la placa CLRF CONT ; Reinicia contador B1

BCF PORTB,SC ; Conmutar a bajo el reloj RLF INDF,F ; Rotar a izquierda TRANS BCF PORTB,SD ; Poner señal de envío a cero BTFSC STATUS,C ; ¿ Enviar un 1 ? BSF PORTB,SD ; Pone señal de envío a uno BSF PORTB,SC ; Conmutar a alto el reloj INCF CONT,1 ; Contar rotaciones realizadas BTFSS CONT,BIT3 ; ¿ Se ha rotado 8 veces ? GOTO B1 ; No, volver a empezar CLRF CONT ; Si, reiniciar contador INCF FSR,F ; Siguiente byte B2

BCF PORTB,SC RLF INDF,F BCF PORTB,SD BTFSC STATUS,C BSF PORTB,SD BSF PORTB,SC INCF CONT,1 BTFSS CONT,BIT3 GOTO B2 BSF PORTB,E ; Configuración terminada NOP BCF PORTB,SC BCF PORTB,SD RETURN END

Page 35: Transmision de datos por radiofrcuencia

35

7 Bibliografía

E. Martín Cuenca “Microcontroladores PIC”

Ed: Paraninfo, 1998