Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

07/02/2011 #1


Posible bug en MikroC ? Utilizando PIC 16f628a
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:
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 ?
07/02/2011 #2


Hola, que tal?

Podrá ser que no hayas deshabilitado los comparadores analógicos que están por default bloqueando el porta?

Saludos!
16/02/2011 #3

Avatar de DSP

En la documentacion del mikroC explican que en los PIC16 existe un problema en la escritura de puertos cuando tienes una carga capacitiva, ya que para escribir en un pin, primero se lee lo que hay previamente y despues se hace una operacion con el registro. Checa esa documentacion y verifica si tienes en algun pin capacitores.

No creo que sea un bug, porque es un programa muy simple para que no haya sido detectado antes como bug.
17/02/2012 #4


mcpiebot dijo: Ver Mensaje
Hola, que tal?

Podrá ser que no hayas deshabilitado los comparadores analógicos que están por default bloqueando el porta?

Saludos!
Bueno, tarde mucho en responder. Pero si a alguien le esta pasando lo mismo le comento que esta era la solucion. Habia que deshabilitar los comparadores analógicos con una simple funcion, si mal no recuerdo era ADCON...
Disculpen, no recuerdo bien ahora como era bien la función.

GRACIAS ! y Suerte.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.