Transmision de datos por radiofrcuencia

Page 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

1


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

2


Introducción En el transceptor equipos.

desarrollo de XE 1201 para

la la

práctica se comunicación

utilizará el entre varios

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.

3


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 300500Mhz. 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.

4


Detalles de la descripci贸n de los pines:

5


Los pins que son accesibles al exterior:

Configuraci贸n de los pines de la placa RF:

6


Resumen de los valores algunos pins del chip:

mĂ­nimos,

7

mĂĄximos

y

tipos

para


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:

8


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 en los bit 15 y 14: D15 = 0 D14 = 0 Formato de los datos:

9

valores de


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 10


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 sincronizador no es necesario.

aplicaciones

cuando

el

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 11


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

12


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 inicializados con los siguientes valores:

• • • • •

Control pins. El reloj parado. Frecuencia de recepción PA = -12dBm. Fdev = +/- 125kHz.

a 16 KHz

13

registros

DR= 16 bits/s.

son


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

14


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 A B C

13 0 0 0

12 1 0 1

11 0 0 0

10 0 0 1

9 0 0 0

8 0 0 1

7 0 0 0

6 0 0 0

5 1 0 1

4 1 0 0

3 0 0 0

2 0 0 0

1 0 0 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 configuración de los registros se necesario para esta etapa.

va realizar, y la comentará el código

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. 15


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 TXD RxTx EN DE RXD SC CLKD SD

Pin Interfaz placa

Pin del puerto B

1 10 8 6 5 4 3 2

0 1 2 3 4 5 6 7

Estado del pin puerto b Salida Salida Salida Salida Entrada Salida Entrada 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.

16


;; 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 CONFB ASup AInf

EQU EQU EQU EQU

07h 50h 10h 30h

; Configuración del puerto B ; Mitad superior del registro A de xemics ; 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

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” configuración de registro de estado A anteriormente (tabla 1). La etiqueta “CONT” representa registro CONT que se comenta funcionamiento en el código.

representa la que se comentó

la dirección posteriormente

del su

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 17


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

; transmitimos el registro A MOVLW TRANS MOVWF FSR MOVLW ASup MOVWF INDF INCF FSR, F MOVLW AInf MOVWF INDF CALL transmitir

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. Begin

UNO SIG

BTFSC PORTA, 0 GOTO UNO BCF PORTB, EN GOTO SIG2

; Se habilita o no el circuito?

BSF PORTB, EN

; se habilita el circuito

BTFSS PORTA,1 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

; inhibe el circuito

; Se configura en el modo de ejecución

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 transmitir que se quedo antes sin hablar de ella:

18

función


transmitir MOVLW TRANS MOVWF FSR BCF PORTB,E CLRF CONT B1

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 B1 CLRF CONT INCF FSR,F

; Duerme el dispositivo ; Reinicia contador ; Conmutar a bajo el reloj ; Rotar a izquierda TRANS ; Poner señal de envío a cero ; ¿ Enviar un 1 ? ; Pone señal de envío a uno ; Conmutar a alto el reloj ; Contar rotaciones realizadas ; ¿ Se ha rotado 8 veces ? ; No, volver a empezar ; Si, reiniciar contador ; 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 NOP BCF PORTB,SC BCF PORTB,SD RETURN

; Configuración terminada

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.

19


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

20


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 1

Transmisor 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 = 19 - Leer primer BIT = 13 - Lectura de bits = RSI

MOVWF DECFSZ GOTO MOVLW MOVWF

Temp Contador,1 SEGUIR 01h Continuar

SEGUIR

MOVLW MOVWF BCF BSF MOVFW RETFIE

V_TIMER0 TIMER0 INTCON,TOIF INTCON,TOIE Temp

64 ms 833 + 833/2 ms 833 ms ; ; ; ;

Guardamos W Decrementa contador. Contador = 0? Si contador != 0 ir a Seguir Continuar cede el paso

; ; ; ; ;

Recarga TMR0 Borra bandera de interrupción Rehabilita interrupción RTIE Restaura W Repone GIE y Retorna

END

21


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. RETARDAR movwf clrf BANCO1 movlw movwf BANCO0 movlw movwf movlw movwf LOOP1

Contador Continuar

; Tiempo espera (x64ms)

b'00000111' OPCION V_TIMER0 TIMER0 b'10100000' INTCON

; Desbordar cada 64 ms

btfss goto

Continuar,0 LOOP1

; Esperar señal de continuar

movlw movwf

00h INTCON

; Activa GIE y TOIE

; Activa GIE y TOIE TMR0

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. LEER

btfsc goto bcf rrf return

LEER1: bsf rrf incf return

LINEA_IN LEER1 STATUS,0 Dato,1

; Mirar la LINEA_IN ; Poner un 1 ; Poner un 0 ; Rotamos y lo cargamos

STATUS,0 Dato, 1 C_Paridad,1

; Ponemos bit en STATUS,0 ; Rotamos sin cambiar W ; Incrementar contador de paridad

22


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

23


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. CODIGONUMERO MOVLW MOVWF MOVF ADDWF retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw RETLW RETLW RETLW RETLW RETLW RETLW

high CODIGONUMERO PCLATH POS, W PCL, 1 3Fh 06h 5Bh 4Fh 66h 6Dh 7Dh 07h 7Fh 67h

; ; ; ; ; ; ; ; ; ;

código código código código código código código código código código

77h 7Ch 39h 5Eh 79h 71h

; ; ; ; ; ;

del del del del del del del del del del

0 1 2 3 4 5 6 7 8 9

A B C D E F

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.

24


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.

25


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.

26


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

El retardar va después de escribir en la línea 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 #define #define #define #define

LINEA_OUT LINEA_IN V_TMR0 BANCO1 BANCO0

PORTB,0 PORTB,4 06h bsf STATUS,RP0 bcf STATUS,RP0

GLOBAL Dato, Eviar, TRANSMITIR, ESTADO, RECIBIR, RSI, Contador, Continuar, RETARDAR udata ;; VARIABLES Contador res Temp res Continuar res Veces res Eviar res C_Paridad res Dato res Recepcion res ESTADO res ts2

1 1 1 1 1 1 1 1 1

; ; ; ; ; ; ; ;

Estado del circuito Numero leído Variable para RSI BYTE enviado Contador de paridad BYTE recibido Indica si hubo un error

code

27


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 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 movwf movlw movwf

V_TMR0 TMR0 b'10100000' INTCON

; Desbordar cada 64 ms

btfss goto

Continuar,0 LOOP1

; Esperar señal de continuar

; Activa GIE y TOIE TMR0

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 rrf incf return

STATUS,0 Dato, 1 C_Paridad,1

; Ponemos bit en STATUS,0 ; Rotamos sin cambiar W ; Incrementar contador de paridad

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 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 call RETARDAR

; Esperar 833 ms

28


movlw movwf

08h Veces

LOOP_BYTE btfss goto bsf incf goto

;; Envío del byte Eviar,0 ; Enviar 1 ó 0? ENVIA_0 ; 0 LINEA_OUT ; 1 C_Paridad,f ; Incrementar contador de paridad RESTAR

ENVIA_0 bcf

LINEA_OUT

RESTAR rrf movlw call decfsz goto

Eviar,1 0Dh RETARDAR Veces,f LOOP_BYTE

;; Bit de paridad btfss C_Paridad,0 goto T_PAR bsf LINEA_OUT goto T_FIN

; Esperar 833 ms

; ¿Paridad? ; PAR ; IMPAR

T_PAR T_FIN

bcf

LINEA_OUT

movlw call

0Dh RETARDAR

MOVLW MOVWF

06h Eviar

; Esperar 833 ms

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)

29


call call movlw movwf

RETARDAR LEER 07h Veces

; Ahora tomaremos otros 7 bits

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

PAR

;; Comprobar bits de paridad btfsc LINEA_IN goto IMPAR ; Linea = 1 btfss C_Paridad,0 ; Linea = 0 goto BIEN goto MAL

IMPAR Btfsc goto

C_Paridad,0 BIEN

MAL

movlw goto

00h 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 DECFSZ GOTO MOVLW MOVWF

SEGUIR MOVLW MOVWF BCF BSF MOVFW RETFIE

Temp Contador,1 SEGUIR 01h Continuar V_TMR0 TMR0 INTCON,T0IF INTCON,T0IE Temp

; ; ; ;

Guardamos W Decrementa. ¿Contador = 0? Si contador != 0 ir a Seguir Continuar cede el paso

; ; ; ; ;

Recarga TMR0 Borra bandera de interrupción Rehabilita interrupción RTIE Restaura W Repone GIE y Retorna

END

30


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 #DEFINE DISABLEPLACA #DEFINE BANCO1 #DEFINE BANCO0 ;; SIMBOLOS E SC SD BIT3 CLKD TXD RXD RxTx EN

BSF BCF BSF BCF

PORTA,4 PORTA,4 STATUS,RP0 STATUS,RP0

para configurar las placas EQU 3 ; Validar dato EQU 5 ; Reloj serial EQU 7 ; Línea transmisión serial EQU 3 ; EQU 6 ; Reloj EQU 0 ; Salida de datos EQU 4 ; Entrada de datos EQU 1 ; Modo transmisor/receptor 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 Inter CodPrin

code goto code goto code

0 INICIO 4 RSI

31


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 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 retlw retlw retlw retlw retlw retlw retlw retlw retlw

3Fh 06h 5Bh 4Fh 66h 6Dh 7Dh 07h 7Fh 67h

; ; ; ; ; ; ; ; ; ;

cรณdigo cรณdigo cรณdigo cรณdigo cรณdigo cรณdigo cรณdigo cรณdigo cรณdigo cรณdigo

del del del del del del del del del del

0 1 2 3 4 5 6 7 8 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 movwf movlw call

Dato PORTB 17h RETARDAR

BANCO1 movfw BACK movwf TRISB BANCO0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

32


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 SIG

;;

Se configura en el modo de ejecuci贸n del transceptor

BTFSS GOTO

PORTA,1 TRANSIM

bsf PORTB, RxTx ENABLEPLACA

; Funcionamiento Receptor ; se habilita el circuito

call RECIBIR call ESCRIBIR GOTO BEGIN TRANSIM Escanear call movlw SUBWF btfss goto btfsc goto E

Key_Scan 80h Tecla, w STATUS, 0 TCOD STATUS, 2 scanear

; Ha leido algo

TCOD call call movwf bsf

Cods_Tecla CODIGONUMERO Eviar OPTION_REG, NOT_RBPU

33


BANCO1 MOVLW MOVWF MOVLW MOVWF BANCO0 MOVLW MOVWF

CONFB TRISB CONFA TRISA INI PORTB

bcf PORTB, RxTx ENABLEPLACA call TRANSMITIR DISAB LEPLACA bcf PORTB, TXD GOTO BEGIN

; ; ; ;

Se Se Se Se

configura Activa la transmite desactiva

como emisor placa el Dato la placa

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 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 RLF BCF BTFSC BSF BSF INCF BTFSS GOTO CLRF INCF

PORTB,SC INDF,F PORTB,SD STATUS,C PORTB,SD PORTB,SC CONT,1 CONT,BIT3 B1 CONT FSR,F

; ; ; ; ; ; ; ; ; ; ;

Conmutar a bajo el reloj Rotar a izquierda TRANS Poner señal de envío a cero ¿ Enviar un 1 ? Pone señal de envío a uno Conmutar a alto el reloj Contar rotaciones realizadas ¿ Se ha rotado 8 veces ? No, volver a empezar Si, reiniciar contador Siguiente byte

BCF RLF BCF BTFSC BSF BSF INCF BTFSS GOTO BSF NOP BCF BCF RETURN

PORTB,SC INDF,F PORTB,SD STATUS,C PORTB,SD PORTB,SC CONT,1 CONT,BIT3 B2 PORTB,E

; Configuración terminada

B2

PORTB,SC PORTB,SD

END

34


7 Bibliografía

E. Martín Cuenca “Microcontroladores PIC” Ed: Paraninfo, 1998

35


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.