Autor Tema: Configurar TM0 de PIC 16f84a  (Leído 2616 veces)

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

Desconectado fernando_realico

  • PIC10
  • *
  • Mensajes: 44
Configurar TM0 de PIC 16f84a
« 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

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Configurar TM0 de PIC 16f84a
« Respuesta #1 en: 27 de Septiembre de 2010, 10:58:45 »
No contesto mensajes privados, las consultas en el foro

Desconectado f-traxx

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 116
Re: Configurar TM0 de PIC 16f84a
« Respuesta #2 en: 27 de Septiembre de 2010, 11:32:29 »
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.  :)

Desconectado fernando_realico

  • PIC10
  • *
  • Mensajes: 44
Re: Configurar TM0 de PIC 16f84a
« Respuesta #3 en: 27 de Septiembre de 2010, 12:17:45 »
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

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Configurar TM0 de PIC 16f84a
« Respuesta #4 en: 27 de Septiembre de 2010, 12:36:38 »
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!
No contesto mensajes privados, las consultas en el foro

Desconectado fernando_realico

  • PIC10
  • *
  • Mensajes: 44
Re: Configurar TM0 de PIC 16f84a
« Respuesta #5 en: 27 de Septiembre de 2010, 22:08:12 »
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