Autor Tema: problema con retardo de 16f84 y 16f628  (Leído 10776 veces)

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

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: problema con retardo de 16f84 y 16f628
« Respuesta #30 en: 15 de Julio de 2008, 11:34:59 »
umm, el tmr0 como en los pics de la familia 16f, es solo de 8 bits no te conseguirá mucho retardo si los colocas al maximo, y por la velocidad de tu cristal tb no es tan retardado pero si la unica opcion es contar desbordes.

quiza con un temporizador mas "grande" como el timer1, que es de 16bits, talvez se logre menor cuenta de desbordes.

buscate el programita de Redpic, en su pagina para temporizadores es de muy buena ayuda.

supongo que lo del condensador no hizo nada, que raro... haber en cuanto pueda lo veo en casa, aca no tengo mplab :(

un saludo
.

Desconectado En

  • PIC10
  • *
  • Mensajes: 26
Re: problema con retardo de 16f84 y 16f628
« Respuesta #31 en: 15 de Julio de 2008, 12:19:04 »

viendo este mismo foro vi un comentario de Norberto que la verdad me parecio muy interesante pero la verdad no lo termino de entender, tal ves me puedan ayudar porque me parece que da una solucion al tema de retardos que esta bastante buena


CITA:
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
RE: como hacer un retardo con el pic y a la vez actualizar otas tareas, por ejemplo apagar algo

Hola, puedes hacerlo como te manifesto Harry, solo que yo no empleo la interrupcion, simplemente, en alguna parte del codigo, realizo un XOR para verificar si la cuenta del tmr0 llego a un determinado valor... si llego, incremento o decremento otro contador...
de esta marera, empleo la interrupcion para otras cosas

TIMER_CERO
CLRF STATUS
MOVLW .250
XORWF TMR0,0
BTFSS STATUS,Z
; GOTO INICIO
CLRF TMR0

suerte!

Norberto
-------------------------------------------------------------------------------------------------------------------------------------------------------

RE: como hacer un retardo con el pic y a la vez actualizar otas tareas, por ejemplo apagar algo

Sonrisa Gigante
para la mayoria de los retardos largos, empleo esa disposicion... por ejemplo un minuto

255 * 256 * 230 * 4 +/- 1 minuto =256 es el preescaler (60057600 milisegundos)
60,057600 segundos... bastante buena!

y mientras tanto, se puede ir ejecutando otras cosas, y no empleo interrupcion... Sonrisa Gigante


Norberto

-----------------------------------------------------------------------------------------------------------------------------------------------------------------




y gracias por el consejo de usar el TIMER1 la verdad que tenes razon un TIMER con 16 bits me ayudaria mucho mas a la hora de querer llegar al vendito segundo pero por ahora dispongo de un 16f84 y es para un proyecto el cual no me puedo demorar mucho, mi idea es mas adelante trabajar con el 16f628 y manejar TIMER de 16 bits y oscilador interno pero en estos momentos ando como medio sin tiempo para ponerme a aprender las características de un nuevo pic ya que siendo nuevo en este tema de los microcontroladores, investigar un nuevo pic me leva un tiempito.

a Cryn y el programa que me dijiste lo estoy buscando, Redpic es un usuario no?

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: problema con retardo de 16f84 y 16f628
« Respuesta #32 en: 15 de Julio de 2008, 14:28:22 »
utilizando la interrupción del tmr0 puedes contar un segundo con una buena presición, pero si es relativamente rapido y deberas contar interrupciones para lograr el segundo buscado, esa es la opcion qeu la mayoria opta, por ejemplo yo he contado interrupciones muchas veces.

Utilizar un timer para contar el tiempo es una muy buena opcion, las respuestas que dio Norberto no las logro entender mbien, de que hilo los sacaste??

ejemplos para manejar el tmr0 seguramente los encuentras por aca en el foro, con más seguridad en el subforo de Assembler.

Redpic es un usuario de aca, del forko, muy conocido, aca el link a su programa si el autor no se molesta por dejarlo anclado acá.
.

Desconectado En

  • PIC10
  • *
  • Mensajes: 26
Re: problema con retardo de 16f84 y 16f628
« Respuesta #33 en: 15 de Julio de 2008, 23:37:40 »
si, la verdad que el metodo de las temporizaciones a traves del timer0 me gusto, el otro a traves de bucles tambien esta bueno y hasta me es mas claro pero la verdad que no me esta funcionando ademas de que al estar haciendo el retardo el pic esta trabajando al 100 con eso y no es capas de hacer otra cosa, en cambio, por lo que tengo entendido (que no estoy seguro de que sea asi) con el TMR0 no pasa eso osea puede hacer otras cosas.


sobre lo de contar interrupciones para llegar al segundo lo voy a tener en cuenta, hasta ahora lo venia esquivado

y gracias por el programa había podido entrar a la pagina de Redpic pero no lo encontraba, esta muy bueno
 :-)

Desconectado En

  • PIC10
  • *
  • Mensajes: 26
Re: problema con retardo de 16f84 y 16f628
« Respuesta #34 en: 17 de Julio de 2008, 02:12:09 »
Bueno muchachos... la verdad, gracias a todos los que colaboraron en este tema, me an sido de bastante ayuda, rescate bastantes cosas muy interesantes

les comento que ya logre llegar al vendito segundo era solo cuestión de entender bien la metodología de cada tipo de retardo (mas alla que todavia a pesar de que lo entienda el retardo con bucles me sigue titilando muy rapido pero pienso que es la electronica)

al final utilice un retardo a traves de interrupciones
con un divisor de frecuencia de 128
cargando el TMR0 con 60 (0x3C)

y asi generando un retardo de 25 milisegundos el cual despues repeti 40 veces ( en hexa 40=0x28) para llegar al segundo, en realidad no es exacto pero para lo que tengo pensado hacer me sirve, tengo pensado despues cambiar al divisor mas grande y llegar a 50 milisegundos para repetir menos




aca el codigo completo:



List p=16f84
   #INCLUDE P16F84.INC
   __CONFIG  _WDT_OFF &  _PWRTE_ON &  _XT_OSC
STATUS equ 0x03
PORTB   equ 0x06
TRISB    equ 0x86
TMRO     equ 0x01
INTCON equ 0x0B

CONT equ 0x0C

      org 0x00
      goto INICIO
      org 0x05
PROG
      btfss PORTB,0
      goto PRENDE
      goto APAGA
PRENDE
      movlw b'00000011'
      movwf PORTB
      movlw 0x28
      movwf CONT
      call RETARDO
APAGA
      movlw b'00000000'
      movwf PORTB
      movlw 0x28
      movwf CONT
      call RETARDO      
RETARDO
      decfsz CONT
      goto CARGA
      goto PROG
INICIO
      bsf STATUS,5             ;cambia al banco1
      clrf TRISB                  ;PORTB salidas
      movlw b'00000110'
      movwf TMRO             ;configura el divisor (128)
      bcf STATUS,5             ;cambia al banco0
      clrf PORTB
      movlw 0x01
      movwf CONT
CARGA
      bcf INTCON,2             ;borra la vandera (le dice que no esta desvordado)
      movlw 0x3c
      movwf TMR0              ;carga TMR0 con 60 (25 miliseg)
NADA
      btfss INTCON,2
      goto NADA
      goto RETARDO


   end



Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: problema con retardo de 16f84 y 16f628
« Respuesta #35 en: 17 de Julio de 2008, 11:26:06 »
que bueno q lo hayas conseguido!

felicidades, y a seguir con la picmania :D
.


 

anything