TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: fergar2 en 12 de Julio de 2004, 05:12:00
-
Hola a todos.
Estoy programando un PIC para que envie continuamente al PC
los valores que miden unos sensores de infrarrojos a los que está conectado.
Mi duda es si hacer que el PIC calcule el CRC para cada trama enviada (de longitud 50 bytes) me relentizaría mucho la transmisión de los datos.
También querria saber si conoceis alguna página donde pueda conseguir una función que calcule un CRC facilito.
Un saludo a todos .
Fernando.

-
Una formula mas facil que el CRC es un checksum de los 50 bytes. Es una XOR de toda la cadena y te da como resultado un byte que añades a tu cadena. Es menos fiable que el CRC, pero es suficiente. También yo no he usado nada muchas veces para transmitir ficheros de varios K por la puerta serie hasta una velocidad de 9600 y no he tenido problemas, pero es conveniente un checksum o un CRC.
Saludos
Ricky
-
En el Foro de telefonía hay explicaciones muy buenas de como hacer un checksum...
son los checksum para las tramas PDU de envío de mensajes a los NOKIA...
-
Hola, realmente no siempre se justifica el uso de crc en tx de corta distancia (siempre y cuando la electronica asociada sea buena).
Sin embargo hace unos años he visto un simple programa en lenguaje c que pretendia ser ilustrativo de como calcular facilmente (usando una tabla) el crc. El mismo si no recuerdo mal estaba en una hoja de información oficial de ModBus (protocolo) , en el cual se usa crc, si buscas por ese lado seguramente lo encontraras.

-
En las notas de aplicacion de la pagina de Microchip hay informacion sobre eso.
-
Un CRC en PBP,
;definición de datos
CRC var word ;registro doble donde se almacenara el resultado del CRC
cuenta var byte ;variable interna de la subrutina
cantidad_datos var byte ;indice de la matriz de datos- cuidado,realmente es
;cantidad de datos - 1 ,la matriz tiene base 0
bit_dato var byte ;variable interna de la subrutina
CALC_CRC: ;subrutina de cálculo de crc
CRC = $FFFF ;inicio del CRC
FOR cuenta = 0 TO cantidad_datos ;bucle de análisis de byte
CRC=CRC ^ dato[cuenta] ;or exclusiva
FOR bit_dato = 0 to 7 ;bucle de análisis de bit de cada byte
if (crc&$01)=1 then ;si el bit es uno
CRC = (CRC>>1)^ $A001 ;desplaza y efectua or exclusiva
else ;si el bit fué 0 solo desplaza
crc=crc>>1
ENDIF
NEXT bit_dato
NEXT cuenta
RETURN
Saludos
Ricky
Madrid-España