Mi objetivo es medir pulsos PWM. Pero para lograrlo, estoy dando pequeños pasos, por lo que mi primer objetivo es establecer un pin cuando se detecta un borde de la señal PWM. La señal PWM ingresa al microcontrolador (pic18f25k80, hoja de datos ) en el pin INT1 (RB1). Escribí el código para inicializar la interrupción externa:
#include <stdio.h>
#include <stdlib.h>
#include <pic18f25k80.h>
#include "config.h"
void main() {
TRISB1 = 1; // INT1 as input
LATB1 = 0; // Clear INT1
TRISC6 = 0; // RC6 as output
LATC6 = 0; // Clear RC6
//Setup of INT1
RCONbits.IPEN = 0; //Disable priorities
INTCONbits.GIE_GIEH = 1; //Enable Global interrupt
INTCONbits.PEIE_GIEL = 1; //Enable peripheral interrupts
INTCON2bits.INTEDG1 = 1; // Edge select for INT1
INTCON3bits.INT1IE = 1; // Enable the INT1 external interrupt
//INTCON3bits.INT1IP = 0; // Low priority
INTCON3bits.INT1IF = 0; //Clear external interrupt flag bit
while(1) {
}
}
//Interrupt Service Routine
#pragma code isr=0x08
#pragma interrupt isr
void isr(void)
{
if(INTCON3bits.INT1IF){
LATC6 = 1;
}
}
#pragma code
Parece que el indicador de interrupción no sube, porque el pin RC6 está bajo. Lo he medido con un osciloscopio. ¿Qué estoy haciendo mal?
Por cierto, ¿es esa la forma correcta de llamar a un ISR?
Esto probablemente se deba a que hay otras funciones en el pin B1 que deben desactivarse antes de poder usarlo como entrada digital.
En la hoja de datos encontramos la tabla 11-4, que se muestra a continuación:
Una mirada rápida a ese registro en la hoja de datos muestra que está 1
por defecto, lo que significa modo de entrada analógica:
Deberá borrar este bit antes de poder usarlo como entrada digital.
También deberá restablecer INTCON3bits.INT1IF
su 0
rutina de servicio de interrupción o el controlador seguirá disparando y nunca escapará.
Si está tratando de medir PWM, puede leer la sección 20.2 "Modo de captura" en la hoja de datos. Esto utiliza el periférico mejorado de captura y comparación. Actúa como su interrupción de selección de borde, pero también almacenará el valor de TMR1 o TMR3, lo que le permitirá realizar mediciones del período o ciclo de trabajo (o ambos).
David
David