Estoy ejecutando debajo del código en un PIC16F887 que se ejecuta a 20 MHz. Alimino a PORTB.0
una señal de 1 KHz desde mi generador de señales. Sin embargo, cuando la señal es baja, PORTC.1
cambia a una velocidad de ~ 5usec o ~ 10usec. Además, he conectado una salida de OP-AMP que da 0V-4V, igual.
He intentado habilitar pull ups débiles en el interior, no funcionó.
El microcontrolador está en una EasyPIC5 , así que habilite y deshabilite las resistencias de pull-up o pull-down que son 10K. Tampoco funcionó.
¿Se trata de algún tipo de problema de silicio (?) o hay un error en mi código?
Aquí hay una captura de pantalla del osciloscopio que sondea PORTC.1
:
Aquí está mi código, omita parte del tema fuera de él:
volatile unsigned int fiftymicros=0;
volatile unsigned int milis=0;
volatile unsigned char fiftymicroscounter=0;
volatile unsigned int data_time=0;
volatile unsigned int milis_ctr=0;
unsigned long int data_bar[20]={0};
void interrupt()
{
if(INTCON.T0IF)
{
TMR0=198;
INTCON.T0IF=0;
fiftymicros++;
if(++fiftymicroscounter==40) { fiftymicroscounter=0; milis++; }
}
if(INTCON.RBIF)
{
PORTC.F1=~PORTC.F1;
INTCON.RBIF=0;
}
}
void main()
{
ANSEL =0;
ANSELH=0;
TRISA=0; PORTA=0;
TRISB=0x01; PORTB=0;
TRISC=0; PORTC=0;
TRISD=0; PORTD=0;
TRISE=0; PORTE=0;
OPTION_REG.INTEDG=1;
OPTION_REG.T0CS=0;
OPTION_REG.PSA=0;
OPTION_REG.PS0=1;
OPTION_REG.PS1=0;
OPTION_REG.PS2=0;
//OPTION_REG.B7=0;
//WPUB=0x80;
INTCON.TMR0IE=0;
INTCON.RBIE=1;
IOCB.B0=1;
INTCON.GIE=1;
UART1_Init(9600);
Delay_ms(100);
milis_ctr=milis;
while(1)
{
}
}