Вы находитесь на странице: 1из 12

ISTP IDAT

ELECTRNICA

COMUNICACIN EN MICROCONTROLADORES PIC


A continuacin se presentan los tipos de comunicacin en Microcontroladores PIC.

UART O USART (TRANSMISOR Y RECEPTOR SNCRONO ASNCRONO UNIVERSAL)

Se disearon para convertir las seales que maneja el microcontrolador compatibles con el
protocolo RS232 y transmitirlas al exterior.
La USART del PIC puede ser configurada para operar en tres modos:

Modo Asncrono (full duplex (transmisin y recepcin simultneas)),

Modo Sncrono Maestro (half duplex)

Modo Sncrono Esclavo (half duplex)

El mdulo Asncrono de la USART consta de 4 mdulos fundamentales:

El circuito de muestreo

El generador de frecuencia de transmisin (Baud Rate)

El transmisor asncrono

El receptor asncrono.

EL RS-232

Tambin conocido como Electronic Industries Alliance RS-232C, es una interfaz que designa
una norma para el intercambio serie de datos binarios entre un DTE (Equipo terminal de datos)
y un DCE (Data Communication Equipment, Equipo de Comunicacin de datos).
La interfaz RS-232 est diseada para distancias cortas, de unos 15 metros o menos, y para
velocidades de comunicacin bajas, de no ms de 20 [Kb/s]. A pesar de ello, muchas veces se
utiliza a mayores velocidades con un resultado aceptable.
Para la conversin de voltajes aceptables para el protocolo RS232 se utilizan convertidores de
niveles RS232 a TTL y viceversa.
A continuacin se presenta un ejemplo del circuito de comunicacin por RS232 del
PIC16F628A y una PC:

[NOMBRE DEL AUTOR]

ISTP IDAT

ELECTRNICA

PUERTO PARALELO

Esta conformado por un conjunto de lneas de entrada y salida los cuales conforman una
puerta paralela esclava para poder conectarse con los buses de otros dispositivos,
Microcontroladores y/o microprocesadores.
En este tipo de comunicacin los datos se transmiten byte por byte en el bus conformado, en
contraposicin al puerto serie, que enva los datos bit a bit por el mismo hilo.

USB (UNIVERSAL SERIAL BUS)

Es un moderno protocolo de comunicacin para el cual Microchip tiene soporte con una serie
de PICs USB.
Estos Microcontroladores tienen implementado el hardware para el control del protocolo USB
en el cual se dio mucha importancia a la velocidad de procesamiento de estos PIC.
Mediante un complejo sistema de multiplicacin de frecuencia de oscilacin mediante PLL se
obtiene un clock de 96MHz el cual se divide y se asigna 48Mhz para el funcionamiento del
USB, y mediante otro divisor se puede asignar tambin otro clock para el funcionamiento del
microcontrolador.
El protocolo USB tiene mltiples aplicaciones y modos de funcionamiento, en la siguiente
imagen se presenta la Pila de Firmware de Microchip USB:

Estos Microcontroladores presentan los siguientes tipos de aplicaciones:

Propsito General (USB Hardware Driver)

HID (Human Interface Device)

CDC (Emulacin RS232)

USB Mass Storage

En el caso de aplicaciones de propsito general Microchip brinda el software necesario para el


desarrollo de estos. Por ejemplo para aplicaciones en Windows existe una librera dinmica
mpusbapi.dll el cual implementa funciones para aplicaciones en Ordenador el cual junto con
el driver mchpusb y el firmware desarrollado en el PIC se tiene comunicacin USB eficiente.

[NOMBRE DEL AUTOR]

ISTP IDAT

ELECTRNICA

El modo de transmisin de datos se puede realizar de tres maneras:

Control transfer

Interrupt Bulk

Isochronous

I2C (INTER-INTEGRATED CIRCUIT)

IC es un bus de comunicaciones serie. La velocidad es de 100Kbits por segundo en el modo


estndar, aunque tambin permite velocidades de 3.4 Mbit/s. Es un bus muy usado para
comunicar Microcontroladores y sus perifricos en sistemas integrados (Embedded Systems) y
generalizando ms para comunicar circuitos integrados entre si que normalmente residen en un
mismo circuito impreso.
La principal caracterstica de IC es que utiliza dos lneas para transmitir la informacin y una
de referencia :
SDA: datos
SCL: reloj
GND: masa
Las dos primeras lneas son drenador abierto, por lo que necesitan resistencias de pull-up.
Los dispositivos conectados al bus IC tienen una direccin nica para cada uno. Tambin
pueden ser maestros o esclavos. El dispositivo maestro inicia la transferencia de datos y
adems genera la seal de reloj, pero no es necesario que el maestro sea siempre el mismo
dispositivo, esta caracterstica se la pueden ir pasando los dispositivos que tengan esa
capacidad. Esta caracterstica hace que al bus IC se le denomine bus multimaestro.

SPI (SERIAL PERIPHERAL INTERFACE)

El Bus SPI es un estndar de comunicaciones, usado principalmente para la transferencia de


informacin entre circuitos integrados en equipos electrnicos. El bus de interface de
perifricos serie o bus SPI es un estndar para controlar casi cualquier electrnica digital que
acepte un flujo de bits serie regulado por un reloj

[NOMBRE DEL AUTOR]

ISTP IDAT

ELECTRNICA

Incluye una lnea de reloj, dato entrante, dato saliente y un pin de chip select, que conecta o
desconecta la operacin del dispositivo con el que uno desea comunicarse. De esta forma, este
estndar permite multiplexar las lneas de reloj.

CAN (CONTROLLER AREA NETWORK)

CAN es un protocolo de comunicaciones desarrollado por la firma alemana Robert Bosch


GmbH, basado en una topologa bus para la transmisin de mensajes en ambientes
distribuidos, adems ofrece una solucin a la gestin de la comunicacin entre mltiples CPUs
(unidades centrales de proceso).
Caractersticas:
Es un protocolo de comunicaciones normalizado, con lo que se simplifica y economiza la
tarea de comunicar subsistemas de diferentes fabricantes sobre una red comn o bus.
El procesador anfitrin (host) delega la carga de comunicaciones a un perifrico inteligente,
por lo tanto el procesador anfitrin dispone de mayor tiempo para ejecutar sus propias tareas.
Al ser una red multiplexada, reduce considerablemente el cableado y elimina las conexiones
punto a punto, excepto en los enganches.
El protocolo de comunicaciones CAN proporciona los siguientes beneficios:
Es un protocolo de comunicaciones normalizado, con lo que se simplifica y economiza la
tarea de comunicar subsistemas de diferentes fabricantes sobre una red comn o bus.
El procesador anfitrin (host) delega la carga de comunicaciones a un perifrico inteligente,
por lo tanto el procesador anfitrin dispone de mayor tiempo para ejecutar sus propias tareas.
Al ser una red multiplexada, reduce considerablemente el cableado y elimina las conexiones
punto a punto, excepto en los enganches.

CAN es un protocolo de comunicaciones serie que soporta control distribuido en tiempo real
con un alto nivel de seguridad y multiplexacin.
El establecimiento de una red CAN para interconectar los dispositivos electrnicos internos de
un vehculo tiene la finalidad de sustituir o eliminar el cableado. Las ECU, sensores, sistemas
antideslizantes, etc. se conectan mediante una red CAN a velocidades de transferencia de
datos de hasta 1 Mbps.
De acuerdo al modelo de referencia OSI (Open Systems Interconnection, Modelo de
interconexin de sistemas abiertos), la arquitectura de protocolos CAN incluye tres capas:
fsica, de enlace de datos y aplicacin, adems de una capa especial para gestin y control del
nodo llamada capa de supervisor.
Capa fsica: define los aspectos del medio fsico para la transmisin de datos entre nodos de
una red CAN, los ms importantes son niveles de seal, representacin, sincronizacin y
tiempos en los que los bits se transfieren al bus. La especificacin del protocolo CAN no define
una capa fsica, sin embargo, los estndares ISO 11898 establecen las caractersticas que
deben cumplir las aplicaciones para la transferencia en alta y baja velocidad.
Capa de enlace de datos: define las tareas independientes del mtodo de acceso al medio,
adems debido a que una red CAN brinda soporte para procesamiento en tiempo real a todos
los sistemas que la integran, el intercambio de mensajes que demanda dicho procesamiento
requiere de un sistema de transmisin a frecuencias altas y retrasos mnimos. En redes
multimaestro, la tcnica de acceso al medio es muy importante ya que todo nodo activo tiene
los derechos para controlar la red y acaparar los recursos. Por lo tanto la capa de enlace de

[NOMBRE DEL AUTOR]

ISTP IDAT

ELECTRNICA

datos define el mtodo de acceso al medio as como los tipos de tramas para el envo de
mensajes
Cuando un nodo necesita enviar informacin a travs de una red CAN, puede ocurrir que varios
nodos intenten transmitir simultneamente. CAN resuelve lo anterior al asignar prioridades
mediante el identificador de cada mensaje, donde dicha asignacin se realiza durante el diseo
del sistema en forma de nmeros binarios y no puede modificarse dinmicamente. El
identificador con el menor nmero binario es el que tiene mayor prioridad.
El mtodo de acceso al medio utilizado es el de Acceso Mltiple por Deteccin de Portadora,
con Deteccin de Colisiones y Arbitraje por Prioridad de Mensaje (CSMA/CD+AMP, Carrier
Sense Multiple Access with Collision Detection and Arbitration Message Priority). De acuerdo
con este mtodo, los nodos en la red que necesitan transmitir informacin deben esperar a que
el bus est libre (deteccin de portadora); cuando se cumple esta condicin, dichos nodos
transmiten un bit de inicio (acceso mltiple). Cada nodo lee el bus bit a bit durante la
transmisin de la trama y comparan el valor transmitido con el valor recibido; mientras los
valores sean idnticos, el nodo contina con la transmisin; si se detecta una diferencia en los
valores de los bits, se lleva a cabo el mecanismo de arbitraje.
CAN establece dos formatos de tramas de datos (data frame) que difieren en la longitud del
campo del identificador, las tramas estndares (standard frame) con un identificador de 11 bits
definidas en la especificacin CAN 2.0A, y las tramas extendidas (extended frame) con un
identificador de 29 bits definidas en la especificacin CAN 2.0B.
Para la transmisin y control de mensajes CAN, se definen cuatro tipos de tramas: de datos,
remota (remote frame), de error (error frame) y de sobrecarga (overload frame). Las tramas
remotas tambin se establecen en ambos formatos, estndar y extendido, y tanto las tramas de
datos como las remotas se separan de tramas precedentes mediante espacios entre tramas
(interframe space).
En cuanto a la deteccin y manejo de errores, un controlador CAN cuenta con la capacidad de
detectar y manejar los errores que surjan en una red. Todo error detectado por un nodo, se
notifica inmediatamente al resto de los nodos.
Capa de supervisor: La sustitucin del cableado convencional por un sistema de bus serie
presenta el problema de que un nodo defectuoso puede bloquear el funcionamiento del sistema
completo. Cada nodo activo transmite una bandera de error cuando detecta algn tipo de error
y puede ocasionar que un nodo defectuoso pueda acaparar el medio fsico. Para eliminar este
riesgo el protocolo CAN define un mecanismo autnomo para detectar y desconectar un nodo
defectuoso del bus, dicho mecanismo se conoce como aislamiento de fallos.
Capa de aplicacin: Existen diferentes estndares que definen la capa de aplicacin; algunos
son muy especficos y estn relacionados con sus campos de aplicacin. Entre las capas de
aplicacin ms utilizadas cabe mencionar CAL, CANopen,DeviceNet, SDS (Smart Distributed
System), OSEK, CANKingdom.

CODIGO MANCHESTER

La codificacin Manchester es una tcnica de codificacin sincrnica que se utiliza para


codificar el clock y los datos de un flujo de bits sincrnico. En esta tcnica, los datos binarios
que se transmiten no se envan como una secuencia de 1 y 0 lgicos (conocida como de no
retorno a cero, NRZ). En cambio, los bits se convierten en un formato ligeramente diferente que
tiene una serie de ventajas sobre el uso directo de codificacin binaria.
Existen dos convenciones empleadas para la codificacin Manchester.

[NOMBRE DEL AUTOR]

ISTP IDAT

ELECTRNICA

La primera de ellas fue publicada por primera vez por Thomas G.E. en 1949 y es seguido por
numerosos autores (por ejemplo, Tanenbaum). Especifica que para representar un 0 lgico la
seal debe cambiar del nivel Bajo a Alto (suponiendo una amplitud fsica de codificacin de los
datos), manteniendo el nivel bajo en la primera mitad del perodo del bit, y un nivel alto en la
segunda mitad. Para un 1 lgico los niveles de la seal deber cambiar de Alto a Bajo.
La segunda convencin es tambin seguida por numerosos autores (por ejemplo, Stallings), as
como por las normas IEEE 802.4 (token bus) y IEEE 802.3 (Ethernet). Afirma que un 0 lgico
es representado por una secuencia de seales Alto-Bajo y un 1 lgico est representado por
una secuencia de seal Bajo-Alto.
Como puede apreciarse si a una seal codificada en Manchester la invertimos, hemos pasado
de una convencin a la otra.
Entonces, las reglas de codificacin segn la primera convencin son:
Si el dato original es un 0, el cdigo Manchester es: 01
Si el dato original es un 1, el cdigo Manchester es: 10
Cada bit se transmite en un tiempo fijo (el periodo).
Las transiciones que significan O o 1 se producen en el punto medio de un perodo.
El proceso para realizar la codificacin es muy simple y solo es necesario efectuar un X-OR
entre los datos y el clock para obtener la seal codificada. La decodificacin es mucho ms
compleja y necesita un post aparte.
Datos XOR clock

Manchester

En los siguientes ejemplos podemos ver la 2 convenciones de codificacin:

Codificacin Manchester Norma IEEE

[NOMBRE DEL AUTOR]

ISTP IDAT

ELECTRNICA

Codificacin Manchester Norma Thomas GE. El patrn de 8-bits: "0 1 1 1 1 0 0 1" se codifica
como "01 10 10 10 10 01 01 10". Bit LSB a la izq.
La codificacin puede ser alternativamente considerada como una codificacin de fase, donde
cada bit es codificado por una transicin de fase de 90, o 270 grados. Por lo tanto, es comn
encontrar que se refiera a ella como un Cdigo Biphase.
A su vez la codificacin Manchester es un caso especial de binary phase-shift keying (BPSK),
donde los datos controlan la fase de una onda cuadrada cuya frecuencia portadora es la
velocidad de transmisin de datos. Lo que significa, que es self-cloking, por lo tanto la seal de
reloj (clock) puede ser recuperada de los datos codificados.
Cdigos Ilegales
Dado que un 0 codifica en 01 y un 1 codifica a 10 (o viceversa), se desprende que cdigos
Manchester 00 y 11 son secuencias ilegales. Estos cdigos ilegales se utilizan para comprobar
errores en los datos.
Tambin es posible tener el cdigo ilegal de 4 bits 00 00 11 11, el cual es un suceso poco
probable. Este cdigo ilegal tiene la propiedad de tener un componente de DC de cero y no
tiene transiciones de 1 a 0, esa secuencia se la suele utilizar como un patrn nico de inicio/fin
para identificar los lmites de nuestra transmisin de bits de datos codificada en Manchester.

Desventajas

Se puede observar que hay dos bits de datos codificados en Manchester por cada bit de datos
originales. Por lo tanto, la contra de usar una codificacin Manchester es que los datos
codificados requieren el doble de ancho de banda.

Ventajas

1. Transmisin serial de bits con componente nula de DC.


2. Deteccin de errores fcil de aplicar.

Usos

El codigo Manchester es utilizado en la capa fsica de la comunicacin LAN ETHERNET donde


el ancho de banda adicional no es un impedimento para el cable coaxial. Tambin suele
utilizarse cuando se realiza una comunicacin por medio de RF para evitar el ruido.
Existen unos integrados denominados RF800 que son encoder/decoder para transmisiones por
RF codificando los datos en Manchester, y agregando un chequeo de error RCR.

[NOMBRE DEL AUTOR]

ISTP IDAT

ELECTRNICA

APLICACIONES CON MANCHESTER CODE

Compilado en PIC CCS


Este cdigo permite conectar mediante UART 02 microcontroladores por puerto serie en donde
el transmisor enva los datos del ADC y el receptor muestra los datos de ADC, sin convertirlo a
float.

///////////////////////////////////////////////////////////////////////////RECEPTOR///////////////////////////////////////
#include <16f877a.h>
#FUSES NOWDT
#FUSES HS

//No Watch Dog Timer


//High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)

#use standard_io(b)
#use delay(clock=20000000)
#use rs232(baud=2400,parity=N,xmit=PIN_A3,rcv=PIN_A2,bits=8)//,invert)
#include <flex_lcd.c>

int i=0;
////////////////////////////////DECODE MANCHESTER///////////////////////////////

int Recibir_dato(int dato)


{

int i=0,dec=0,x=0,enc=0,band=0;
enc = dato;
x=0;
for(i=3; i>0; i--)
{band=0;
band=enc&0b11000000;

//corroboro que bit estan en 1 y 0, y voy haciendolo de 2 bit a

//dos bit
if(band==0b10000000) //1
{bit_set(dec,x); //coloco un 1 en la posicion i
}
if(band==0b01000000) //0
{bit_clear(dec,x); //coloco un 0 en la pocicion i
}
if((band==0b00)||(band==0b11)) //como el codigo manchester no acepta que se repitan los
00 ni los 11 devuelve un valor error.

[NOMBRE DEL AUTOR]

ISTP IDAT

{return 0xff;

ELECTRNICA

//lo uso para ver si trabaja bien el coder y decoder

}
enc<<=2;
que multiplicarlo en 4

//desplazo asia la izquierda, el dato de dos en dos, es lo mismo

x++;
}
return dec;

//devuelvo 4bit de la palabra

dato=0;
}
Void main (void)
{ lcd_init();

int valor=0,low=0,high=0,datomanch=0,status=0,dato=0,valorfinal=0;
float p;

while(true)
{valor=0;
low=0;
high=0;
datomanch=0;
dato=0;
valor = getc();

//tomo los valores de la uart

datomanch=recibir_dato(valor);
if(status==0)
trabajo con los bit 0 al 3,
{status=1;
low=datomanch;

//envio los valores a la funcion

//uso esta bandera para trabajar de 4 bit en 4bit. cuando es 0


//cuando es 1 trabajo con los bit 4 al 7
//low son los primeros 4 bit

valorfinal=0;
//utilizo esta bandera para que no me imprima el valor del ADC
hasta que no tenga completo el el valor enviado del ADC
}
else
{status=0;
high=datomanch;

//son los bit los utilmos 4 bit

high<<=4;
dato=(high | low);

//sumo todo los bit, recuperando el valor enviado

[NOMBRE DEL AUTOR]

ISTP IDAT

ELECTRNICA

valorfinal=1;
}

if(datomanch==0xff)

// imprimo si hay error

{printf(lcd_putc,"\fERROR");
}
else
{if(valorfinal==1)
{p=(dato*5/(256-1));

//realizo la conversion del ADC

printf(lcd_putc,"\fADC=%d",dato); //imprimo los datos recibido del ADC


//printf(lcd_putc,"\nVolt=%1.2fV",p);
}
}
delay_ms(50);
}
}

/////////////////////////////////////////////////////////////////////////Transmisor/////////////////////////////////////////////////
#include <16f877A.h>
#device adc=8
#FUSES NOWDT
#FUSES HS

//No Watch Dog Timer


//High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)

#use standard_io(b)
#use delay(clock=20000000)
#use rs232(baud=2400,parity=N,xmit=PIN_A3,rcv=PIN_A2,bits=8)//,invert)
#include <flex_lcd.c>

/////////////////////////////////CODE MANCHESTER////////////////////////////////
void Enviar_dato(int dato)
{
int i,j,b,me,x;
b=dato;
for (i=0; i<2; i++)

//divido en 2 al BYTE y cada nibble los guardo y trabajo en "me".

[NOMBRE DEL AUTOR]

1
0

ISTP IDAT

{ me = 0;

ELECTRNICA

//hay que recordar que el bit menos significativo esta a la derecha

x=0;
for (j=0 ; j<4; j++)
{ if (bit_test(b,j))
// si en la posicion j del Byte b hay un 1 entonces pongo en el bit
x===>0 y en el bitx++==>1
{bit_clear(me,x);
x++;
bit_set(me,x);
x++;
}
else
// si en la posicion j del Byte b hay un 0 entonces pongo en el bit
x===>1 y en el bitx++==>0
{bit_set(me,x);
x++;
bit_clear(me,x);
x++;
}
}
putc(me);
}
}
void main()
{setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_INTERNAL);

lcd_init();
int q;

while(true)
{
set_adc_channel(0);
delay_us(20);
q=read_adc();
Enviar_dato(q);

[NOMBRE DEL AUTOR]

1
1

ISTP IDAT

ELECTRNICA

}
}

Otra consulta puede ser que cuando se transmite en RS232 el receptor reciba los datos
invertidos ejemplo.

Transmitido==> 0b10100101
Recibido ===>0b01011010
Relacion
TX

RX

bit 0

bit6

bit 1

bit7

bit 2

bit4

bit 3

bit5

bit 4

bit2

bit 5

bit3

bit 6

bit0

bit7

bit1

[NOMBRE DEL AUTOR]

1
2