jueves, 11 de febrero de 2021
Interrupción por TMR1 con reloj secundario (SOSC) en PIC24
viernes, 5 de febrero de 2021
Problemas duros
Algo casi tan frustrante para mi como lo es el Problema Duro de la Conciencia es que este sea tan difícil de hacer notar a la mayoría de la gente a pesar de ser tan evidente (algo particulamente notorio entre mis amigos y conocidos físicos). ¿No les parece increíble ver colores, saborear la comida, escuchar sonidos y sentir texturas? Deténganse un minuto a notarlo; miren sus manos de cerca. No me refiero a un romanticismo fácil de la vida, sabemos que el sufrimiento es igual de real. Quiero decir, ¿no es increíble que el lienzo mismo de la experiencia subjetiva no pueda ser deducido lógicamente del sustrato neuro-físico-químico del que debe emerger? Al menos no con las piezas que tenemos. El correlato entre la experiencia y la fisiología es el problema suave. No es ningún misterio que el hielo se sienta frío y hasta podemos saber que áreas se activan en el cerebro para cada estímulo. A la mayoría eso les parece suficiente hasta que se intenta pensar en como replicar artificialmente una experiencia consiente a partir de primeros principios.
domingo, 6 de diciembre de 2020
Sky Trackers
![]() |
ATCA, Australia |
Hace unas semanas, en uno de esos recuerdos completamente aleatorios que me llegan de repente, me vino a la memoria una serie de Discovery Kids (cuando era un canal para niños excelente) que se llamaba Cazadores de Estrellas. Yo debía tener entre 10 y 11 años y en aquel entonces no me llamó mucho la atención porque creí que iba a ser una serie con temática astronómica muy forzada. Me dio curiosidad de buscarla para verificar si había tenido razón y para mi sorpresa ahora lamento no haberla visto en aquellos años. La hubiera amado. Me habría adelantado a varias situaciones que viví en la prepa y la universidad durante los talleres de ciencia y escuelas de verano. Quizá lo único bueno de perdérmela es que seguramente hubiera tardado en superar un crush por Nikki porque no tuve una novia genio como ella hasta la mitad de la universidad. La serie fue grabada a principios de los 90's en las instalaciones del ATCA, el "mini-VLA" australiano aunque en la serie tiene el nombre ficticio de Kaputar Station (curiosamente ese observatorio fue mi wallpaper por mucho tiempo cuando estaba en la prepa). Fue un proyecto en conjunto con el CSIRO (algo así como el CONACyT de Australia) y un productora de televisión. Pienso que sería una excelente idea hacer una versión mexicana en el INAOE, que es un centro de investigación que lleva años realizando actividades de difusión de la ciencia entre chavos de secundaria y prepa. Los alrededores de ese centro también son muy bonitos. Podría crearse un pueblo ficticio usando como locaciones de grabación no sólo Tonanzintla sino también Cholula y Atlixco. Por lo que sé, el Canal Once transmitió esa serie aunque de eso me enteré después en comentarios de Youtube. Creo que son lo únicos que estarían interesados de producir algo así en este país.
martes, 29 de septiembre de 2020
Fuera de tiempo
![]() |
Cine Robles, 2017 |
Acabo de descubrir otro "efecto Mandela" en mi vida. Cuando iba en la primaria pasaba un vocho,un datsun o una combi voceando los "trailers" de lo que era el cine Robles de Jojutla. El trailer ambulante que más recuerdo iba más o menos así: "¡A Arthur no le puede ir peor en la vida! Su casa está a punto de ser demolida y ha descubierto que su mejor amigo es un extraterrestre...". Si son algo geeks entenderán la referencia: The Hitchhiker's Guide to the Galaxy. Yo supe de que película se trataba hasta muchos años después pero la sinopsis se me quedó grabada por qué se me he hizo bien random en aquel entonces (mencionaba lo de la destrucción de la tierra para hacer una autopista espacial). Hace unos días noté un detalle muy extraño. Esa adaptación al cine se hizo en 2005 pero mi recuerdo es necesariamente de entre 2002 y 2003. Estoy seguro, al menos en lo que respecta a la sensación de fidelidad del recuerdo. Fueron varios días tomando clase desde el segundo piso de mi primaria, tengo una imagen mental con muchos detalles. No he encontrado ninguna adaptación anterior más que una serie de la BBC de los 80's. Por Navaja de Occam mi recuerdo debe ser el anacrónico. En cualquier caso es extraño. ¿Cuantos de nuestros recuerdos más "seguros" estarán mal? Mi mejor hipótesis es la siguiente. Me mudé a Chetumal en diciembre de 2005, en 3er año de secundaria. Mi secundaria de Morelos (Tec. 34) sólo tenía edificios de un pisa y era muy diferente a mi primaria (Cuahuatemoc). La nueva secundaria (Tec. 15) me recordaba a mi primaria y cuando tomaba clase tenía la sensación de estar en ella. Posiblemente durante varios días estuvo pasando un carro voceando la sinopsis de THGTG y la doble referencia colocó mi recuerdo algunos años antes con el paso del tiempo. No estoy seguro pero debe ser lo que en realidad ocurrió.
sábado, 22 de agosto de 2020
jueves, 20 de agosto de 2020
Instalación de VCS + PlatformIO en Debian/Ubuntu
Estoy aprendiendo a usar la familia de microcontroladores STM32 y ha sido todo un mundo nuevo para mi. Hay bastante información pero me ha parecido algo dispersa (seguramente eso cambiará en el futuro). Quiero hacer una aportación con una nota sobre el setup del entorno de desarrollo multiplataforma PlatformIO que en entradas futuras usaremos para programar un STM32F103C8T6 (Blue Pill).
1. Instalar VSC
Lo primero que hay que hacer es instalar Visual Studio Code. Descarguen el fichero .deb desde aquí e instalen desde el mismo directorio donde está el instalador con:
$ sudo apt install ./<file>.deb
2. Instalar el complemento PlatformIO IDE
Una vez instalado VSC, ábranlo y muévanse a la pestaña de extensiones con Cntrl+Shilf+x o dando click en la pestaña:
Den click en instalar en la opción correspondiente y esperen a que termine.
3. Instalar reglas udev
Debemos movernos ahora al directorio /etc/udev/rules.d y descargar el archivo con las reglas necesarias con la siguiente serie de comandos:
$ curl -fsSL https://raw.githubusercontent.com/platformio/platformio-core/master/scripts/99-platformio-udev.rules | sudo tee /etc/udev/rules.d/99-platformio-udev.rules
Después de hacer esto deben reiniciar su computadora. Si no instalan estas reglas les dará el error: Error: libusb_open() failed with LIBUSB_ERROR_ACCESS al intentar cargar un programa a su dispositivo.
En principio es todo. PlatformIO instalará automáticamente los drivers y bibliotecas necesarias sobre la marcha. Es una maravilla.
martes, 11 de agosto de 2020
Chan's FatFs en PIC24: Librería para lectura/escritura en memorias SD
FatFs es un módulo de sistema de archivos FAT32/16 para microcontroladores. Está escrito en ANSI C y es altamente portable entre una gran variedad de dispositivos. Si bien su documentación es muy detallada, al ser muy genérica es fácil perderse a la hora de hacer una implementación en un microcontrolador en particular. En esta entrada trataré de explicar lo mejor posible como portarla a la familia PIC24. Lo primero que hay que entender es como están estructurados sus 5 archivos:
Los únicos archivos del módulo que hay que editar son diskio.c y ffconf.h. La portabilidad radica en terminar de escribir las siguientes funciones de comunicación SPI:- BYTE xchg_spi (BYTE dat)
- void xmit_spi_multi (const BYTE* buff, UINT cnt)
- void rcvr_spi_multi (BYTE* buff, UINT cnt )
- void FCKL_SLOW(void)
- void FCKL_FAST(void)
definir los macros:
- CS_LOW()
- CS_HIGH()
- MMC_CD
- MMC_WP
y crear una rutina de interrupción por timer de 1 KHz que incrementa una variable de conteo de tiempo: volatile UINT Timer. Esta interrupción sirve para el manejo de timeouts. En los archivos del ejemplo podrán encontrar comentarios detallados sobre el funcionamiento de estas funciones. Pondré un enlace al final.
Para simplificar esta primer versión del programa de ejemplo he desactivado la opción de reloj de tiempo real modificando la linea 237 de ffconf.h: FF_FS_NORTC = 1. Cuando está opción esta desactivada se requiere crear una función adicional que maneje el tiempo del sistema de archivos (lo haremos en otra entrada usando el módulo RTC del PIC24FJXXGB002).
En esta entrada ya he explicado como configurar el reloj de sistema y en esta otra como configurar el modulo SPI y el Periferial Pin Select.
Configuración de SCK
La primer cosa que hay hacer es estar seguros de que se pueda elegir entre dos frecuencias diferentes para el reloj del módulo SPI. Una baja que se encuentre entre 100 y 400 KHz y una alta que se la de operación (hay limites para esta frecuencia que explicaré más adelante). En la página 23 del documento Section 23. Serial Peripheral Interface encontramos la siguiente información:
Los módulos de la familia PIC24 tienen dos prescalers. En este ejemplo lo que haré será dejar fijo el prescaler primario a 16:1 y alternar con el secundario entre 8:1 para el reloj con FCLK_SLOW() para tener 125 KHz y 2:1 con FCLK_FAST() para tener 500 KHz. Para verificar experimentalmente que la frecuencia sea correcta pueden usar el modo de disparo único de un osciloscopio (aquí hay un tutorial para configurar ese modo). Buena parte de las fallas con la implementación de la librería FatFs tienen que ver con una frecuencia baja incorrecta.
Conexión con el modulo SD
La segunda falla de implementación más común tiene que ver con la conexión física con los módulos SD. He visto en varios foros, y también me pasó, que los dispositivos de 3.3 V fallan con algunos módulos microSD de este tipo pero que funcionan perfectamente cuando construyen sus propios circuitos de conexión a la memoria SD. En mi caso sólo me ha funcionado cn PIC24 con un módulo SD de tamaño estándar (como este) y con jumper flotando conectado a SCK. Desde PIC18 a 5V no he tenido problemas.
La tercer falla más común es con la frecuencia máxima. Comentan en los foros que algunos módulos prefabricados no están optimizados para trabajar a máxima frecuencia de SDK. Sus circuitos tienen un pasa-bajas que solo permite frecuencias de entre 1-2 MHz. Si están desarrollando una aplicación comercial es mejor que integren su propio circuito de conexión con un socket microSD.
Edit: ¡Alcance hacerla funcionar hasta la frecuencia máxima de SCK para el GB002 que es de 8MHz!
Otro detalle más. El simulador Proteus solo funciona con memorias virtuales en formato FAT16 en algunas instalaciones. Al menos a mi sólo me he funcionado así. En físico no he tenido problemas con FAT32.
Nivel de optimización
Esta librería ocupa bastante espacio. Un microcontrolador de 32K de memoria de programa es apenas suficiente (pero funciona). Idealmente deberían usar de al menos 64K. Si llega a marcar un error al compilar pueden intentar subir el nivel de optimización del compilador a 2 de la siguiente forma:
![]() |
Click para agrandar |
Código principal
Si todo lo anterior está en orden el siguiente ejemplo de escritura debe funcionar sin problemas con este circuito (el código es para GB002, el circuito en Proteus tiene un GA002 pero el conexionado es el mismo):
jueves, 6 de agosto de 2020
Cielomotos y trenes

sábado, 1 de agosto de 2020
Creatividad
Mi pequeña contribución que puedo hacer aquí es recomendar dos libros que he leído durante la cuarentena y que sentí que verdaderamente abren la caja negra del pensamiento creativo: