En la entrada anterior comentaba que necesitaba una interrupción con reloj secundario para verificar que mi configuración de cristal era correcta. Lo que en realidad quería hacer es de lo que quiero hablar en esta entrada. He combinado la librería de consola serial de Chan con una librería terminé de escribir a partir de los programas de ejemplo de la página de Microchip. Es una aplicación sencilla en la que se puede leer y escribir el valor del RTCC vía puerto serial. Los detalles los pueden encontrar en este repositorio de Github. No olviden ponerme una estrella.
lunes, 15 de febrero de 2021
Módulo RTCC en PIC24
jueves, 11 de febrero de 2021
Interrupción por TMR1 con reloj secundario (SOSC) en PIC24
/* | |
* File: main.c | |
* Author: Rodolfo Escobar | |
* | |
* Created on 10 de febrero de 2021, 09:44 AM | |
*/ | |
//--- Bits de configuración --- | |
#pragma config POSCMOD = XT // Oscilador primario en modo XT | |
#pragma config FNOSC = PRIPLL // Oscilador primaro con PLL | |
#pragma config PLL96MHZ = ON // PLL activado | |
#pragma config PLLDIV = DIV2 // Entrada de 8MHz | |
#pragma config RTCOSC = SOSC // RTCC usa Osc secundario (SOSC)) | |
#pragma config SOSCSEL = SOSC // Pines de Oscilador Secundario en modo SOSC | |
#pragma config FWDTEN = OFF // Timmer de Watchdog desactivado | |
#pragma config JTAGEN = OFF // Puerto JTAG desactivado | |
//------------------------------- | |
#include <p24FJ32GB002.h> | |
#include "xc.h" | |
#define FCY 16000000UL | |
#include "libpic30.h" | |
void gpio_init(void); | |
// Interrupción TMR1 | |
void __attribute__((interrupt, auto_psv)) _T1Interrupt (void){ | |
_T1IF = 0; // Limpiar bandera irq | |
LATBbits.LATB9 ^= 1; // Toggle del LED | |
} | |
int main(void) { | |
//----- Setup ----- | |
gpio_init(); | |
//----- SOSC | |
OSCCONbits.SOSCEN = 1; // Habilitar SOSC | |
__delay_ms(250); // Tiempo de estabilización | |
//----- TMR1 | |
T1CON = 0x00; // Detiene temporizador | |
T1CONbits.TCS = 1; // Entrada por SOSC/T1CK (pag. 150) (32.768 kHz) | |
T1CONbits.TCKPS = 0b00; // Prescaler 1:1 (pag. 130) | |
TMR1 = 0x00; //Limpia el regitro de temporizador | |
PR1 = 32768; //Carga el periodo de 1 segundo | |
IPC0bits.T1IP = 0x01; //Prioridad de interrupción | |
IFS0bits.T1IF = 0; //Limpia bandera de periodo | |
IEC0bits.T1IE = 1; //Habilita la interrupción por TMR1 | |
T1CONbits.TON = 1; //Inicia TMR1 | |
//----------------- | |
while(1){} // Loop | |
return 0; | |
} | |
void gpio_init(void) | |
{ | |
TRISBbits.TRISB9 = 0; // B9 como salida (LED_STATUS) (18) | |
} |
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.