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

CRC

Laura Jessica Tacubeo Padrn Miguel ngel Snchez Rubio Alan Omar Solano Campos Josimar Damian Peralta 23 de octubre de 2013

Resumen
En el presente trabajo se muestra el establecimiento de una conexin entre PC o Laptop y un microcontrolador a travs de transmisin serial en banda base, detectando la posible existencia de error en la transmisin mediante la implementacin de un algoritmo de control de error, cuyo resultado se despliega en una pequea pantalla de cristal lquida. La transmisin del ordenador al PIC16F877A se realiza por medio del lenguaje de programacin C el cual recibe un mensaje en una interfaz que posteriormente se transmite utilizando un cable serial, de USB a DB9 el cual est conectado a una tarjeta de desarrollo QL200 quien recibe los datos y en ella misma es posible ingresar un bit de error. En el PIC16F877A tiene programado el algoritmo CRC el cual realiza la deteccin de error en el mensaje transmitido si es que este existe. Cuando en el mensaje se detecta error, en la pantalla de cristal liquida se muestra el mensaje (en bits) con error, de lo contrario se despliega el mensaje ingresado.

Introduccin
Muchos de los protocolos usados hoy en da usan CRC, el siguiente protocolo es para saber cmo implementar y como funciona CRC en un caso real, sin utilizar protocolos que lo implemente (como TCP/IP, etc). Usemos ley C, ya que en Java se utilizan Sockets que ya implementan dichos protocolos (TCP/IP o UDP'S). Por ahora nos limitamos a deteccin de error.

Codigo de deteccion de errores (CRC).


El mtodo de redundancia cclica (CRC Cyclic Redundancy Check)

[2] es

una tcnica muy usada para deteccin de errores. Trabaja al nivel de mensaje, agregando varios caracteres de control al nal, siendo lo ms comn 2 o 4 bytes de control. Se divide la secuencia de bits a enviar, por un numero binario predeterminado.El resto de la divisin se adiciona a l mensaje como secuencia de control. Por una regla aritmtica simple, si el divisor es un numero de 16 bits, podemos tener la certeza que el resto siempre podr almacenares en dos bytes, de donde, agregando 2 caracteres a nuestro mensaje tendremos el mtodo implementado. El extremo receptor realiza el mismo clculo que el emisor y compara el resultado obtenido con la secuencia de control recibida. Si no coinciden, equivale a una indicacin de error. Los cdigos polinmicos se basan en el tratamiento de series de bits como si fueran representaciones de polinomios, con coecientes de valor mente. Una trama de k bits se ve como una lista de coecientes de un polinomio con k trminos, cubriendo un rango desde se le conoce como la izquierda) es el del trmino

nica-

xk1 hasta x0 . A este tipo de polinomio polinomio de grado k 1. El bit de orden ms alto (el ms a k1 coeciente del trmino x ; el siguiente bit es el coeciente 110001 tiene 6 bits y, por consiguiente, representa a un 1, 1, 0, 0, 0

xk2 ,

y as sucesivamente.

Por ejemplo, el cdigo y

polinomio de tres trminos, que contienen los siguientes coecientes

0,

es decir:

x5

+x

x0 .

De acuerdo con las teoras de las reglas de la teora del campo algebraico, la aritmtica del polinomio se realiza en mdulo 2. No hay trminos de acarreo para la suma ni de prstamo para la resta; las dos operaciones son idnticas al

OR EXCLU SIV O.
Cuando se emplea el mtodo del cdigo polinmico, el emisor y el receptor debern estar de acuerdo respecto a un polinomio generador,

G(x), m

en forma

anticipada. Los bits de orden superior e inferior del generador deben ser Para calcular el cdigo de redundancia de alguna trama con pondiente al polinomio

1.

bits, corres-

M (x),

la trama deber ser ms grande que el polinomio

generador. La idea bsica consiste en incluir un cdigo de redundancia al nal de la trama, de tal manera que, el polinomio representado por la trama con el cdigo de redundancia sea divisible por entre

G(x).

Cuando el receptor recibe la trama de suma comprobada, intenta dividirla

G(x).

Si existe un resto, habr ocurrido un error de transmisin.

El algoritmo para calcular la redundancia es el siguiente: Sea r el grado de polinomio

G(x).

Agregar r bits a cero al extremo de orden inferior

de la trama, de tal manera que ahora contenga

m+r

bits, y corresponda al entre la serie de bits

xr M (x). xr M ( x) G(x),
empleando la divisin en mdulo 2.

Dividir la serie de bits correspondientes a correspondientes a

r o menos bits) de la serie de bits corresxr M (x), empleando la resta en mdulo 2. El resultado es la trama lista para trasmitir. Llmese T (x) a este polinomio. En la siguiente gura se ilustra el clculo para la trama 1101011011 y G(x)= x4 + x + 1 :
Restar el resto (que siempre tiene pondientes a

Figura 1. Ejemplo CRC por divisin Clculo de la Redundancia Cclica.

r bits de redundancia, podr detectar todas las <= r. Una rfaga de error de longitud k puede i k 1 representarse por la expresin x (x + ... + 1), donde i determina qu tan lejos del extremo derecho de la trama recibida, queda localizada la rfaga. Si G(x) 0 i contiene un termino x , no tendr a x como factor, por lo cual, si el grado de la expresin entre parntesis es menor que el grado de G(x), el resto nunca podr
Un cdigo polinmico con rfagas de errores de longitud ser cero. Tambin se puede demostrar que, cuando ocurre una rfaga de error mayor que

r+1

bits, o bien, que ocurren varias rfagas cortas, la probabilidad de que

una trama mala pase inadvertida es de de bits son semejantes.

1 2 r , suponiendo que todos los conjuntos

Tres polinomios se han convertido en normas internacionales:

CRC 12 = x12 + x11 + x3 + x2 + x1 + 1 CRC 16 = x16 + x15 + x2 + 1 CRC CCIT T = x16 + x12 + x5 + 1 Los tres contienen el trmino x + 1 como factor
se emplean para caracteres de como las normas

primo. El

CRC 12

se

utiliza cuando la longitud del carcter es de 6 bits; en tanto que los otros dos

8 bits. Un cdigo de redundancia de 16 bits, CRC 16 o CRC CCIT T , captura todos los errores simples 16
o menos bits,

y dobles, todos los errores con un nmero impar de bits, todos los errores de rfagas con longitudes de

99.997

de los errores de rfagas de

17

bits y

99.998

de los errores de rfagas de longitudes de 18 bits o mayores.

Conector DB9
El conector DB9

[4]

(originalmente DE-9) es un conector analgico de 9

clavijas de la familia de conectores D-Subminiature (D-Sub o Sub-D). El conector DB9 se utiliza principalmente para conexiones en serie, ya que permite una transmisin asncrona de datos segn lo establecido en la norma RS-232 (RS-232C).

Figura 2. Conectores DB9. Se debe tener en cuenta que existen adaptadores DB9-DB25 para convertir fcilmente un enchufe DB9 en uno DB25 y viceversa.

Figura 3. Pines DB9.

Justicacin
Puede dar pie a diferentes aplicaciones, no solo de comunicaciones, si no a otras reas como a sistemas, mecatrnica, control a distancia, etc. Ejemplo de aplicaciones podran ver monitoreo y (control del tiempo, humedad, control de roles, envi de mensajes, lector de tarjeta, etc.) La informacin puede ser almacenada. Bases de datos para ser utilizada en un servidor, por ejemplo o simplemente desplegarla.

Objetivo
Transmitir datos en Banda Base en lenguaje C entre una PC o Laptop y un microcontrolador usando deteccin de error por CRC.

Diseo
Para el proyecto se utilizo la tarjeta de desarrollo QL200 la cual ya cuenta de manera integrada la pantalla de cristal liquido (LCD), el MAX232, el conector DB9 y el modulo para programar y de lectura para PICs, que en nuestro caso se utilizo el PIC16F877A.

Figura 4. Tarjeta QL200 Herramientas: 1. PC o Laptop. 2. Tarjeta QL200 (Microcontrolador PIC16F877A,MAX232,Display,LCD). 3. Cable USB-DB9.

Figura 5. Conexion Laptop - QL200

Desarrollo
Para la comunicacin UART teniendo en cuenta los 9600 Baudios en PIC C. UART1_Init(9600); //INICIALIZAR COMUNICACION UART Delay_ms(100); //ESPERA INICIALIZAR UART Envio de datos por DB9 en C for(i=0;i<datos;i++) { writeToSerialPort(h,&sendbuer[i],1); Sleep(42); //SINCRONIA } closeSerialPort(h); //CERRAR COMUNICACION getchar(); return 0; Inicio de comunicacion C con ayuda de la libreria "serialport.h". HANDLE h = openSerialPort("COM6",B9600,one,o ); //INICIAR COMUNICACION char sendbuer[datos]; //BUFFER DE DATOS A ENVIAR

Pruebas
1. Creacin de un programa en C/C# que reciba cadena de caracteres a transmitir. 2. Conversin de los datos de entrada a cdigo binario para la transmisin del mensaje hacia el PIC16F877A, mediante el cable USB a DB9. -Recogida de los datos enviados por la tablilla QL-200 para la transmisin hacia el PIC16F877A.

3. Creacin del programa en PIC, para la deteccin de errores mediante el mtodo de CRC. 4. Recepcin de datos en PIC16F877A, realizando comprobacin de errores mediante CRC. 5. Despliegue de resultado en Display digital de la tablilla QL-200 Yo digo que as quedaran los pasos del escenario de pruebas.

Resultados
1. Programa en C para mandar un mensaje de texto.

Figura 6. Fraccion del codigo de C para el envio del mensaje. 2. Programacin en el PIC

Figura 7. PIC comenzando a programar.

3. PIC Programado con el codigo de Deteccion de Error, listo para recibir el mensaje.

Figura 8. PIC Programado

4. Si el mensaje recibido no tiene error, se muestra el mensaje enviado, como se ve a continuacion.

Figura 9.Mensaje sin error.

5. Si el mensaje recibido tiene error, se muestra la leyenda error en la Transmision, como se ve a continuacion.

Figura 9.Mensaje con error.

Conclusiones
Laura Jessica Tacubeo Padrn. El objetivo de transmitir datos en Banda Base en lenguaje C entre una PC o Laptop y un microcontrolador usando deteccin de error por CRC fue cumplido, aunque esta transmisin conto con algunas limitantes debido a que el PIC que utilizamos para implementar el algoritmo de deteccin de error careca de memoria, dado que de este cuenta con 256 Bytes de los cuales 128 Bytes se utilizan nica y exclusivamente para las instrucciones del proceso y los 128 Bytes restantes son disponibles para las variables con las que trabajemos, por tanto al nal de programar, nos dimos cuenta que solo contbamos con la posibilidad de enviar un mximo de 19 caracteres. Otro incidente con el que nos topamos fue el hecho de que la transmisin se vea afectada dado que la informacin enviada desde equipo de cmputo era demasiado rpido(velocidad de transmisin) para ser procesado por el PIC por tanto recurrimos a ingresar retrasos de manera intencional, adems de que debamos sincronizar la transmisin de los datos porque de lo contrario se perdan datos. Miguel ngel Snchez Rubio. El primer inconveniente que se presenta al implementar el algoritmo CRC,

es la capacidad de memoria del PIC (la cual destina el 50 % para almacenar variables y el restante para las instrucciones). No es posible aumentar la capacidad de memoria RAM, ya que si deseamos ocupar la memoria ROM o la FLASH, encontraremos ms dicultades, debido a que podemos provocar  fatiga de memoria . Existe Circuitos Integrados que realizan la funcin del CRC pero no pueden ser personalizados, ya que vienen con estndares que se manejan en el mercado, tales como: CRC16, CRC32, CRC64 (los ms comunes). En esta prctica podemos personalizar nuestro polinomio. Con respecto a la comunicacin serial, es necesario notar varias cosas como: Velocidad de transmisin,sincrona, forma de recepcin y transmisin de datos,conguracin de la palabra (en el PIC) para usar dicha funcionalidad, estado de los dispositivos (tanto de recepcin, transmisin y canal), el clculo para los baudios se puede obtener por medio de la hoja de datos (Datasheet) del PIC. Algunos de los problemas que se presentaron durante el desarrollo de dicha prctica fueron: Mala sincrona en la transmisin, para ello se incluyeron retrasos para solucionar el problema,prdida de datos,solucionando la sincrona se soluciona la prdida de datos,bloqueo de puertos, en varias ocasiones fue necesario reiniciar el equipo. Alan Omar Solano Campos. En conclusin, la comunicacin entre la pc y un microcontralador result un tanto confusa ya que fue complicada la sincronizacin de los dispositivos, sin embargo una vez lograda la sincronizacin, la transmisin de los datos se pudo lograr de forma correcta. Se pudo observar que el CRC es, desde mi punto de vista, no es lo sucientemente eciente en la deteccin de errores. Josimar Damian Peralta. En el presente proyecto, hemos podido entender de manera ms precisa el funcionamiento de la transmisin de datos, debido al desarrollo que hicimos de la misma. En primer lugar, la programacin llevada a cabo, tanto en el PIC16F877A como en el ordenador nos hizo establecer de manera concreta el cmo deberan comunicarse ambos objetos. Enseguida, tomar las consideraciones precisas para llevar a cabo la comunicacin nos exigi tomar en cuenta algunas especicaciones fsicas de la conexin, especialmente del PIC. Despus fue preciso observar y determinar lo que se quera transmitir, ponderando una transmisin ecaz. En ltimo lugar, ha sido preciso que entendamos a fondo los conceptos tericos de la transmisin de datos, para comprobar de manera prctica a stos, logrando as la correcta ejecucin de los todos los preceptos anteriormente establecidos.

10

Bibliograa
[1] Behtouz Forouzan ,  Transmisin De Datos Y Redes De Comunicaciones , Editorial Mc Graw Hill, Mxico, 1999. [2] Norman Matlo,  Cyclic Redundancy Checking , University Of California At Davis, USA, 2001. [3] Peterson,  Cyclic Codes For Error Detection. IRE, 1961. [4] Salvatierra, Daniel,  Microcontroladores PIC16F877A Y PIC16F887 , Alfaomega, Mxico,2009. [5] Andrew Tanenbaum,  Redes De Computadoras , Pearson Educacin, Mxico, 2003.

11

Вам также может понравиться