TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: JORGITO_YKE 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
'--------------------------------------------------------
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
-
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
-
Tengo puestos a masa dos condensadores de 15pf y no tengo ningún fuse puesto solo el XT enseguida corrijo eso del codigo.
-
lEn la pantalla llegas a ver algo?
-
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
-
El pause de 2000 lo has tenido hay siempre?? Quitalo para hacer una prueba por si de quedase enganchado hay tu programa
-
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í.
-
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
-
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.
-
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
-
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.
-
Lo otro intenta colocar un condensador cceramico de 0.1uf lo mas cerca al pic a +vcc y gnd. Hay que descartar todo. Saludos
-
Corrijo lo del condensador de 10uF (103). saludos
-
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.
-
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.
-
Una consulta, el pin MCLR lo tienes conectado a +VCC mediante una R10K???
-
Y trata de enviar un esquema de como tienes conectado todo lo mnas detallado posible y no te desesperes a todos nos han pasado este tipo de cosas. Pero es necesario para aprender. ;-) Saludos
-
Crei que ya se adjunto correctamente pero como me fallo el foro un poco pues nose. A ver ahora.
edito: en el esquema se me colaron unas cosas. hay una ressitencia de 1k en la entrada del transistor de buzzer. los resistores de los botones son de 10k y los de los led de 470.
-
Dime que valores de resistencias tienes conectado en serie a los led's y pulsadores. No sera que engas un sobre consumo de los puertos?? Saludos
-
ya lo puse ahi jeje edite porque me di cuenta al subirlo 470 led. 10k pulsadores y 1k en la base del transistor del buzzer
-
Aparentemente no debieras tener problemas de sobre consumo con esos valores ya que si no me equivoco ese pic soporta un max de 25ma en modo sumidero y fuente por pin. 200ma por puerto. Bueno yo creo personalmente que puede haber un problema en el programa pero lamentablemente no me manejo en Assembler. Busca por ahi el problema desactivando rutinas. Saludos
-
No si el tema es que el programa puse tambien un simple enciende un led en el puerto a 0 y hacia igual xd. mas simple que eso no ha nada casi. saludos y gracias.
-
Lo que tratas de decir es que hicisteis un prende y apaga de un led y no funciona??? si es eso esta malo el pic. Saludos
-
probe con dos pic diferentes tambien.La probabilidad de que dos pic esten rotos es muy remota por no decir imposible. Tambien cambie y probe dos lm7805. Pero el programa enciende cuando mas le apetece no cuando yo quiero. Es por eso me tiene desconcertado porque no tiene ningun sentido xd. saludos