Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
Busco a alguien que haya usado el chip MRF 24J40 de Microchip para comunicaciones digitales. Yo estoy empezando con el, pero aunque tengo el "data sheet" bajado de la web de Microchip y lo sigo al pié de la letra con sus recomendaciones, me consta que aún no he conseguido que el chip "chute", es decir que transmita. Pienso que me dejo algo de la configuración inicial. ¿Alguien lo ha usado con éxito?.
Hola:
No conozco mucho este integrado (ni en general mucho de los trasceivers de esta banda), pero creo que para poder emitir hay que seguir una serie de estados: inicialización, pasar del estado de no inicializado a StdBy, de StdBy a Activo, de Activo a ReadyToTransmit, etc. Aunque estoy hablando de memoria y no me sé los estados en que debe estar el transceiver, debería estar correctamente explicado en el datasheet.
Y de lo que si me acuerdo, es de que hay varios datasheets de dicho integrado. Lo se porque tengo como mínimo dos de diferentes, y en cada uno explica una inicialización diferente.
Pero como es habitual en Microchip, y últimamente también en otros fabricantes, hay disponible como mínimo una o varias 'pilas' o librerías de protocolo, y presumiblemente también alguna donde dan unas herramientas básicas de prueba (en Atmel lo llaman Transceiver ToolBox) donde se puede establecer una comunicación básica (sin ningún protocolo por encima del IE3) con las que se demuestra cómo se inicializa el integrado, cómo se debe hacer para comunicarse, etc. Sería una buena idea el mirar allí cómo lo hacen y seguir los mismos pasos, o incluso usar las mismas librerías como punto de partida.
Por el lado bueno, el 'simple' hecho de que puedas leer los registros por SPI ya es un paso adelante, lo cual deja claro que el asunto es más de secuencia de inicialización que de otra cosa.
Si, me consta que el SPI funciona bien (en la primera versión que hice no podía leer ni escribir los registros de dirección "larga").
Me he bajado del "Microchip solutions" código para la programación del MRF, y aunque está en C, no es difícil traducirlo al ensamblador del 16F818. Concretamente me he traducido la función MRF24J40init(void) que como su nombre indica lo inicializa y además sigue paso a paso la recomendación de Microchip en su "Data Sheet" (tal y como ya hice yo). Es más, de este código es de donde he sacado la trama a transmitir compatible con IEEE 802.15.4.
Lo peor de todo es que no se que más puedo probar.
A, si, una de las cosas que probé es a intentar "escanear" toda la banda en busca de posibles portadoras en algún canal (sobre todo mi módem) ya que al trabajar con el CCA MODE 1 según entiendo, se detecta cualquier portadora con un nivel por encima del programado en el registro CCAEDTH (0x3F), pero al final pensé que el módem no trabaja a 250 kbps y es fácil que no lo detecte.
¿Que podría probar?
😕
Me gustaría aprovechar para preguntarte sobre el montaje que tienes hecho. ¿Puedes explicarlo? ¿Alguna foto? También me gustaría preguntarte que compilador estás usando y a que velocidad estás usando el SPI.
¡Un saludo!
A ver, más datos:
El PIC que controla el MRF es un 16F818 (sobra para hacer pruebas) programado en ensamblador con el MPLAB IDE bajado de Microchip.
La velocidad del SPI no se cual es pero el 16F818 funciona con su reloj interno a 4 Mhz y la lectura de registros es OK por lo que la escritura lo debe de ser.
El Pic Trainer lo uso con un 16F84 para descodificar un protocolo propio que ideé en su día para cosas de estas. Gracias a ello visualizo lo que le envío por un protocolo de sólo recepción de datos a 9600 baudios y usando sólo dos cables como si de un puerto serie se tratara. Así por ejemplo, en la pantalla puedo ver "TXMCR=1C" (valor por defecto) y también el estado del registro de interrupciones antes y después de la orden de transmisión, siendo el resultado el mismo (0x00) :-(.
Me consta que el PIC programa bien al MRF porque existe una "patita" que creo que se hará famosa en este chip. Me explico: en el documento DS39776A data sheet del MRF 24J40 podemos ver como el pin 26 es CLKOUT, es decir una salida de reloj de frecuencia programable (de forma un poco basta) que se corresponde con el pin 9 del módulo MRF24J40MA. Sin embargo, en la última revisión del documento, la DS39776B se puede ver como el pin 26 es NC!!, y el fabricante recomienda no conectarle nada (ver página 7 del citado documento). Bueno pues con un osciloscopio antigüo que tengo veo como el CLKOUT cambia de frecuencia al programarlo, e incluso se queda inhabilitado al programar el valor recomendado por Microchip en el registro SLPCON1 (0x220) ver bit CLKOUTEN que activa / desactiva la salida CLKOUT y que Microchip recomienda desactivar. No se porqué este cambio en el funcionamniento del chip, ya que era algo muy práctico al usar el módulo con un único reloj.
Al margen de esto sigo sin transmitir pues TXNIF en INTSTAT sigue a cero. 🙁
Se me olvidaba un comentario, los dos transistorcitos que se ven a la derecha del Tx son para adaptar la señal de salida del circuito Tx que funciona a 3,2 v. con los 5 v. del PIC Trainer.