desktop

Temporizacion maxima de un pic

Hola, cual es la temporizacin maxima que puedo llegar a hacer en un pic si bien entendi vastante de como hacerlas no me quedo muy calro como hacer temporizaciones de por ejemplo 30 segundos. Se puede
 
Si es totalmente posible se pueden hacer temporizaciones muy largas, yo he hecho una temp max de 2 horas pero no quita que se puedan hacer más grandes.
 
pero no entiendo, con el Divisor de frecuencia 256 cuanto es lo maximo, se me hace lio con el pasaje de términos. supongamos que quiero hacer una de 30seg, cuanto cargo en TMR0
 
Con el TMRO puedes contar hasta 256useg, y utilizando el prescales lo puedes multiplicar por 256 obteniendo 65536us o 0,065seg.
Si deseas temporizaciones mas largas puedes utilizar bucles similar a este, que te genera un retardo de 10seg,
pero puedes incluso realizar un programa que te genere un retardo de millones de siglos, aunque no creo que nadie se espere tanto tiempo en comprobar si realmente funciona.

Código:
;-------------------------------------------------------------
; Generado con PDEL ver SP  r 1.0  el 13/12/2008 Hs 16:00:03
; Descripcion: Delay 10000000 ciclos
;-------------------------------------------------------------
DEMORA  movlw     .43       ; 1 set numero de repeticion  (C)
        movwf     PDel0     ; 1 |
PLoop0  movlw     .226      ; 1 set numero de repeticion  (B)
        movwf     PDel1     ; 1 |
PLoop1  movlw     .205      ; 1 set numero de repeticion  (A)
        movwf     PDel2     ; 1 |
PLoop2  clrwdt              ; 1 clear watchdog
        clrwdt              ; 1 ciclo delay
        decfsz    PDel2, 1  ; 1 + (1) es el tiempo 0  ? (A)
        goto      PLoop2    ; 2 no, loop
        decfsz    PDel1,  1 ; 1 + (1) es el tiempo 0  ? (B)
        goto      PLoop1    ; 2 no, loop
        decfsz    PDel0,  1 ; 1 + (1) es el tiempo 0  ? (C)
        goto      PLoop0    ; 2 no, loop
        clrwdt              ; 1 ciclo delay
        return              ; 2+2 Fin.
;-------------------------------------------------------------



Requerimientos   
-----------------
- Declaracion de PDel0 (registro)
- Declaracion oe PDel1 (registro)
- Declaracion de PDel2 (registro)
- 1 nivel Stack

Ejemplo de uso
--------------
call DEMORA      ; Delay 10000000 ciclos (incluyen  call+return)
 
lo que necesito es la interupcion de TMR0 para poder controlar otros pines mientras desborda el registro y genera la interrupcion. creo que tengo que usar otro divisor no? pero no me queda claro como calcularlo, que formula uso?
 
1 -- no comprendo cual es vuestra onda tipo flash de querer siempre usar 4 Mhz..........
lo necesitas de verdad en tu aplicacion ?
podes usar 1Mhz o 10Khz tranqui tambien que no por eso se vuelve chancho el PIC.

luego con T0 podes hacer un conteo de tiempo real que no dependa del programa (por donde pasa) solo de la F.cK , si queres para algo del programa tiempos mayores entonces vas inc. un contador cada vez que salta la int. de T0 .
y si queres tiempos mayores aun usas otro contador mas........y si queres mas ,........otro mas.

un PIC puede contar milenios si queres, y sin ningun problema .

por que siempre preguntan cuanto puede contar un PIC ?
 
uso de 4 Mhz porque es lo que hay, tampoco tiene que ser exacto puede ser de 30s 36s 42s 60s no importa, lo que quiero saber es como usar los divisores del timer, va como calcular los tiempos.
 
hace rato que no me meto con PIC pero siguiendo el hilo de los datos puestos por pepechip y sin andar complicandonos T0 salta a los 256 micro seg.
asi que en los programas que corren por interrupcion pones 1 contador, o sea un registro (cont1) que vas inc. o dec.
256 micro seg * 256 cuentas = 65536 microseg = 65,5 miliseg.
bueno, usaras un segundo contador (cont 2 que cuente a continuacion de cont1) y con el cual podras contar hasta 65,5 miliseg * 256 = 16768 miliseg = 16,7 seg.

para no necesitar un tercer contador usa el prescaler ese que menciono pepechip.
y si toda tu aplicacion no requiere velocidad, usa un ck mas bajo .

saludos
 
Me parese que no entienden mi pregunta, preciso hacer un timer para una alarma que cuando se activo una zona me de un tiempo de 30Sg aprox para desactivar la alarma antes de que suene la sirena, mi insistencia con el TMR0 es porque la sirena sonaria al desbordar el mismo y no puedo hacer retardos porque tiene que correr el programa que controla un display de 4 digitos x 7 segmentos C/U y un teclado matricial 3x4 y si hago retardos ovbiamente no puedo controlar lo demas para desactivar la alarma antes de que suene.
ya esta todo funcionando solo me falta entender TMR0, en que afecta el divisor 1:2 1:4......1:256 o sea si con 1:2 o con 1:256 voy a poder hacer un timer mas largo y como es la ecuacion para hacerlo.
 
Como dijo fernandob la temporizacion maxima que puedes lograr con el timer0 es de 65536 microsegundos. Usa interrupciones para que puedas seguir realizando otras funciones con el pic y has que tu rutina de interrupcion se repita las veces que sean necesarias para que completes los 30 segundos.
 
Les soy sincero no entiendo lo que me explican. como llevo muchas horas trabajando en esto ya se me hizo un quil....bo creo que es la hora de parar un rato y luego agarrarlo mas tranqui.
nadie me sabe explicar cual es la ecuacion para sacar los calculos del tiempo? para que sirven los divisores 1:2 a 1:256? cual de los dos me da un tiempo mas largo?
 
En esta pagina explico como hacer esos calculos
http://micropic.wordpress.com/2007/06/24/temporizador-timer-0/

Con el timer 0 a una frecuencia de 4MHz la temporizacion maxima es 65536us (en la pagina me equivoquey dice 65538us), si cambias tu frecuencia cambiara esa temporizacion pero ahi puedes ver la ecuacion para calcularla.

Aqui puedes ver algo de teoria sobre el manejo de interrupciones, aunque no explico como hacerlo con el timer
http://micropic.wordpress.com/2007/06/08/manejo-de-interrupciones/
 
cuando hice el curso de PIC con mi querido profe "pablin" hace mucho comenzo el mismo con programas lineales sin interrupciones , obvio que no se quedo en ellos .
pero quizas haya gente que estudio por su cuenta y si, se quedaron en un concepto lineal .
por eso (y esto va a quienes estan con el curso de ASM desde cero ) creo que es mas importante esas cosas que explicar las instrucciones que ya estan explicadas.

saludos
 
yo estudie a los golpes y entendi las iterrupciones y muuuchas cosas que no crei entender nunca traduciendo manuales en ingles y con la pagina de R-Luis, en internet la mayoria de las explicaciones se basan en prender y apagar un led "es una forma de decir" por mi cuenta ahora puedo controlar en mi proyecto un display 7 segmentos x 4 digitos, con un teclado 3x4, grabar la memoria y Leer la memoria Eeprom para poder cambiar el codigo de la alarma, pero creo que no puedo crear un tiempo para que se active la sirena y asi poder desactivar la alarma al ingresar el codigo sin que la misma suene, Me explico? es como cualquier alarma.
si lo que interprete es que hay que tratar el tema asm con mas profundidad, estoy de acuerdo.
por otro lado me parese imposible lo que quiero hacer, no?
les agradesco su interes por ayudarme!
 
se me ocurrio algo cuando se produce la interupcion por tmr0 ovbiamente salto a 0x04 y ahy tengo que indicar como seguir no? bueno si hago el auxiliar lo incremento y pongo retfie me retornara donde se quedo antes de la interrupcion "con el display y el teclado" hasta que tmr0 haga otra interrupcion e incremente auxiliar etc. hasta lograr un tiempo considerable, aprox 30s. es decir la interrupcion tmr0 se comporta como una llamada CALL?
 
Asi es marcelo, en la interrupcion puedes incrementar algun registro, o decrementarlo, y dependiendo de cuantas veces hayas entrado a la interrupcion sera la temporizacion que obtengas. Y si, cuando saltas a una interrupcion, con la instruccion retfie vuelves al lugar donde se encontraba la ejecucion del programa.
 
marcelo26 dijo:
yo estudie a los golpes y entendi las iterrupciones y muuuchas cosas que no crei entender nunca traduciendo manuales en ingles y con la pagina de R-Luis, en internet la mayoria de las explicaciones se basan en prender y apagar un led "es una forma de decir" por mi cuenta ahora puedo controlar en mi proyecto un display 7 segmentos x 4 digitos, con un teclado 3x4, grabar la memoria y Leer la memoria Eeprom para poder cambiar el codigo de la alarma, pero creo que no puedo crear un tiempo para que se active la sirena y asi poder desactivar la alarma al ingresar el codigo sin que la misma suene, Me explico? es como cualquier alarma.
si lo que interprete es que hay que tratar el tema asm con mas profundidad, estoy de acuerdo.
por otro lado me parese imposible lo que quiero hacer, no?
les agradesco su interes por ayudarme!

es asi marcelo, y si lo parendiste solo , te felicito, yo necesite una buena mano .
 
Atrás
Arriba