Edit: Al final del post escribí de qué manera lo solucioné.
Hola, tengo otra consulta.
Ahora hice un programa que va contando en un display de 7 segmentos las veces que apretamos un pulsador (0-9). Cuando apretamos un pulsador, mediante la interrupcion sumamos un contador y en base a eso mandamos la señal al display.
Mi problema es que en la placa protoboard, mi contador en vez de empezar de 0, empieza desde 1. En cambio en la simulación sí empieza desde 0, como debe ser.
Puede ser que por alguna razón, cuando se inicializa el pic, se me genera un flanco de H_TO_L y por eso ya de entrada en un tiempo imperceptible se me aumenta el contador de 0 a 1? no se, es medio raro.. La resistencia que usé para conectar el pin RB0 a 5v es de 11k, no de 10k, porque no tenía. Así que agarré 2 resistencias de 22k y las puse en paralelo.
Código:
#include <16f887.h>
#use delay (clock=1000000)
int8 i=0;
#int_ext
void sumar()
{
i=i+1;
}
void main()
{
int8 num[10],i_anterior=15;
enable_interrupts(int_ext);
enable_interrupts(global);
ext_int_edge(H_TO_L);
set_tris_d(0x00);
set_tris_b(0b00000001);
output_d(0x00);
num[0]=0b00111111;
num[1]=0b00000110;
num[2]=0b01011011;
num[3]=0b01001111;
num[4]=0b01100110;
num[5]=0b01101101;
num[6]=0b01111101;
num[7]=0b00000111;
num[8]=0b01111111;
num[9]=0b01100111;
while(1)
{
if(i<10 && i_anterior!=i)
{
output_d(num[i]);
i_anterior=i;
}
if(i>=10)
{
output_d(0b01000000);
delay_ms(500);
output_d(0b00000000);
delay_ms(500);
}
}
}
Circuito:
Gracias.
Solución:
Bueno, lo que hice fue medio un "parche", y fue inicializar la variable del contador, i, en -1, y cuando arranca el programa, esperar con un delay y después poner i=0. En la función de la interrupción le puse un if que pregunta si i es igual a -1, en ese caso no hace nada, entonces así logro escapar a esa interrupcion indeseada de cuando arranco el pic. Lo que no se es por qué sucede esa interrupción indeseada.