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

El Protocolo en el 18f458

Ahora con respecto al micro, este soporta las especificaciones 2.0A y 2.0B, es decir
todos los tipos de mensajes anteriormente mencionados, mensajes con identificador
estndar y extendido, tramas de error, etc., lo nico que no soporta, son las
caractersticas del bus, es decir, no tiene los pines CANH y CANL, por el contrario
tiene los pines can tx (salida de datos) y can rx (entrada de datos), los cuales van
conectados al circuito integrado MCP2551 de microchip, que es un transceptor del
protocolo CAN, y transforma los datos del pin tx en los niveles lgicos respectivos para
CANH y CANL, y viceversa, para el caso de rx, por ahora veamos los modos en los que
puede trabajar el PIC 18F458:

Modo de configuracin: Estando en este modo es la nica forma en que se


pueden configurar los filtros y las mscaras de recepcin, es decir los
identificadores, mientras estamos aqu, no se puede recibir ni enviar datos, y
tampoco es posible ingresar a l, mientras un mensaje est esperando a ser
transmitido.
Modo deshabilitado: Tal y como su nombre lo indica, queda deshabilitado el
mdulo, puede usar interrupciones para despertarse, antes de entrar en este modo
espera 11 bits recesivos, si los recibe, queda el mdulo deshabilitado.
Modo normal: simplemente es la operacin normal del nodo, recibe y enva
mensajes, acepta el ACK, detecta errores y ms
Modo de escucha: Es nica y exclusivamente de escucha o recepcin de
mensajes, todos los mensajes en el bus, incluyendo los de error, puede ser usado
para la deteccin de la velocidad, ms sin embargo, para esto ya deben haber
como mnimo otros dos nodos que estn transmitiendo entre s, no manda
banderas de error ni mucho menos ACK, es solo de recepcin.
Modo de retrotransmisin (loopback): Lo que hace es mandar y recibir mensajes
al interior del micro, no se tienen en cuenta los bits de ACK, es decir, lo que hay
en los buffers de transmisin, llegan directamente a los buffers de recepcin,
pueden ser usados los filtros y las mscaras.
Modo de reconocimiento de error: En este modo el micro acepta los mensajes
que contengan una trama corrupta, es decir, que as sea un mensaje valido o
invlido estos van a ser copiados y recibidos en el buffer.

Todos estos modos en que trabaja del micro se seleccionan mediante los bits REQOP
del registro CANCON<7:5>, con excepcin del modo de reconocimiento de errores que
se hace con los bits RXM del registro RXBnCON, ya se ver esto en detalle.

Transmisin de un mensaje CAN:

El PIC 18f458 contiene 3 buffers de transmisin, de los cuales cada uno ocupa 14 bytes,
para enviar un mensaje:

El bit TXREQ del registro TXBnCON (siendo n el numero del buffer (de 0 a 2))
debe estar en cero indicando que el buffer est limpio y sin mensajes pendientes.
Como mnimo, los registros TXBnSIDL, TXBnSIDH y TXBnDLC deben haber
sido cargados, si es un mensaje con identificador extendido, el bit EXIDE del
registro TXBnSIDL debe estar en uno, y los registros TXBnEIDH y TXBnEIDL
deben haber sido cargados.
Se deben habilitar o deshabilitar las interrupciones.
Si hay datos presentes, estos deben ser cargados en los registros TXBnDm,
donde n es el numero del buffer, y m el nmero del byte del dato.

Prioridad del mensaje:

Esto le dice al mdulo que buffer que contenga un mensaje listo va a ser enviado antes
que cualquier otro, no tiene nada que ver con el arbitraje del bus en el protocolo, para
asignar esta prioridad se editan correspondientemente los registro TXPRI1:TXPRI0 del
registro TXBnCON, la mxima prioridad es 3 (11 en binario), si dos buffers tienen la
misma prioridad, el del nmero ms alto ser transmitido primero.

Iniciando transmisin:

Para iniciar la transmisin de un mensaje, el bit TXREQ del registro TXBnCON se debe
colocar en uno, estando en uno los bits TXABT, TXLARB y TXERR se ponen en 0,
ms sin embargo no significa que inici la transmisin, significa que est listo pero que
el mdulo espera a que el bus est disponible, luego iniciar la transmisin con el
mensaje de mayor prioridad que est listo. Cuando la transmisin se ha completado
exitosamente, el bit TXREQ se pone en cero por hardware, TXBnIF del registro PIR3 se
pondr en uno generando interrupcin si fue habilitada, en cambio, si la transmisin del
mensaje ha fallado, el bit TXREQ seguir en uno indicando que el mensaje est
pendiente y, dependiendo de la condicin, se pondrn en uno los bits que al iniciar la
transmisin se pusieron en cero.
Si el mensaje comenz a ser transmitido pero encontr un error, el bit TXERR se pondr
en uno, IRXIF se pondr en uno generando interrupcin si fue habilitada, pero si por el
contrario lo que hizo fue perder el arbitraje, entonces el bit TXLARB se pondr en uno.

Recepcin de un mensaje:

En el mdulo existen dos buffers de recepcin, sin incluir el ensamblador de mensajes


(MAB), este transferir los mensaje recibidos a los buffers solo si el filtro de aceptancia
(identificador, ya sea estndar o extendido) concuerda con el del mensaje, cuando el
buffer contiene un mensaje, el bit RXBnIF se pone en uno (genera interrupcin si es
habilitada, you know how!) sirviendo de bloqueo para que ningn otro mensaje sea
recibido, y por lo tanto el buffer sea sobrescrito, este bit debe clarearse por software.

RXB0 es el buffer de mayor prioridad, tiene dos filtros de aceptancia, y obviamente una
mascara, RXB1 es el de menor prioridad, tiene 4 filtros y una mascara, es decir, en total
el micro puede tener simultneamente 6 direcciones, las cuales dependiendo
exclusivamente de la mscara podrn aceptar los mensajes que tengan dichos
identificadores, los bits FILHIT0 del registro RXB0CON y los bits FILHIT2:FILHIT0
dicen que filtro de aceptancia fue el que habilit la recepcin del mensaje.
Si RXB0 contiene un mensaje vlido, y existe otro mensaje valido listo para ser
recibido, puede ocurrir una sobrecarga, a menos que el bit RXB0DBEN del registro
RXB0CON est en uno, permitiendo que el mensaje sea transferido al buffer RXB1.

Los bits RXM del registro RXBnCON determinan que tipo de mensaje es tomado como
valido, en 00 reciben todos los mensajes con cualquier tipo de identificador pero sin
errores, en 01 recibe mensajes con identificador estndar, en 10 recibe mensajes con
identificador extendido solo s el bit EXIDE del registro RXFnSIDL est en uno,
cuando los bits RXM estn en 11, los buffers aceptan todo tipo de mensaje, incluyendo
los que contengan error, en este caso, la porcin del mensaje recibida antes de la trama
de error ser escrita en el buffer.

Filtros de aceptancia y mscaras

Son usados para determinar si un mensaje va a ser cargado en el buffer o no, cuando un
mensaje vlido es recibido, el identificador es comparado con el filtro, si es igual,
entonces ser cargado al buffer respectivo.

Las mscaras son usadas para determinar que bit del filtro es comparado con el identificador
del mensaje, es decir, que bits tienen que ser exactamente igual al del filtro, si el bit 0 de la
mascara vale 0, entonces no importar el contenido del bit 0 del identificador del mensaje as
en el filtro sea un valor contrario al del mensaje, pero si est en uno, el bit del identificador del
mensaje tiene que ser exactamente igual al del filtro, o de lo contrario todo el mensaje ser
rechazado

Las mscaras y los filtros solo pueden ser ledos y modificados en modo de
configuracin, de resto se leern como cero.

Rata de Baudios:

Todos los dispositivos deben trabajar a una misma frecuencia de transmisin, se deben
de ajustar el prescaler de baudios, y el nmero de tiempo de quanta en cada segmento.
Nominal bit rate es el nmero de bits transmitidos por segundo, asumiendo una
transmisin ideal con un oscilador ideal, y es definido a un mximo de 1Mbps, no lo
intenten a ms por que no sirve, ya lo prob.

Nominal bit time:

Tbit = 1 / Nominal bit rate

Este est divido en varios segmentos:


Synchronization segment (sync_seg)
Propagation time segment (prop_seg)
Phase buffer segment 1 (phase_seg1)
Phase buffer segment 2 (phase_seg2)

Y todo esto es a lo que se le llama tiempo de quanta (time quanta (tq))


Por definicin, el Nominal bit time se puede programa para un mnimo de 8 tq hasta un
mximo de 25 tq, tambin por definicin, el tiempo mnimo del nominal bit time es de
1us, que es de 1Mbps, y est dado por:

Nominal bit time: TQ * (sync_seg + prop_seg + phase_seg1 + phase_seg2)

El TQ es derivado del periodo de oscilacin, programado tambin por un prescaler:

TQ(us) = (2 * (BRP + 1 )) / Fosc(Mhz)

TQ(us) = (2 * (BRP + 1 )) * Tosc(us)

En la frmula del nominal bit time, las sumas deben dar como mnimo 8Tq y mximo
25 Tq.

Segmento de sincronizacin: Usado para sincronizar varios nodos, el flanco se


mantiene durante este segmento, su duracin es de 1Tq.
Segmento de propagacin: Es usado para compensar el retardo fsico con la red,
este tiempo de retardo consiste en el tiempo de la seal de propagacin en el bus
y el retardo interno de los nodos, su duracin puede ser de 1 a 8 Tq.
Segmento de desfase del buffer: Son los que separan al sampling point
(momento en el que se lee el estado), el final del phase segment 1 determina el
sampling point, puede durar de 1 a 8 Tq. El phase segment 2 es un retardo antes
de la siguiente transicin de dato transmitido, que tambin es programable de 1 a
8 tq, ms sin embargo, por requerimientos IPT su mnima longitud es de 2 Tq, y
puede ser igual de grande que el phase segment 1 el IPT.
Sampling point: Es el punto del tiempo en el que el nivel del bit es ledo, est
ubicado al final del phase segment 1, si el tiempo por bit es muy lento, y hay
muchos Tq, se toma tres veces el valor, y el nivel que est repetido dos veces
ser tomado como nivel del bit del mensaje.
Information procesing time (IPT): Es el tiempo que se demora en calcular el
nodo cual es el nivel lgico presente, comenzando en el sampling point, las
especificaciones lo toman como menor o igual a 2Tq, pero el PIC lo toma
mnimo como 2Tq.

Algunas reglas

Segmento de propagacin + segmento de fase 1 >= segmento de fase 2


Segmento de fase 2 >= Sincronizacin de salto
El bit SAM del registro BRGCON2 controla el nmero de veces que va a tomar el
estado del bus, es decir, si est en uno toma como nivel lgico el que sea 2 veces iguales
de tres, si es cero, solo en el momento del sampling point ser tomado el valor; el bit
SEG2PH del mismo registro permite especificar el tamao del phase segment 2, si es
cero, ser igual al phase segment 1 y al IPT (2Tq), si es uno, puede ser programado en
el BRGCON3.

____________________________________________________________________

Si creen que es muy dificil hacer todos estos calculos, pues, les tengo la solucin, aqui
hay un pequeo programita en javascript, que les calcula la frecuencia a la que trabajar
el micro, solo llenen los valores, donde dice frecuencia, es la frecuencia del oscilador
del micro (en Mhz), tengan en cuenta que no incluyo si tienen pll activado, en dicho
caso, coloquen la frecuencia final, el brp, es el prescaler, el tq, es
phase_seg1+phase_seg2+prop_seg+sjw, los tiempos de quanta, aqui esta:

Frecuencia BRP

Tq Rango

No est de ms decir que la casilla de seleccion, solo escojan el rango en la que deseen
que salga la respuesta, si les parece que este mtodo no es bonito, por que por cosas de
la vida no les gusta guardar paginas webs, entonces bajen este archivo de excel, tiene
una formula que hace lo mismo que este programita en javascript, la unica diferencia es
que el prescaler est ya dado en la tabla, y el rango tambien, fijense, aqui est:

link1

Y si por cosas de la vida, no tienen excel, y no pueden conseguir open office, pues, aqui est la
otra solucin, un pequeo programilla .exe que le calcula los valores, casi igual que este en
javascript, ya pase a la version 2, mejore los botones y eso, slo cuestiones grficas, de resto es
lo mismo, aqui est:

link1

Un programa en ensamblador

El programa lo encuentran aqui: can_asm.rar


All encuentran los dos, el transmisor y el receptor, recuerden que programar micros de
la familia de los 18xxxxx no es lo mismo que programar 16xxxxx, sus instrucciones y
las formas de acceder a los bancos son cosas distintas, pero tampoco es dificil migrar a
ellos, por eso, muchos prefieren el c, que es ms "universal" que el ensamblador, si es
que se puede llamar asi.

Este programa es lo ms sencillo del mundo, uno de los dos micros es el transmisor, lo
nico que hace es enviar una secuencia de 0 a 9, y espera a que el otro micro lo reciba,
si el otro no lo recibe, este se queda enviando el dato tooooodaaa la vida, hasta que
alguien le conteste.

El programa receptor solo hace, esperar por los datos y revisar si le han llegado, luego
los muestra por el puerto provisto para esto, lo mismo hace el transmisor, entonces, si
ves que ambos cambian a la vez, es por que qued bien montado, el cristal usado es de
4Mhz, el programa funciona de maravilla, se los aseguro, aqui est el plano, muy mal
hecho , y a parte tiene un error, nada ms fijensen que CANH esta conectado con
CANL, que absurdo, lo hice por cuestiones de diseo pero no ca en cuenta, si se me
queda tiempo, lo vuelvo a hacer, pero bueno, que se le hace:

Recuerden los pasos,

1. Configurar los pines de entrada y salida


2. Entrar en modo de configuraion
3. cuadrar prescaler y todo lo relacionado con el tiempo
4. configurar identificadores, filtros y mascaras
5. definir prioridad a los buffers de salida
6. entrar a modo normal

Si es transmisor,

1. llenar la longitud de datos


2. llenar el identificador del nodo que va a recibir
3. llenar los bytes del mensaje
4. poner en uno TXB0CON<TXREQ>
5. esperar por transmision exitosa
6. poner en cero TXB0CON<TXREQ>

Si es receptor,

1. esperar por interrupcion o preguntar por PIR3<RXB0IF>


2. guardar los datos leidos
3. poner en cero PIR3<RXB0IF> y RXB0CON,RXFUL1

Si no quieren bajar los archivos y desean verlos de una, aqui estn en su versin de
html, peguenle una hojeada, y si no les sire, pues, ni modo, que pena hacerte perder el
tiempo...

Can Tx

Can Rx

Cualquier duda no olviden comentarmela, estoy en la zona de Miscelania->Contctame,


desde ahi me pueden escribir, sigamos con el siguiente capitulo, quieren?

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