UART

39
Comunicación Serial

Transcript of UART

Comunicación Serial

Comunicación Serial

• La comunicación serie se puede dividir en dos categorías comunicación:

– Síncrona: requiere de un reloj y una línea de datos, los datos se van transmitiendo uno a uno con cada pulso de reloj

– Asíncrona: los dispositivos se ponen de acuerdo en la velocidad de comunicación uno de ellos transmite y el otro recibe y/o viceversa

2

Comunicación Serial Asíncrona

3

Bit de Inicio

Bits de Datos

Bit de Paridad

Bit de Parada

Parámetros: • Velocidad de Comunicación (bps):

• 1200, 2400, 4800, 9600, 19200, etc.

• Número de bits de Datos: • 8 o 9 bits

• Tipo de Paridad:

• Par, Impar, Ninguna • Número de bits de Parada:

• 1, 1 ½ o 2

Administrador
Nota adhesiva
en reposo esta en un alto cuando recibe un bajo si el bajo dura un tiempo T/2 asume que es un ruido
Administrador
Nota adhesiva
se transmiten 8bits de datos
Administrador
Nota adhesiva
1seg/9600 = 104us T=104us T/2 = 52us

Modulo USART del PIC

• PIC16F877A, tiene un modulo de comunicación serial UNIVERSAL SYNCHRONOUS ASYNCHRONOUS RECEIVER TRANSMITTER (USART)

• También conocido como Serial Comunications Interface (SCI)

• USART puede ser configurado como: – full-duplex asynchronous, que permite comunicación con

otros dispositivos asíncronos como microcontroladores o un PC.

– half-duplex synchronous system, que permite con otros dispositivos síncronos como ADC, DAC, EEPPOM, etc

4

TXSTA

5

Administrador
Nota adhesiva
si es modo asincrono no importa si es sincrona indica si es maestro o esclavo
Administrador
Nota adhesiva
permite habilitar o no el 9no bits el programador es el encargado de verificar la paridad

TXSTA

6

Administrador
Nota adhesiva
modo asincrono 1 modo rapido 0 modo lento dependiendo el modo la formula cambia
Administrador
Nota adhesiva
si trabajamos con 8 bits no le colocamos nada

RCSTA

7

RCSTA

8

Velocidad Comunicación

9

Administrador
Nota adhesiva
ejemplo si se tiene 9600 y 20MHz 20M despejamos de la formula X= ---------- -1 = 129.2 9600*16 con 4MHz X=25.04

Velocidad Comunicación

10

Administrador
Nota adhesiva
a velocidades altas la distacia es menor para comunicarlo con una PC por ejemplo

Módulo de Transmisión

11

Administrador
Nota adhesiva
establece la velocidad

Módulo de Recepción

12

Util_877a.h

//UART

void UART_init(int);

void UART_putc(char);

char UART_getc(void);

13

Util_877a.c void UART_init(int bps)

{

TXIE = 0;

RCIE = 1;

PEIE = 1;

SPEN = 1;

CREN = 1;

SPBRG = ((int)(_XTAL_FREQ*1000/(16UL*(bps+1))));

BRGH = 1;

SYNC = 0;

TXEN = 1;

TX9 = 0;

RX9 = 0;

TRISC = 0x80;

}

14

Administrador
Nota adhesiva
RX entrada; TX salida

Util_877a.c void UART_putc(char c)

{

while(!TXIF)

continue;

TXREG = c;

}

char UART_getc(void)

{

while(!RCIF)

continue;

return RCREG;

}

15

Administrador
Nota adhesiva
cuando el modulo esta ocupado enviando la nformacion espera q sea transmitida luego se escribe en TXREG
Administrador
Nota adhesiva
cuando se activa la bandera RCIF es que se ha recibido la información

Simulación

16

Simulación

17

Comunicación Serial #include "pic.h"

#include "util_877a.h"

#include <stdio.h>

char text[20];

char kb, kbr, cont = 0;

void main()

{

LCD_init(LCD_4LSB | LCD_DATA_B | LCD_CONTROL_B |

LCD_RS_4 | LCD_EN_5);

KB_init(KB_DATA_D);

UART_init(9600);

// cod main

}

18

Administrador
Nota adhesiva
cedena de caracteres para ecribir en la lcd

Comunicación Serial GIE = 1;

LCD_clear();

while(1)

{

kb = KB_get(KB_PRESS);

if(kb!='N')

{

UART_putc(kb);

}

__delay_ms(100);

}

}

19

Administrador
Nota adhesiva
para q el carater llegue de forma serial se produsca una interrupcion
Administrador
Nota adhesiva
indica que debo leer cuando presiono y suelto la tecla kb_scan kb-click kb-press parte de transmision

Comunicación Serial void interrupt s()

{

if(RCIF)

{

kbr = UART_getc();

if(cont==15)

{

cont = 0;

LCD_clear();

}

else

cont++;

LCD_putc(kbr);

RCIF = 0;

}

}

20

Administrador
Nota adhesiva
chequemos si la bandera de recepción a cambiado luego leemos la informacion del puerto serial

Comunicación PC Micro RS232

21

Puerto Serial PC

22

Cable Comunicación RS232

23

MAX 232

24

Comunicación PC Micro MAX232

25

Interfaz sin MAX232

26

Enlaces TTL

27

Lazo Corriente 20mA

28

Lazo Corriente 20mA

29

Interfaz TTL/20mA

30

RS485

31

Util_877a.h

32

//RS485

void RS485_init(int);

void RS485_putc(char);

char RS485_getc(void);

Util_877a.c

33

void RS485_init(int bps)

{

TXIE = 0; RCIE = 1; PEIE = 1;

SPEN = 1; CREN = 1;

SPBRG = ((int)(_XTAL_FREQ*1000/(16UL*(bps+1))));

BRGH = 1;

SYNC = 0; TXEN = 1;

TX9 = 0; RX9 = 0;

TRISC = 0x80;

RC5 = 0;

__delay_ms(5);

}

Administrador
Nota adhesiva
para indicar si se quiere resibir o enviar normalmente esta en resibir

Util_877a.c

34

void RS485_putc(char c)

{

RC5 = 1;

__delay_ms(5);

while(!TXIF)

continue;

TXREG = c;

__delay_ms(5);

RC5 = 0;

}

char RS485_getc(void)

{

while(!RCIF)

continue;

return RCREG;

}

Administrador
Nota adhesiva
1 para transmitir luego se coloca en 0 para resibir

RS485

35

Administrador
Nota adhesiva
cable par trenzado

Comunicación Serial RS485 #include "pic.h"

#include "util_877a.h"

#include <stdio.h>

char text[6], rtext[6];

char temp, temp_ant = 0, rtemp;

void main()

{

LCD_init(LCD_8B | LCD_DATA_B | LCD_CONTROL_C |

LCD_RS_0 | LCD_EN_1);

ADC_init(ADC_FOSC2 | ADC_RIGHT | ADC_A_RA0);

RS485_init(9600);

// cod main

}

36

Cod main LCD_clear();

LCD_gotoxy(0,0);

LCD_puts("local Temp=");

LCD_gotoxy(0,1);

LCD_puts("remot Temp=");

GIE = 1;

while(1)

{

// cod while

}

37

Cod while

temp = (char)(ADC_get(0)/100);

if(temp != temp_ant)

{

GIE = 0;

temp_ant = temp;

sprintf(text,"%d ",temp);

RS485_putc(temp);

LCD_gotoxy(12,0);

LCD_puts(text);

GIE = 1;

}

38

Administrador
Nota adhesiva
lemos el valor de la temperatura si ha variado se desabilita las interrupciones
Administrador
Nota adhesiva
transmicion

interrupción void interrupt s()

{

if(RCIF)

{

rtemp = RS485_getc();

if(rtemp>0)

{

sprintf(rtext,"%d ",rtemp);

LCD_gotoxy(12,1);

LCD_puts(rtext);

}

RCIF = 0;

}

}

39

Administrador
Nota adhesiva
recepcion