Autor Tema: [Solucionado] Ayuda con problemas de Timer0  (Leído 1912 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado 8bits

  • PIC10
  • *
  • Mensajes: 13
[Solucionado] Ayuda con problemas de Timer0
« en: 30 de Julio de 2019, 13:28:44 »
Hola a todos :) Solicito un poco de su orientación. EStoy trabajando con un PIC18LF4550 montado en una protoboard con el circuito minimo recomendado: boton de reset, cristal de 20MHz con sus correspondientes capacitores de 22pF y utilizando ICSP.

Usando el cristal a 20Mz y la funcion __delay_ms(500) puedo observar una onda cuadrada con un tiempo en "ON" de 500ms, hasta aquí todo bien.
Código: [Seleccionar]
#include <xc.h>

#pragma config FOSC = HS
#pragma config MCLRE = ON
#pragma config PWRT = ON                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
#pragma config LVP = OFF
#define _XTAL_FREQ 20000000

void main(void) {
    TRISDbits.RD0 = 0;
    LATDbits.LATD0 = 0;
   
    while(1){
        __delay_ms(500);
        LATDbits.LATD0 = !LATDbits.LATD0;
       
    }
   
}

SDS00001" border="0

Ahora el segundo paso, fue utilizar el TIMER0 con una interrupción (desbordamiento de TMR0) cada 1ms, y asi contar 500 veces 1ms para obtener 500ms, el problema es que al visualizar la forma de onda en el osciloscopio, de ningura manera corresponde a 500ms parece de 700ms

Código: [Seleccionar]
#include <xc.h>
#include <stdbool.h>
#pragma config FOSC = HS
#pragma config MCLRE = ON
#pragma config PWRT = ON                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
#pragma config LVP = OFF
#define SAMPLING_F 500
#define _XTAL_FREQ 20000000
/*
 *
 */
int contador = 1;
bool tmrflag = 0;

void __interrupt() myISR(){
    if(INTCONbits.TMR0IF){
        //El contador se desborda cad 1ms
        INTCONbits.TMR0IF = 0;
        contador++;
        if(contador == SAMPLING_F){
            contador = 1;
            tmrflag = 1;
        }
    }   
}

void main(void) {
    //OSCCON = 0b01110000;
    TRISDbits.RD0 = 0;
    LATDbits.LATD0 = 0;
    //Prescaller 1:32, 8-bit mode
    T0CON = 0b11000100;
    //Precarga para 0.9984ms aprox 1ms
    TMR0 = 0x64;
   
    INTCONbits.TMR0IF = 0;
    INTCONbits.TMR0IE = 1;
    INTCONbits.GIE = 1;
    INTCONbits.PEIE = 1;
    while(1){
        if(tmrflag){
            LATDbits.LATD0 = !LATDbits.LATD0;
            tmrflag = 0;
        }
       
    }
   
}

SDS00002" border="0


Ya intente cambiando el prescaler del Timer0 y el valor de precarga en TMR0 y aun asi no funciona.
¿Que creen que podría ser?
« Última modificación: 30 de Julio de 2019, 15:24:25 por 8bits »

Desconectado Eduardo2

  • PIC24F
  • *****
  • Mensajes: 965
Re:Ayuda con problemas de Timer0
« Respuesta #1 en: 30 de Julio de 2019, 14:08:43 »
La precarga tenés que repetirla en cada interrupción, sino los siguientes desbordes son cada 1.6ms

Código: [Seleccionar]
void __interrupt() myISR(){
    TMR0 = 0x64;        //<<<<<<<<<<<
    if(INTCONbits.TMR0IF){
        //El contador se desborda cad 1ms
        .........
     

Desconectado 8bits

  • PIC10
  • *
  • Mensajes: 13
Re:Ayuda con problemas de Timer0
« Respuesta #2 en: 30 de Julio de 2019, 15:23:51 »
La precarga tenés que repetirla en cada interrupción, sino los siguientes desbordes son cada 1.6ms

Código: [Seleccionar]
void __interrupt() myISR(){
    TMR0 = 0x64;        //<<<<<<<<<<<
    if(INTCONbits.TMR0IF){
        //El contador se desborda cad 1ms
        .........
     

Perfecto!!! muchísimas gracias


 

anything