# Como generar 1 minuto en pic 16F628A



## godoyas (May 9, 2008)

tendo dudas en como generar pulsos de 1 en 1 minutes com TMR0.sou novato en programacion del PIC,muitas gracias se for possivel en me ayudar-me.
saludos.


----------



## MaMu (May 9, 2008)

La forma en que controles el tiempo siempre va a depender del nivel de presición que necesites. Usando un TMR, podes explotar de este la interrupción de cambio de 0xFF a 0x00, y contabilizar cada desborde en un ciclo de incremento de variables, cuando sumen las cantidades necesarias para llegar al minuto, ahi pones todo a 0 y vuelves a empezar. Queda a tu criterio realizar los ajustes y pasos necesarios para la presición del tiempo.

Saludos


----------



## godoyas (May 9, 2008)

MaMu dijo:
			
		

> La forma en que controles el tiempo siempre va a depender del nivel de presición que necesites. Usando un TMR, podes explotar de este la interrupción de cambio de 0xFF a 0x00, y contabilizar cada desborde en un ciclo de incremento de variables, cuando sumen las cantidades necesarias para llegar al minuto, ahi pones todo a 0 y vuelves a empezar. Queda a tu criterio realizar los ajustes y pasos necesarios para la presición del tiempo.
> 
> Saludos



pretento construir uno tiemporizador,tipo 60 minutes con dois (2) display de sete seguimentos,poderia citar uno exenplito,de como seria el assembly.muitas gracias en ayudar-me.
saludos


----------



## MaMu (May 9, 2008)

godoyas dijo:
			
		

> MaMu dijo:
> 
> 
> 
> ...



Lee este artículo que es muy práctico y te va a venir bien para entender un poco la utilización de los Timer, sobre todo del TMR1.

http://micropic.wordpress.com/2007/06/24/temporizador-timer-1/

PD: un poco de literatura no le viene mal a nadie.

Saludos


----------



## godoyas (May 10, 2008)

MaMu dijo:
			
		

> godoyas dijo:
> 
> 
> 
> ...



muitas gracias en me ayudar,gostei do tutorial,obrigado.
saludos


----------



## Javilondo (May 16, 2008)

Puedes utilizar el programa *PicDel*.
Es un programa bastante sencillo de usar, genera en código asm los retardos de tiempo que le programes, lo único que tienes que ajustar el tiempo de retardo en ms que quieras, pero antes deberás escoger la frecuencia del clock en MHz del Pic.
Ejemplo: 
Para 1 segundo, si tienes un oscilador de 4MHz escribes en: 
*Frecuencia(MHz) |4     | *
Tienes que escribir el tiempo de retardo en ms: 
*Retardo (ms) |1000   | *
Después presionas el botón *Calcular Ciclos *
Y te aparecerá la cifra 1000000 en el campo: 
*Ciclos Delay |1000000   | *
Por último sólo tienes que presionar el botón *Genera Código* y listo, en el campo de texto que está abajo se generará el código en asm que necesitas para hacer un retardo de tiempo 
de 1 segundo, o del tiempo que quieras. Otra opción es especificar en el campo *Ciclos Delay* los ciclos de reloj que quieres que se retarde el Pic. El proceso de generación de código tardará un momento en función del tiempo programado. 
Aquí abajo tienes el código generado:



```
;-------------------------------------------------------------
; Generado con PDEL ver SP  r 1.0  el 16/05/2008 Hs 03:32:45 a.m.
; Descripcion: Delay 1000000 ciclos
;-------------------------------------------------------------
DEMORA  movlw     .14       ; 1 set numero de repeticion  (C)
        movwf     PDel0     ; 1 |
PLoop0  movlw     .72       ; 1 set numero de repeticion  (B)
        movwf     PDel1     ; 1 |
PLoop1  movlw     .247      ; 1 set numero de repeticion  (A)
        movwf     PDel2     ; 1 |
PLoop2  clrwdt              ; 1 clear watchdog
        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
PDelL1  goto PDelL2         ; 2 ciclos delay
PDelL2  clrwdt              ; 1 ciclo delay
        return              ; 2+2 Fin.
;-------------------------------------------------------------
```

El PicDel está adjunto en éste mensaje pero lo puedes descargar desde éste enlace:
http://www.todopic.com.ar/utiles/calcular_retardos.zip

Suerte godoyas.
Espero que esta información sea de ayuda para ti. 
Saludos.


----------



## godoyas (May 16, 2008)

muitas gracias, excelentes conteudo, muitas gracias
saludos


----------



## Meta (May 17, 2008)

Este está mejor.

http://www.golovchenko.org/cgi-bin/delay


----------



## FRYCK (May 24, 2008)

hola aqui  dejo  un  cronometro   implementado  con  el  timer0  en  ensamblador   espero  le sirva


----------



## Meta (May 25, 2008)

Ya tienes 1 min. del 16F628A.


```
; Delay = 60 seconds
; Clock frequency = 4 MHz

; Actual delay = 60 seconds = 60000000 cycles
; Error = 0 %

	cblock
	d1
	d2
	d3
	endc

			;59999994 cycles
	movlw	0x23
	movwf	d1
	movlw	0xCB
	movwf	d2
	movlw	0x83
	movwf	d3
Delay_0
	decfsz	d1, f
	goto	$+2
	decfsz	d2, f
	goto	$+2
	decfsz	d3, f
	goto	Delay_0

			;6 cycles
	goto	$+1
	goto	$+1
	goto	$+1
```


----------



## kvasir (May 18, 2010)

Aqui les va mi aporte
Para el uso de PDEL, se agrega el siguiente segmento de codigo: 

	cblock
	PDel0
	PDel1
	PDel2
	endc

Lo cual equivale a los registros que ocupa y al stack level. Me funciono al 100, solo modifico corro el programa y agrego lo anterior y consigo una rutina con el tiempo q desee, espero les sirva....


----------



## cheli (Jun 6, 2010)

Javilondo yo hago lo que tu dices con el picdel pero luego copio y pego en el mplab y me da errores que no se solucionar y ahi me quedo, mira tu mismo

Error[113]   C:\LAB DE MICRO\LED TITILANDO.ASM 49 : Symbol not previously defined (Demora_150ms)
Error[113]   C:\LAB DE MICRO\LED TITILANDO.ASM 53 : Symbol not previously defined (Demora_150ms)
Error[113]   C:\LAB DE MICRO\LED TITILANDO.ASM 66 : Symbol not previously defined (PDel0)
Error[113]   C:\LAB DE MICRO\LED TITILANDO.ASM 68 : Symbol not previously defined (PDel1)
Error[113]   C:\LAB DE MICRO\LED TITILANDO.ASM 70 : Symbol not previously defined (PDel2)
Error[113]   C:\LAB DE MICRO\LED TITILANDO.ASM 72 : Symbol not previously defined (PDel2)
Error[113]   C:\LAB DE MICRO\LED TITILANDO.ASM 74 : Symbol not previously defined (PDel1)
Error[113]   C:\LAB DE MICRO\LED TITILANDO.ASM 76 : Symbol not previously defined (PDel0)


Como arreglo esto vy que estoy haciendo mal?

Como Symbol previously defined todo ese poco de broma


----------



## cheli (Jun 6, 2010)

Como modifico el nivel de stack o como se que esta en 1


----------



## guiaval (Ago 10, 2010)

que tal   cheli mira el error que te sale es por que en la cabezera no  defines PDelx(x=1,2,3..)como un registro te pongo un ejemplo

ALTO_2      EQU      0x0d   ;DIRECCION DEL REGISTRO DEL PULSO ALTO


----------



## Scooter (Ago 10, 2010)

Personalmente opino que es un error hacer temporizaciones mínimamente largas con bucles vacíos.
¿Durante ese minuto el equipo no atiende a ningún botón, sensor etc? ¿Está sordo y ciego un minuto?

Lo normal es hacer los retardos de unos pocos mS con bucles vacíos y los de 1S o mas siempre con un timer e interrupciones. Vamos, es lo que siempre ha hecho yo.


----------



## guiaval (Ago 12, 2010)

hola ,mira tengo un problema con un servo y sus tiempos de control, busque susdatos y me sale que su velocidad es maraca modelcraft rs-2) de 180º
*0.19 sec/60° a 4.8v
                   0.17 sec/60° a 6 v*
con estos datos digamos qeu quiero usar el de 4.8v como haria apra calcular el tiempo para 67.5º , 90º 112.5º
 estoy haciendo una araña robot la que es conocidad por todos


----------

