TODOPIC
Microcontroladores PIC => - Niple - => Mensaje iniciado por: batmand en 26 de Noviembre de 2004, 09:44:00
-
Hola a todos, aca va mi consulta
Realice un programa sencillo con el Niple para prender un led durante 100 mseg, apagarlo y prender otro, y asi, todos con la misma temporizacion.
Este programa aparecion en un numero de la revista Saber Electronica.
Bueno, el tema es que ese programa me funciono perfecto, pero cuando quise hacer lo mismo, temporizando 3 segundos (en vez de los 100 mseg) en cada caso, el programa me hace cosas re locas. Me prende un solo led, con un temporizacion extraña.
A que puede deberse? Como puedo solucionarlo?
Desde ya muchas gracias!!!!!!!!!!!
Ahora, esta parte es para Canito.
Yo tambien soy argentino, ahora estoy en Paraguay por motivos personales, pero queria decirte que lo que ustedes hicieron al desarrollar este programa, es genial y unico. Ya convenci a mi Gerente para que lo compren, y estoy gestionando como va a ser, si aca o alla.
Solo quiero decirte esto, porque como lei en otro post, los argentinos realmente tenemos que "parir" nuestras ideas o proyecto, inventar los recursos usando nuestra imaginacion, y afrontar pruebas que en ningun otro lado se dan. Asi que mucha fuerza viejo!!!!!!!!!!! Son unos capos!!!!!!!!!!
Y nunca se rindan ni se comparen con las grandes multinacionales del soft, porque una vez los dinosaurios se creian los reyes, pero por no saber adaptarse a las circunstancias se murieron todos!!!!!!!
Saludos
Dario
-
Hola Dario,
Muchas gracias por tu buena onda.
Con respecto a tu consulta con el temporizador, deberia funcionar sin problemas.
Si queres, pasame el archivo .npl y lo pruebo a ver que puede estar ocurriendo.
Lo que me ha ocurrido en otras oportunidades es que, el usuario asigna alguna configuracion al momento de grabar el micro (como el wdt activado) lo cual despues, afecta al funcionamiento del programa y muchas veces resulta en un funcionamiento erratico.
Para solucionar esto, en este momento estoy trabajando para que el programa incluya la palabra de configuracion de manera automatica en el assembler.
Un saludo
Jorge
-
Hola Jorge, gracias por tu tiempo.
Adjunto te envio el archivo niple, y el asm que me genera.
Cuando intento simularlo con el Sim2000, en lugar de temporizar 2 segundos y luego saltar a la siguiente instruccion, se queda siempre como en un bucle, dejando prendido solo un led.
Probe el programa en el protoboard, por si era problema de simulacion, pero no, efectivamente me deja prendido solo el led de rb7, cuando en realidad lo que deberia hacer es prender 2 seg el led de rb7, apagarlo 2 seg, prender 2 seg el de rb6 y apagarlo 2 seg y asi sucesivamente.
Te agradeceria que lo mires a ver cual puede ser el problema.
Muchas gracias.
Dario
Bueno, al final, te adjunto el archivo .asm aca, no se porque razon me dice que no hay espacio en el servidor para copiar los archivos, asi que no puedo enviarte el archivo niple. Pero te comento los bloques y el orden en que los coloque
1 - Configuro puerto B como salida
2 - Escribo en el puerto b el valor binario 10000000
3 - Temporizo por bucles, 3 segundos
4 - Escribo en el puerto b el valor binario 00000000
5 - Temporizo por bucles, 3 segundos
6 - Escribo en el puerto b el valor binario 01000000
7 - Temporizo por bucles, 3 segundos
8 - Escribo en el puerto b el valor binario 00000000
9 - Temporizo por bucles, 3 segundos
10- Uno la flecha de esta ultima temporizacion con el paso 2.
Saludos y mil gracias nuevamente!!!
;------------------------------------------------------------
; Código assembler generado por Niple.
; Nombre del Proyecto:
; Autor: Desarrollo Niple.
; Fecha: 26/11/2004
; PIC: 16F84
; Velocidad de reloj: 4 Mhz
; Descripcion:
;------------------------------------------------------------
LIST P=PIC16F84
;------------------------------------------------------------
; Declaración de Registros
;------------------------------------------------------------
w equ 00h
status equ 0x03
portb equ 0x06
_np_tiempo equ 0x0c
_np_tiempo1 equ 0x0e
_np_tiempo2 equ 0x0f
_np_tiempo3 equ 0x10
trisb equ 0x86
;------------------------------------------------------------
; Declaración de Bits
;------------------------------------------------------------
rp0 equ 5 ;registrer banck select bit
;------------------------------------------------------------
; Inicio
;------------------------------------------------------------
reset org 0
goto paso2
;------------------------------------------------------------
; programa principal
;------------------------------------------------------------
paso2
movlw b"00000000" ;configurar el puerto b como ssssssss
bsf status,rp0 ;cambiar a pagina 1
movwf trisb
paso3
;escribir en el puerto b
movlw b"10000000"
bcf status,rp0 ;cambiar a pagina 0
movwf portb
;temporizador 2 seg
movlw .2
call tiempo_1_255_seg
;fin del temporizador 2 seg
;escribir en el puerto b
movlw b"00000000"
movwf portb
;temporizador 2 seg
movlw .2
call tiempo_1_255_seg
;fin del temporizador 2 seg
;escribir en el puerto b
movlw b"01000000"
movwf portb
;temporizador 2 seg
movlw .2
call tiempo_1_255_seg
;fin del temporizador 2 seg
;escribir en el puerto b
movlw b"00000000"
movwf portb
goto paso3 ; cierra el ciclo
;------------------------------------------------------------
; Declaración de Subrutinas
;------------------------------------------------------------
tiempo_1_255_seg
movwf _np_tiempo
goto tiempo_1_255_seg_1
tiempo_1_255_seg_bucle2
nop
nop
nop
nop
nop
nop
nop
tiempo_1_255_seg_1
movlw .10
movwf _np_tiempo1
tiempo_1_255_seg_bucle1
nop
nop
movlw .99
movwf _np_tiempo2
tiempo_1_255_seg_bucle0
nop
nop
nop
movlw .200
movwf _np_tiempo3
tiempo_1_255_seg_bucle
nop
nop
decfsz _np_tiempo3,1
goto tiempo_1_255_seg_bucle
nop
nop
nop
decfsz _np_tiempo2,1
goto tiempo_1_255_seg_bucle0
nop
nop
nop
decfsz _np_tiempo1,1
goto tiempo_1_255_seg_bucle1
decfsz _np_tiempo,1
goto tiempo_1_255_seg_bucle2
return
End
-
Hola Dario,
Te comento que acabo de compilar y probar en el protoboard el assembler que publicaste y funciona sin problemas.
Seguramente estas seleccionado algun bit de configuracion erronea en el software del tu programador.
Asegurate seleccionar en el software del programador las opciones:
WDT= desactivado
Oscillator= XT
PRWT=Activado
Si queres estoy conectado a msn casi todo el dia en niple_software@hotmail.com
Un saludo
Jorge
-
Efectivamente, tenes toda la razon. Al cargar el archivo en el ic-prog, automaticamente me activa la casilla WDT.
La desactive y funciona perfecto.
muchas gracias, y perdon por la ignorancia!!!!!
Saludos
Dario