Serie Asincrona en C

download Serie Asincrona en C

of 17

Transcript of Serie Asincrona en C

Lenguaje C aplicado a microcontroladores PIC

(Compiladores de CCS)

Comunicacin Serie Asncrona en C

ATE-Universidad de Oviedo-Fernando Nuo

1

Lenguaje C aplicado a microcontroladores PIC

COMUNICACIN SERIE ASNCRONA en C (compiladores de CCS) La Configuracin de una Comunicacin Serie Asncrona desde el compilador PCM de CCS est gobernada, de manera fundamental por la directiva #USE RS232 Aunque la directiva se llame as, sirve para configurar cualquier transferencia serie asncrona y no slo RS232, que no deja de ser una de las posibles normas Los niveles elctricos asociados a los niveles lgicos de recepcin/transmisin son los correspondientes a la tensin de alimentacin del microcontrolador y no a los de la norma RS232 El asistente del entorno PCW (PIC Wizard) permite definir, para esta directiva: Velocidad de transmisin (en baudios) Qu pin se emplear para la transmisin Qu pin se utilizar para la recepcin Si se va a utilizar o no bit de paridad y de qu tipo (par o impar)2

Comunicacin Serie Asncrona en C

ATE-Universidad de Oviedo-Fernando Nuo

Lenguaje C aplicado a microcontroladores PIC

Comunicacin serie asncrona

Posible ms de un puerto

PIC Wizard para configuracin de comunicaciones

Comunicacin Serie Asncrona en C

ATE-Universidad de Oviedo-Fernando Nuo

3

Lenguaje C aplicado a microcontroladores PIC

Opciones de la directiva #USE RS232 : BAUD= x x sera la velocidad de comunicacin (en baudios). Para que el compilador inserte el cdigo necesario para transmitir/recibir a la velocidad indicada, debe conocer la frecuencia del oscilador que se va a utilizar. Deber pues existir previamente una directiva #USE DELAY(clock=frec.) Si la velocidad de transmisin indicada no se pudiera alcanzar con un error inferior al 3%, se generara a la hora de realizar la compilacin un mensaje de error del tipo: Baud rate out of range salvo que se incluya una opcin BRGH1OK en la directiva (asumimos ese error) XMIT=pin RCV=pin Pin de transmisin que se va a utilizar (p.e.: xmit=PIN_C6) Pin de recepcin que se va a utilizar (p.e.: rcv=PIN_C7)

Si el microcontrolador seleccionado tiene mdulo SCI y se especifican los pines asociados como los que se deben utilizar, la transmisin y/o recepcin se har con el hardware disponible, en caso contrario ser implementado por softwareComunicacin Serie Asncrona en CATE-Universidad de Oviedo-Fernando Nuo

4

Lenguaje C aplicado a microcontroladores PIC

ENABLE=pin Durante la transmisin, el pin especificado estar en estado alto y durante la recepcin en estado bajo . Ese pin se puede utilizar para habilitar bien la transmisin o bien la recepcin en una comunicacin semi-dplex como puede ser el caso del control de los drivers de un bus RS485 RESTART_WDT Se insertar cdigo para resetear el Watchdog durante la espera por un byte (para funciones que se quedan esperando) a que llegue algo INVERT Con esta opcin, se invierte la polaridad de los niveles asociados a los pines de la comunicacin: el 0 correspondera a tensin y el 1 a masa. El estado inactivo o de reposo (a 1) se correspondera con tensin nula Esta opcin no debera utilizarse si se emplea el mdulo SCI interno BITS=x Se especifica el tamao de los datos que sern enviados, x puede tomar un valor comprendido entre 5 y 9 si se implementa por software la comunicacin o bien de 8 9 si se emplea el mdulo SCI internoComunicacin Serie Asncrona en CATE-Universidad de Oviedo-Fernando Nuo

5

Lenguaje C aplicado a microcontroladores PIC

FLOAT_HIGH En estado alto, la lnea no estar en un nivel alto sino en un estado de tensin flotante debido a que la salida que la controla es del tipo drenador (o colector) abierto BRGH1OK Con esta opcin el compilador permite la generacin de cdigo an en aquellos dispositivos que presentarn problemas en su velocidad de transmisin PARITY=x -> x puede ser N (none: sin), O (odd: impar) o E (even: par) Si se especifica el empleo de paridad, se enva un bit adicional como comprobacin y en el supuesto de que se produzca un error, ste quedara registrado en una variable denominada RS232_ERRORS ERRORS Si se emplea esta opcin, el compilador define una variable llamada RS232_ERRORS que recoge los errores en cada recepcin y los resetea despus de que stos se produzcanComunicacin Serie Asncrona en CATE-Universidad de Oviedo-Fernando Nuo

6

Lenguaje C aplicado a microcontroladores PIC

La variable RS232_ERRORS (definida por el compilador) contiene: a) Si se est utilizando una implementacin software: En el bit 7, el 9 bit si se est utilizando tamao de 9 bits en transmisin El bit 6 se pone a 1 si se produjo un fallo en el envo con el modo de tensin flotante de salida b) Si se est empleando una UART interna: Es una copia del registro RCSTA (slo para recepcin), salvo el bit 0 que se emplea para indicar error de paridad

Registro RCSTA

Comunicacin Serie Asncrona en C

ATE-Universidad de Oviedo-Fernando Nuo

7

Lenguaje C aplicado a microcontroladores PIC

Ms acerca de la Directiva #USE RS232(opcin, opcin,...) Si la implementacin va a realizarse por software (no se va a utilizar un mdulo SCI interno), es importante que las directivas #USE FAST_IO o bien #USE FIXED_IO vayan delante de esta directiva pero no la directiva #USE STANDARD_IO por la manera en que se generara el cdigo de puesta a 1 o puesta a 0 de las lneas de salida Las funciones integradas del compilador ms usadas para comunicacin serie asncrona a las que afecta esta directiva son las siguientes: Para CONFIGURACIN: Para TRANSMISIN: set_uart_speed( ) putc() o su equivalente: putchar() puts() printf() kbhit() getc() o sus equivalentes getch() y getchar() gets()ATE-Universidad de Oviedo-Fernando Nuo

Para RECEPCIN:

Comunicacin Serie Asncrona en C

8

Lenguaje C aplicado a microcontroladores PIC

Las Funciones Integradas para la Com. Serie Asncrona (Configuracin): set_uart_speed(baudios) Esta funcin slo se puede emplear en aquellos dispositivos que utilizan el mdulo SCI (USART) interno hardware. La funcin se emplea para cambiar la velocidad de transmisin/recepcin en tiempo de ejecucin (no en la compilacin) P.e.: switch( input_d() & 0x03) { case 0: set_uart_speed(2400); break; case 1: set_uart_speed(4800); break; case 2: set_uart_speed(9600); break; case 3: set_uart_speed(19200); break; } //Con los pines RD0 y RD1 se selecciona la velocidadATE-Universidad de Oviedo-Fernando Nuo

Comunicacin Serie Asncrona en C

9

Lenguaje C aplicado a microcontroladores PIC

Las Funciones Integradas para la Com. Serie Asncrona (Transmisin): putc() putchar() (son idnticas) putc(caracter) Se enva un carcter a travs del pin especificado para envo (XMIT) en la directiva #USE RS232 anterior Ejemplo: char mensaje[10]; ... putc(*); for(i=0;i 5V 0 -> 0V Micro a 5V lectura y escritura 1 -> -5V a -15V 0 -> +5V a +15V Escritura RS232 1 -> -3V a -15V 0 -> +3V a +15V Lectura RS232

Existen varios circuitos integrados comerciales que realizan esta adaptacin con muy pocos componentes (p.e. la familia MAX220 a 249) La conexin puede realizarse utilizando las lneas que se consideren oportunas. Se puede simplificar el conexionado y obviar las lneas de pregunta-respuesta engaando al emisor para hacerle creer que el receptor est siempre listo. El truco pasa por puentear las lneas de peticin de envo y las respuestas.Comunicacin Serie Asncrona en CATE-Universidad de Oviedo-Fernando Nuo

20

Lenguaje C aplicado a microcontroladores PIC

Emisores/Receptores de 2 canales para adaptacin TTL - RS232 y viceversa Una sola alimentacin de 5V para generar tensiones de +10V y -10V

Comunicacin Serie Asncrona en C

ATE-Universidad de Oviedo-Fernando Nuo

21

Lenguaje C aplicado a microcontroladores PIC

Conexin serie segn norma RS232: Comunicacin PIC - PC (puerto serie)

1 -> 5V 0 -> 0V RX TX GND EJEMPLO DE CONEXIN A 3 HILOS FULL DPLEX Driver RS232 (MAX232)

Niveles escritura RS232 1 -> -5V a -15V 0 -> +5V a +15V TX RX GND Niveles lectura RS232 1 -> -3V a -15V 0 -> +3V a +15V Pin3 Pin2 Pin5

Comunicacin Serie Asncrona en C

ATE-Universidad de Oviedo-Fernando Nuo

22

Lenguaje C aplicado a microcontroladores PIC

La Norma RS485 Es una norma de comunicacin serie asncrona que utiliza dos lneas (A y B) de manera que la tensin diferencial entre ambas marca el nivel lgico que se est enviando. La transferencia es semi-dplex ya que slo es posible que un equipo enve, gobernando las lneas de datos A y B, y otro u otros equipos reciban. Est pensada para una comunicacin multipunto. La norma RS485 define nicamente la especificacin elctrica del interface y no un conector especfico. El medio fsico es un par de hilos trenzados entre s para reducir el posible ruido electromagntico inducido. El estndar RS485 permite la interconexin de hasta 32 dispositivos sobre un nico par de hilos, con velocidades de hasta 10Mbits por segundo y una distancia mxima de 1200 metros. Ambas magnitudes, velocidad y distancia estn ligadas entre s, de manera que si se aumenta una, se debe reducir la otra.Comunicacin Serie Asncrona en CATE-Universidad de Oviedo-Fernando Nuo

23

Lenguaje C aplicado a microcontroladores PIC

Posibles Circuitos de adaptacin a un bus RS485 Impedancias de terminacin a ambos lados

Emisor (driver)

Receptor (receiver)

Emisor/Receptor (transceiver)

El margen de la tensin de modo comn permitida en los terminales de entrada A y B respecto a la masa del receptor est comprendida entre -7V y 12V. Si el terminal A est a una tensin superior a B (con un valor diferencial superior a 0,2V) se estar recibiendo un 1 y en caso contrario (tensin de B superior en ms de 0,2V a A) se interpreta un 0Comunicacin Serie Asncrona en CATE-Universidad de Oviedo-Fernando Nuo

24

Lenguaje C aplicado a microcontroladores PIC

Circuitos de Interface RS485 Las seales elctricas que es capaz de generar y leer la USART interna del microcontrolador (o su implementacin software) deben adaptarse a los niveles diferenciales RS485 mediante algn circuito de interface. Para permitir el envo y la recepcin con un mismo circuito se debe emplear un transceiver. Son circuitos que adems pueden soportar colisiones, es decir que ms de un circuito transmisor est emitiendo (o tratando de emitir ya que se producir un error en los mensajes de ambos) El transceiver integrado ms popular probablemente sea el 75176, capaz de realizar la adaptacin TTL-RS485 y viceversa. Otro transceiver utilizado con frecuencia es el 75184 que es totalmente compatible en patillaje y funcionalidad con el 75176 pero que adems incluye una red de entrada supresora de transitorios de tensin sobre las lneas del bus.Comunicacin Serie Asncrona en C 25

ATE-Universidad de Oviedo-Fernando Nuo

Lenguaje C aplicado a microcontroladores PIC

Transceiver 75176 Se alimenta con una tensin nica de 5V y combinan el funcionamiento de un driver diferencial triestado de salida con una entrada diferencial para la recepcin.

Encapsulado DIP8 Tabla de verdad como emisor

Diagrama lgico Tabla de verdad como receptor

Comunicacin Serie Asncrona en C

ATE-Universidad de Oviedo-Fernando Nuo

26

Lenguaje C aplicado a microcontroladores PIC

Conexin del transceiver RS485 al microcontrolador Adems de los pines de Recepcin y Transmisin, necesitaremos un pin adicional que controle el sentido de los datos en cada momento (entrada o salida) para habilitar el bloque envo o de recepcin del transceiver. Con dicho pin se podra controlar el terminal DE (habilita envo) y RE (habilita recepcin) del 75176. Como presentan una lgica opuesta, se puede emplear un nico pin para controlar ambos: si pin=0 se habilita la recepcin y se anula el envo, si pin=1 se activa envo y se anula recepcin. Microcontrolador TX RX Enable

75176D R DE RE A B

Comunicacin Serie Asncrona en C

ATE-Universidad de Oviedo-Fernando Nuo

27

Lenguaje C aplicado a microcontroladores PIC

Programacin en C para transferencia sobre RS485: La directiva #USE RS232 permite definir, adems de los pines de envo y recepcin, un pin de habilitacin que se coloca a 1 durante el envo y a 0 durante la recepcin. Dicho pin se activar por software ya que dicha salida no est disponible en la USART integrada, pero desde el punto de vista del programador, una vez definida la directiva, ser posible utilizar las funciones integradas del compilador. Ejemplo: #use rs232(baud=14400 ,xmit=PIN_C6,rcv=PIN_C7,enable=PIN_C2) ... if (kbhit()) { cola_circular[cola]=getch(); cola++; if (cola>(TAM_BUF_UART-1)) cola=0; }Comunicacin Serie Asncrona en CATE-Universidad de Oviedo-Fernando Nuo

28

Lenguaje C aplicado a microcontroladores PIC

Nota de Inters: Es posible tener activas varias transferencias asncronas del mismo o de diferentes tipos (RS232, RS485,...) con el mismo microcontrolador PIC. La configuracin realizada con la directiva #USE RS232 tiene efecto desde el lugar en que se encuentra dicha directiva para las funciones getc(), putc(), printf() y kbhit() que aparezcan a continuacin y hasta que aparezca una nueva directiva #USE RS232 #USE RS232 no es una lnea de cdigo ejecutable si no una configuracin para las funciones que le siguen, trabaja de manera similar a una directiva #DEFINE. De este modo, podramos incluir una directiva #USE RS232 justo antes de cada una de las funciones que queramos utilizar para una transferencia asncrona con una determinada configuracin o bien definir unas nuevas funciones con la cabecera de configuracin correspondiente al tipo de comunicacin serie asncrona que queramos emplear.Comunicacin Serie Asncrona en CATE-Universidad de Oviedo-Fernando Nuo

29

Lenguaje C aplicado a microcontroladores PIC

Ejemplo: Se incluyen dos directivas y se definen funciones especficasvoid enviar_RS485( char c) { putc( c ); } char tomar_RS485( ) { return(getc( )); } //Para enviar por RS485 //Para recibir por RS485

#use rs232(baud=9600 ,xmit=PIN_B1,rcv=PIN_B2) void enviar_RS232( char c) //Para enviar por RS232 { putc( c ); } char tomar_RS232( ) //Para recibir por RS232 { return(getc( )); } main( ) { ... caracter=tomar_RS485(); Recibo por RS485 enviar_RS232(carcter-0); } enviar_RS485(nuevo);

Envo por RS232 Envo por RS48530

Comunicacin Serie Asncrona en C

ATE-Universidad de Oviedo-Fernando Nuo

PARA RS232

PARA RS485

#use rs232(baud=14400 ,xmit=PIN_C6,rcv=PIN_C7,enable=PIN_C2)

Lenguaje C aplicado a microcontroladores PIC

El mismo ejemplo: Se incluye la directiva justo antes de la llamada a la funcin integrada main() {... #use rs232(baud=14400 ,xmit=PIN_C6,rcv=PIN_C7,enable=PIN_C2) carcter = getc( ); //Recibir con la configuracin para RS485

#use rs232(baud=9600 ,xmit=PIN_B1,rcv=PIN_B2) putc(carcter-0); //Enviar con la configuracin de RS232

#use rs232(baud=14400 ,xmit=PIN_C6,rcv=PIN_C7,enable=PIN_C2) putc(nuevo); }Comunicacin Serie Asncrona en CATE-Universidad de Oviedo-Fernando Nuo

//Enviar con la configuracin RS232

31

Lenguaje C aplicado a microcontroladores PIC

A CONTINUACIN ALGUNOS EJEMPLOS DE CONEXIN ENTRE EL PIC EN PICDEM2 plus Y EL PUERTO SERIE DE UN PC, TRABAJANDO STE COMO EMULADOR DE TERMINAL Programas > Accesorios > Comunicaciones > Hyper Terminal Se mostrar lo que se reciba por el COMn y sacar por dicho puerto serie el cdigo ASCII correspondiente a la tecla que se pulse con el teclado del PC

Configuracin de HyperTerminal

Comunicacin Serie Asncrona en C

ATE-Universidad de Oviedo-Fernando Nuo

32

Lenguaje C aplicado a microcontroladores PIC

Se podra utilizar una utilidad del Compilador de CCS: SIOW Tambin es un emulador de terminal

Comunicacin Serie Asncrona en C

ATE-Universidad de Oviedo-Fernando Nuo

33