Autor Tema: Problema extraño con pic16f877a  (Leído 3087 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado JORGITO_YKE

  • PIC10
  • *
  • Mensajes: 39
Problema extraño con pic16f877a
« en: 18 de Mayo de 2014, 19:47:58 »
Buenas, estoy desarrollando mi primer proyecto para adentrarme en este mundo de los pic, soy aficcionado a la electronica y tengo unos pequeño problemas que no logro comprender. Despues de buscar por el foro no he encontrado un problema similar si parecidos pero no igual. El tema es que un pic que me funciona perfectamente de arriba para abajo le dio por no arrancar. Lo tengo montado en una placa de entrenamiento casera y me funciono bien. El problema esta en que dependiendo de como le cuadre sacas y pones el oscilador externo de 4mhz con aliementacion y en mi programa (adjunto aqui abajo) se que se enciende un led al principio pero no hace nada mas que eso, se queda como congelado, si aprietas el reset (esta a positivo con una resistencia de 10k) ya no vuelve a encender el led pero si le tocas en el oscilador (a veces) vuelve a hacer lo mismo. El pic se que funciona porque hoy mismo estuve desarrollando el programa pero sin mirarlo siquiera empezo con esto. Alguien sabe alguna cosa al respecto? Yo soy muy novato realmente y lei mucho foro y manual pero esto me sobrepasa realmente jaja. Un saludo.

este es el programa

Código: [Seleccionar]
'--------------------------------------------------------
INCLUDE "ALLDIGITAL.pbp"
'DEFINE  SHOWDIGITAL 1                              
'--------------------------------------------------------
'VELOCIDAD DEL OSCILADOR

DEFINE OSC 4
'--------------------------------------------------------
'CONFIGURACION DEL LCD

DEFINE LCD_DREG PORTB     'Define el puerto de los datos del LCD
DEFINE LCD_DBIT 4         'Utilizamos D4 D5 D6 D7
DEFINE LCD_RSREG PORTB     'Define el puerto de RS
DEFINE LCD_RSBIT 1         'Numero de puerto de RS
DEFINE LCD_EREG PORTB     'Puerto de Enable
DEFINE LCD_EBIT 2         'Numero de puerto de Enable
DEFINE LCD_BITS 4         'Bits de datos
DEFINE LCD_LINES 2       'Lineas del LCD
'--------------------------------------------------------
'DECLARACION DE VARIABLES

Minutes VAR BYTE 'Variable de los minutos 0-255
Seconds VAR BYTE 'Variable de los segundos 0-255
Decseconds VAR BYTE 'Variable de decimas de segundo 0-255
'--------------------------------------------------------
'CONFIGURACION DE PUERTOS

TRISA=%11110000               'PORTA como entradas
TRISB=0                  'PORTB como salida
TRISC=0                    'PORTC como salida
TRISD=0                    'PORTD como salida
TRISE=0                  'PORTE como salida
'--------------------------------------------------------
'INICIALIZACION DE LAS VARIABLES

Minutes=0
Seconds=0
Decseconds=0
'--------------------------------------------------------
'COMIENZO DEL PROGRAMA

HIGH PORTC.0 'Pongo el led verde en alto

PAUSE 2000 'Pausa de 2000ms para inicializar el LCD

LCDOUT $FE,1 'Limpio la pantalla

LCDOUT $FE,$80,"     BIENVENIDO     " 'Muestro presentacion en pantalla
LCDOUT $FE,$C0,"       JORGE        "

PAUSE 2500 'Pausa de 2500ms

LCDOUT $FE,1 'Limpio la pantalla

LCDOUT $FE,$80,"   INICIALIZANDO    " 'Muestro presentacion en pantalla
LCDOUT $FE,$C0,"    INSOLADORA      "

PAUSE 2500 'Pausa de 2500ms

LCDOUT $FE,1 'Limpio la pantalla
'--------------------------------------------------------
'AJUSTE DE LAS DECIMAS DE SEGUNDO

Setdecseconds:

LCDOUT $FE,$80, "  AJUSTA EL TIEMPO  "
LCDOUT $FE,$C0, DEC Minutes,":",DEC Seconds,DEC Decseconds

IF PORTA.0=1 THEN                               'Si pulso UP incremento decimas de segundo
PAUSE 120
Decseconds=Decseconds+1
ENDIF

IF PORTA.1=1 THEN                               'Si pulso DOWN disminuyo decimas de segundo
PAUSE 120
Decseconds=Decseconds-1
ENDIF
        
        IF PORTA.2=1 THEN                               'Si pulso LEFT voy a ajustar segundos                                  
            PAUSE 120
            GOTO Setseconds
        ENDIF

        IF PORTA.3=1 THEN                               'Si pulso RIGHT voy a ajustar minutos                                  
            PAUSE 120
            GOTO Setminutes
        ENDIF

        IF

IF Decseconds>9 THEN                            'Si la variable Decseconds es mayor que 9 le doy valor cero
     Decseconds=0
ENDIF

GOTO Setdecseconds
'--------------------------------------------------------
'AJUSTE DE LOS SEGUNDOS

Setseconds:

LCDOUT $FE,$80, "  AJUSTA EL TIEMPO  "
LCDOUT $FE,$C0, DEC Minutes,":",DEC Seconds,DEC Decseconds

IF PORTA.0=1 THEN                               'Si pulso UP incremento los segundos
PAUSE 120
Seconds=Seconds+1
ENDIF

IF PORTA.1=1 THEN                               'Si pulso DOWN disminuyo los segundos
PAUSE 120
Seconds=Seconds-1
ENDIF

IF PORTA.2=1 THEN                               'Si pulso LEFT voy a ajustar minutos                                  
            PAUSE 120
            GOTO Setminutes
        ENDIF

        IF PORTA.3=1 THEN                               'Si pulso RIGHT voy a ajustar decimas de segundo                                  
            PAUSE 120
            GOTO Setdecseconds
        ENDIF

IF Seconds>5 THEN                             'Si la variable Seconds es mayor que 9 le doy valor cero
Seconds=0
ENDIF

GOTO Setseconds
'--------------------------------------------------------
'AJUSTE DE LOS MINUTOS

Setminutes:

LCDOUT $FE,$80, "  AJUSTA EL TIEMPO  "
LCDOUT $FE,$C0, DEC Minutes,":",DEC Seconds,DEC Decseconds

IF PORTA.0=1 THEN                               'Si pulso UP incremento los minutos
PAUSE 120
Minutes=Minutes+1
ENDIF

IF PORTA.1=1 THEN                               'Si pulso DOWN disminuyo los minutos
PAUSE 120
Minutes=Minutes-1
ENDIF

IF PORTA.2=1 THEN                               'Si pulso LEFT voy a ajustar decimas de segundo                                
            PAUSE 120
            GOTO Setdecseconds
        ENDIF

        IF PORTA.3=1 THEN                               'Si pulso RIGHT voy a ajustar segundos                                
            PAUSE 120
            GOTO Setseconds
        ENDIF

IF Minutes>5 THEN
Minutes=0
ENDIF

GOTO Setminutes
'--------------------------------------------------------
END


Desconectado QIQE

  • PIC18
  • ****
  • Mensajes: 335
Re: Problema extraño con pic16f877a
« Respuesta #1 en: 18 de Mayo de 2014, 19:54:09 »
Cuando programas tienes activo el bit lvp? Si es así anulalo
Tienes puestos los condensadores correspondientes a masa en el cristal de cuarzo??
No he visto nada adjunto a tu mensaje, el foro tiene la opción de porder pegar tu código resaltándolo como en el editor que utilices, si empleas esta opción todos podremos ver tu como digo y aconsejarte mejor e estuviese hay el problema
Muchas gracias por vuestro tiempo.

Saludos desde valencia!!!

Desconectado JORGITO_YKE

  • PIC10
  • *
  • Mensajes: 39
Re: Problema extraño con pic16f877a
« Respuesta #2 en: 18 de Mayo de 2014, 19:56:19 »
Tengo puestos a masa dos condensadores de 15pf y no tengo ningún fuse puesto solo el XT enseguida corrijo eso del codigo.

Desconectado QIQE

  • PIC18
  • ****
  • Mensajes: 335
Re: Problema extraño con pic16f877a
« Respuesta #3 en: 18 de Mayo de 2014, 20:02:52 »
lEn la pantalla llegas a ver algo?
Muchas gracias por vuestro tiempo.

Saludos desde valencia!!!

Desconectado JORGITO_YKE

  • PIC10
  • *
  • Mensajes: 39
Re: Problema extraño con pic16f877a
« Respuesta #4 en: 18 de Mayo de 2014, 20:17:35 »
Cuando me funciono todo el programa (bueno lo que hay escrito de el) no fallaba nada. Es decir le das corriente se encendia el led y enseguida empezaba a mostrar en pantalla los caracteres hasta que llega a la parte de ajustar el tiempo en la cual los botones cumplian su funcion perfectamente subiendo y bajando el tiempo. Todo iba correctamente asi sin mas empezo con este extraño de solo ejecutar la primera instruccion (encender el led) y bloquearse ahi y despues dandole al reset ya no ejecuta hasta que no le toques (no siempre) al oscilador

Desconectado QIQE

  • PIC18
  • ****
  • Mensajes: 335
Re: Problema extraño con pic16f877a
« Respuesta #5 en: 19 de Mayo de 2014, 03:31:44 »
El pause de 2000 lo has tenido hay siempre?? Quitalo para hacer una prueba por si de quedase enganchado hay tu programa
Muchas gracias por vuestro tiempo.

Saludos desde valencia!!!

Desconectado JORGITO_YKE

  • PIC10
  • *
  • Mensajes: 39
Re: Problema extraño con pic16f877a
« Respuesta #6 en: 19 de Mayo de 2014, 08:21:12 »
Antes cuando funcionaba estaba ahí el pause. Probé a cargar un programa que hace parpadear un led en PORTA.0 y PORTA.1 en plan sirena de ambulancia y hace los mismo (Sin el PAUSE de 2000). He estado mirando la placa y sospecho del botón de reset cuando se lo pincho se apaga todo pero aun así como se explica que funcione por un tiempo determinado ¿?¿?¿?:shock:¿?¿?¿?. Mi esquema de conexión del pin MCLR es con una resistencia de 10k en pullup (+5 -> resistencia -> MCLR -> Boton -> GND). Hasta donde alcanza mi conocimiento se colocar una resistencia en pullup xd pero no se porque la da por ahí.
« Última modificación: 19 de Mayo de 2014, 12:19:05 por JORGITO_YKE »

Desconectado georgeliners

  • PIC10
  • *
  • Mensajes: 31
Re: Problema extraño con pic16f877a
« Respuesta #7 en: 19 de Mayo de 2014, 13:40:27 »
Hola, si primero te funcionaba perfectamente debe ser algún componente critico que esta dando falso contacto, revisa vcc, gnd, el oscilador y cableado involucrado. También podrías colocar una foto del montaje en cuestión. Saludos

Desconectado JORGITO_YKE

  • PIC10
  • *
  • Mensajes: 39
Re: Problema extraño con pic16f877a
« Respuesta #8 en: 19 de Mayo de 2014, 14:51:22 »
Huelga decir que lo acabo de probar y funcionó durante unos 10 minutos. Luego el pic empezó a mostrar en una patilla caída de voltaje y volvieron los problemas de nuevo. Como hace siempre. VCC son 4,85-4,9 mas o menos así que el pic no debería tener problema con ese voltaje las masas no hacen contacto con nada y fui testeando desde los puntos mas alejados al gnd del lm7805. El oscilador me gustaria revisarlo pero no dispongo de un frecuencimetro pero si de tres osciladores diferentes  :mrgreen: y con todos ellos hace lo mismo. Lo único que he llegado a comprender es que dejándola un rato apagada vuelve a funcionar pero después de unos minutos vuelve a fallar. Probe con dos alimentadores diferentes. No se me ocurren mas pistas que dar la verdad. Luego saco unas fotos y hago un esquema en proteus de como esta montado el asunto. Saludos people.

Desconectado georgeliners

  • PIC10
  • *
  • Mensajes: 31
Re: Problema extraño con pic16f877a
« Respuesta #9 en: 19 de Mayo de 2014, 15:46:58 »
En lo personal hay un fuse que siempre lo desactivo o si no el pic se vuelve loco. FUSES NOBROWNOUT esto lo hago en GCC desconozco como se hace en otro compilador. Saludos

Desconectado JORGITO_YKE

  • PIC10
  • *
  • Mensajes: 39
Re: Problema extraño con pic16f877a
« Respuesta #10 en: 20 de Mayo de 2014, 11:02:08 »
Perdón por la tardanza aquí van el esquema de lo que tengo montado hasta ahora en la placa de pruebas. Faltan un par de componentes (4 x 7 segmentos multiplexados de esta parte solo puse los transistores pero no afectan a nada) y una mini breadboard que tampoco va a afectar. Lo que puse esta en el esquema. Los fuses no hay ni wdt ni brown-out ni power-on ni nada de eso activado. Solo puse la opción de XT porque uso un oscilador de 4mhz. Saludos.

EDITO antes no me dejaba mirar el post y creo que ahora se arreglo. Tengo puesto ahi tambien un condensador de esos xd.
« Última modificación: 20 de Mayo de 2014, 19:44:26 por JORGITO_YKE »

Desconectado georgeliners

  • PIC10
  • *
  • Mensajes: 31
Re: Problema extraño con pic16f877a
« Respuesta #11 en: 20 de Mayo de 2014, 19:25:55 »
Lo otro intenta colocar un condensador cceramico de 0.1uf lo mas cerca al pic a +vcc y gnd. Hay que descartar todo. Saludos

Desconectado georgeliners

  • PIC10
  • *
  • Mensajes: 31
Re: Problema extraño con pic16f877a
« Respuesta #12 en: 20 de Mayo de 2014, 21:13:44 »
Corrijo  lo del condensador de 10uF (103). saludos

Desconectado JORGITO_YKE

  • PIC10
  • *
  • Mensajes: 39
Re: Problema extraño con pic16f877a
« Respuesta #13 en: 21 de Mayo de 2014, 22:14:48 »
Tengo puesto un 104 en los pines del micro probare a cambiarlo a ver que sucede. Perdón por no contestar rápido porque es que a veces no me deja entrar en el post estando logueado :huh: . De todo lo que pude aislar es que el circuito funciona durante x minutos bien hasta que hace pum. Luego esperas un tiempo prudencial (unas horas) y todo vuelve a la normalidad. En fin probare eso mañana y a ver que pasa. Al menos pude avanzar con mi proyecto de la insoladora   :)  (vamos a liarnos con el I2C  :shock: ). Saludos people.
« Última modificación: 21 de Mayo de 2014, 22:17:04 por JORGITO_YKE »

Desconectado JORGITO_YKE

  • PIC10
  • *
  • Mensajes: 39
Re: Problema extraño con pic16f877a
« Respuesta #14 en: 22 de Mayo de 2014, 12:28:02 »
Sigue haciendo lo mismo con el de 103 con ninguno con el de 104. Cuando a veces enciende el led conectado a una patilla enciende muy tenue y por la patilla en vez de salir 4,8 v salen unos 1,4 o asi. Ya no se que mas hacerle.


 

anything