Bueno les paso a comentar, estoy en un proyecto de fin de curso que tengo que entregar ahora a fines de Febrero, es una Matriz de leds controlada por teclado PS2. Lamentablemente hace tiempo me viene sucediendo un error muy raro, paso a explicar.
Estoy utilizando el PIC 16f648a.
Realizé el siguiente codigo en el compilador CCS:
Despues realizé este codigo en el MikroC (realiza exactamente lo mismo que el codigo anterior)
Se compila perfecto en los dos casos, y cuando lo simulo en proteus anda perfecto, se ponen a nivel alto las dos salidas.
EL PROBLEMA
Cuando cargo en el PIC el hex generado por el MikroC, no funciona. Osea, se programa bien, pero a la hora de comprobar el funcionamiento veo que los pines RA1 y RA0 se ponen a 2.4V, en ocasiones a 3.5V. También comprobé que me "bloquea" las otras salidas, me pone estado bajo otras salidas que debian estar a nivel alto (utilizando otro codigo de prueba).
ACLARACIONES
Cuando cargo el Hex generado por el CCS, este funciona perfecto. Me pone en estado Alto las dos salidas.
Necesito usar el MikroC, por la función que decodifica el teclado PS2.
La parte Hardware esta bien. Ya que con uno funciona.
Utilizo un reloj de 20MHZ, lo programo con el ICPROG usando un JDM.
Vuelvo a aclarar que simulando en el proteus funciona perfecto.
Es muy raro el error, puede ser que el error este en los FUSES ?. En el mikroc también tengo el MasterClear Disabled, al igual que en el CCS. Y después todo deshabilitado.
Puede ser que cambiando de programador, usando el Winpic se solucione ?
Estoy utilizando el PIC 16f648a.
Realizé el siguiente codigo en el compilador CCS:
Código:
#include <16F648A.h>
#FUSES NOWDT //Watch Dog Timer
#FUSES HS
#FUSES NOMCLR
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#use delay(clock=20000000) *
#byte PORTA = 0x05
#byte PORTB = 0x06
void main()
{
set_tris_a(0b11011111); * //Configuro como salidas
set_tris_b(0b11111110);
while(TRUE)
{
output_high(PIN_A1); * //Pongo a nivel alto RA1 y RA0
output_high(PIN_A0);
}
}
Despues realizé este codigo en el MikroC (realiza exactamente lo mismo que el codigo anterior)
Código:
void main() {
* * delay_ms(100);
TRISA = 0b00100000;
TRISB = 0b00000001; *
while(1)
{
PORTA.B1 = 1;
PORTA.B0 = 1;
}
}
Se compila perfecto en los dos casos, y cuando lo simulo en proteus anda perfecto, se ponen a nivel alto las dos salidas.
EL PROBLEMA
Cuando cargo en el PIC el hex generado por el MikroC, no funciona. Osea, se programa bien, pero a la hora de comprobar el funcionamiento veo que los pines RA1 y RA0 se ponen a 2.4V, en ocasiones a 3.5V. También comprobé que me "bloquea" las otras salidas, me pone estado bajo otras salidas que debian estar a nivel alto (utilizando otro codigo de prueba).
ACLARACIONES
Cuando cargo el Hex generado por el CCS, este funciona perfecto. Me pone en estado Alto las dos salidas.
Necesito usar el MikroC, por la función que decodifica el teclado PS2.
La parte Hardware esta bien. Ya que con uno funciona.
Utilizo un reloj de 20MHZ, lo programo con el ICPROG usando un JDM.
Vuelvo a aclarar que simulando en el proteus funciona perfecto.
Es muy raro el error, puede ser que el error este en los FUSES ?. En el mikroc también tengo el MasterClear Disabled, al igual que en el CCS. Y después todo deshabilitado.
Puede ser que cambiando de programador, usando el Winpic se solucione ?