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