TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: fernando_realico en 27 de Septiembre de 2010, 10:54:15
-
Estimados amigos:
Estoy realizando un proyecto en el cual realizo retardos decrementando registros, pero observé que cuando quiero que trabaje el sistema unos 35 minutos, en algún punto se pierde el programa, hasta 15 minutos bien, y con carga y todo, así que la cuestión de los ruidos lo he superado, el tema de los fluorecentes que colgaban al pic lo solucioné con un toroide de núcleo de ferrita y un condensador en paralelo en la entrada del transformador.
Les comento que leí en libros y no me queda claro como usar el TM0 del pic
uso un cristal de cuarzo de 7 mhz.
Haber si es algo así.
Primero configuro los registros, el preescalar, como voy a disparar el temporizador.
Luego tengo que hacer una subrrutina con el tiempo que creo? por ejemplo 200 mseg? Así llamo en el programa ese retardo? digo sería lo mismo que llamar a las subrrutinas de retardo que cree con 3 registros que decremento?
Desde ya gracias amigos; estoy un poco perdido.
Saludos Fernando Gutierrez
-
Revisa por aquí:
http://www.todopic.com.ar/foros/index.php?topic=24720.0
Saludos!
-
Si necesitas ayuda, intenta expresarte un poco mejor, pon lo que tengas hecho de codigo y comentalo donde te falla o donde te pierdes, luego te ayudaremos en la medida de lo posible. :)
-
Gracias por responder, no hay un lugar fijo donde se queda colgado, lo que observé es que cuando pongo menos call anda bien, unos 15 minutos, es una plaqueta para controlar un lavarropa automático.
este sería el programa corto unos 35 minutos:
;================SECUENCIA PROGRAMA CORTO====================================================
selec1 bsf led_1
bcf led_2
bcf led_3
call retardo2
btfsc acepto
goto test
call rebote
btfsc acepto
goto test
bcf led_1
bcf led_2
bcf led_3
call inter10
call inter10
call inter10
bsf led_1
call presostato1
call lavado
call lavado
call min_1
call min_1
call lavado
call lavado
call seg5
call b_descarga
call presostato1
call lavado
call lavado
call seg5
call press_c
call centrifugado
call seg10
call seg5
call b_descarga
call presostato1 ;Activar Válvula de suavizante cuando consiga el codito de plástico
call lavado
call lavado
call seg5
call press_c
call centrifugado
call seg10
call seg5
call b_descarga
bcf portb,5
fin_ call rotandof
goto fin_
Retardo:
;-------------------rutina retardo giro-------------------
retardo movlw 47 ; Aquí se cargan los registros
movwf reg1 ; reg1, reg2 y reg3
tres movlw 47 ; respectivamente
movwf reg2
dos movlw 47
movwf reg3
uno decfsz reg3,1 ;Aquí se comienza a decrementar
goto uno ; Cuando reg3 llegue a 0
btfsc acepto ;Apagado
goto reg_dos
call rebote_a
btfsc acepto
goto reg_dos
goto apaga
reg_dos decfsz reg2,1 ; le quitare 1 a reg2
goto dos ; cuando reg2 llegue a 0
btfsc acepto ;Apagado
goto reg_tres
call rebote_a
btfsc acepto
goto reg_tres
goto apaga
reg_tres decfsz reg1,1
goto tres
retlw 00
;-------------------rutina retardo giro-------------------
retardo2 movlw 21
movwf reg1
tres_ movlw 21
movwf reg2
dos_ movlw 21
movwf reg3
uno_ decfsz reg3,1
goto uno_
decfsz reg2,1
goto dos_
decfsz reg1,1
goto tres_
retlw 00
;------------------------------retardol
retardol movlw 30
movwf reg1
tresl movlw 30
movwf reg2
dosl movlw 30
movwf reg3
unol decfsz reg3,1
goto unol
decfsz reg2,1
goto dosl
decfsz reg1,1
goto tresl
retlw 00
;--------------fin del programa-----------------------
end
Será que en la subrrutina "retardo" cuando se va decrementando los registro agrego unas lineas para chequear que si se pulsa un pulsador durante 3seg aproximadamente se apague?
eso anda bien, porque l puedo apagar en cualquier momento, cuando gira el motor, la electrobomba, cuando carga, anda de diez, ahora no se si eso causa la pardida del pic.
Gracias amigos
-
Veo que llamas a inter20, presostato1, lavado, ect. Esas llaman a otras subrutinas? Acuérdate que el 16F84 tiene una pila de 8 posiciones, y si usas muchos call anidados tendrás problemas.
Saludos!
-
Gracias por responder, claro pero call anidados, entiendo por call anidados lo siguiente:
primero call ejemplo1
ejemplo1 call ejemplo2
ejemplo2 call ejemplo3
ejemplo3 call ejemplo4
...
ejemplo7 call ejemplo8
ejemplo8 bsf portb,3
return
creo que esas son los call anidados, no poner por ejemplo
call
call
call
call
pero igual ahora para no poner tantos call generé las siguientes subrutinas:
seg15 movlw d'24'
movfw veces
cant24 call retardo
decfsz veces,1
goto cant24
return
En vez de llamar 24 veces a call retardo
mañana lo pruebo y les cuento como me fue.
Gracias amigos por responder.
saludos
fernando