Hola a todos,
Estoy intentando ver cómo cuenta el temporizador TMR0 del PIC12f675. Para ello, incremento una variable y saco algunos de sus bits por la E/S.
Curiosamente, pinchando las salidas del osciloscopio sólo en GP5 encuentro una señal cuadrada y de la frecuencia esperada. Las demás, GP4, GP2, GP1 y GP0 permanecen a 0 y pegan un impulso muy rápido a 1 de forma periódica (de corta duración, algunos µs). Diría que ese impulso salta a la frecuencia correcta, pero al ser demasiado rápido no lo he conseguido medir.
Creo que algo está pisando esos bits bajándolos a 0 tan pronto termina la interrupción pero ando completamente perdido . ¿ Alguien tiene alguna sugerencia? El PIC no está dañado porque he programado uno nuevo y hace lo mismo.
Este es el código:
¡¡ Gracias!!
Estoy intentando ver cómo cuenta el temporizador TMR0 del PIC12f675. Para ello, incremento una variable y saco algunos de sus bits por la E/S.
Curiosamente, pinchando las salidas del osciloscopio sólo en GP5 encuentro una señal cuadrada y de la frecuencia esperada. Las demás, GP4, GP2, GP1 y GP0 permanecen a 0 y pegan un impulso muy rápido a 1 de forma periódica (de corta duración, algunos µs). Diría que ese impulso salta a la frecuencia correcta, pero al ser demasiado rápido no lo he conseguido medir.
Creo que algo está pisando esos bits bajándolos a 0 tan pronto termina la interrupción pero ando completamente perdido . ¿ Alguien tiene alguna sugerencia? El PIC no está dañado porque he programado uno nuevo y hace lo mismo.
Este es el código:
PHP:
#include <htc.h>
volatile unsigned char cuenta = 0;
void interrupt interr ()
{
if ( T0IF )
{
T0IF = 0;
cuenta++;
GP0 = cuenta >> 1;
GP1 = cuenta >> 2;
GP2 = cuenta >> 3;
GP4 = cuenta >> 4;
GP5 = cuenta >> 5;
}
}
main ()
{
// salidas: 0 (GP0, GP1, GP2, GP4, GP5)
// entrada: 1 (GP3)
TRISIO = 0b001000;
// salidas inicializadas
GP0 = 0;
GP1 = 0;
GP2 = 0;
GP4 = 0;
GP5 = 0;
// configuración de TMR0 con:
// T0CS: 0 (reloj interno de cuenta)
// PSA: 0 (prescalado asignado a TMR0)
// PS: 111 (prescalado de 256)
OPTION_REG = 0b00111;
// habilitar interrupción de TMR0 y global
T0IE = 1;
GIE = 1;
while ( 1 )
_nop ();
}
¡¡ Gracias!!