Sub unidades en segundos

Hola:

Estoy con dudas. Quiero hacer retardos y no recuerdo bien las tables de los segundos en subunidades.

Tengo entendido que 1000 milisegundos son 1 segundos.

¿Cuántos segundos son 10 microsegundos?

Un cordial saludo.
 
Solo es cuestión de recorrer el punto decimal, por ejemplo 1 us = 1x10^-6 seg, así 10 us serán 10x10^-6 segundos
 
Gracias por confirmar, estaba haciendo retardos de varios MHz para PIC, por ahora llevo esto.

Código:
;************************* Librería "RETARDOS_8MHZ.INC"******************************
;
;      Librería de retardos para oscilador de 8 MHz.
;
;      Web: http://electronica-pic.blogspot.com
;
;************************************************************************************

; Retardo = 1e-05 segundos
; Clock frequency = 8 MHz

; Retardo actual = 1e-05 segundos = 20 ciclos
; Error = 0 %

    cblock
    r1
    endc

Retardo_10micros
            ;16 ciclos
    movlw    0x05
    movwf    r1
Retardo_10micros_0
    decfsz    r1, f
    goto    Retardo_10micros_0

            ;4 ciclos (incluyendo call)
    return

;----------------------------------------------------------------------------------------

; Retardo = 5e-06 segundos.
; Frecuencia reloj = 8 MHz

; Retardo actual = 5e-06 segundos = 10 ciclos
; Error = 0 %

Retardo_5micros
            ;6 ciclos
    goto    $+1
    goto    $+1
    goto    $+1

            ;4 ciclos (incluyendo call)
    return

;-----------------------------------------------------------------------------------------

; Retardo = 4e-06 segundos
; Frecuencia reloj = 8 MHz

; Retardo actual = 4e-06 segundos = 8 ciclos
; Error = 0 %

Retardo_4micros
            ;4 ciclos
    goto    $+1
    goto    $+1

            ;4 ciclos (incluyendo call)
    return

;-----------------------------------------------------------------------------------------

; Retardo = 0.0005 segundos
; Frecuencia reloj = 8 MHz

; Retardo actual = 0.0005 segundos = 1000 ciclos
; Error = 0 %

    cblock
    r2
    r3
    endc

Retardo_500micros
            ;993 ciclos
    movlw    0xC6
    movwf    r2
    movlw    0x01
    movwf    r3
Retardo_500micros_0
    decfsz    r2, f
    goto    $+2
    decfsz    r3, f
    goto    Retardo_500micros_0

            ;3 ciclos
    goto    $+1
    nop

            ;4 ciclos (incluyendo call)
    return

;-----------------------------------------------------------------------------------------

; Retardo = 0.0002 segundos
; Frecuancia reloj = 8 MHz

; Retardo actual = 0.0002 segundos = 400 ciclos
; Error = 0 %

    cblock
    r4
    endc

Retardo_200micros
            ;394 ciclos
    movlw    0x83
    movwf    r4
Retardo_200micros_0
    decfsz    r4, f
    goto    Retardo_200micros_0

            ;2 ciclos
    goto    $+1

            ;4 ciclos (including call)
    return

;-----------------------------------------------------------------------------------------

; Retardo = 0.0001 segundos
; Frecuencia reloj = 8 MHz

; retardo actual = 0.0001 segundos = 200 ciclos
; Error = 0 %

    cblock
    r5
    endc

Retardo_100micros
            ;196 ciclos
    movlw    0x41
    movwf    r5
Retardo_100micros_0
    decfsz    r5, f
    goto    Retardo_100micros_0

            ;4 ciclos (incluyendo call)
    return

;-----------------------------------------------------------------------------------------

; Retardo = 5e-05 segundos
; Frecuencia reloj = 8 MHz

; Retardo actual = 5e-05 segundos = 100 ciclos
; Error = 0 %

    cblock
    r6
    endc

Retardo_50micros
            ;94 ciclos
    movlw    0x1F
    movwf    r6
Retardo_50micros_0
    decfsz    r6, f
    goto    Retardo_50micros_0

            ;2 ciclos
    goto    $+1

            ;4 ciclos (incluyendo call)
    return

;-----------------------------------------------------------------------------------------

; Retardo = 2e-05 segundos
; Frecuencia reloj = 8 MHz

; Retardo actual = 2e-05 segundos = 40 ciclos
; Error = 0 %

    cblock
    r7
    endc

Retardo_20micros
            ;34 ciclos
    movlw    0x0B
    movwf    r7
Retardo_20micros_0
    decfsz    r7, f
    goto    Retardo_20micros_0

            ;2 ciclos
    goto    $+1

            ;4 ciclos (incluyendo call)
    return

;-----------------------------------------------------------------------------------------

; Retardo = 0.2 segundos
; Frecuancia reloj = 8 MHz

; Retardo actual = 0.2 segundos = 400000 ciclos
; Error = 0 %

    cblock
    r8
    r9
    r10
    endc

Retardo_200ms
            ;399992 ciclos
    movlw    0x35
    movwf    r8
    movlw    0xE0
    movwf    r9
    movlw    0x01
    movwf    r10
Retardo_200ms_0
    decfsz    r8, f
    goto    $+2
    decfsz    r9, f
    goto    $+2
    decfsz    r10, f
    goto    Retardo_200ms_0

            ;4 ciclos
    goto    $+1
    goto    $+1

            ;4 ciclos (incluyendo call)
    return

;-----------------------------------------------------------------------------------------

; Retardo = 0.1 segundos
; Frecuencia reloj = 8 MHz

; Retardo actual = 0.1 segundos = 200000 ciclos
; Error = 0 %

    cblock
    r11
    r12
    endc

Retardo_100ms
            ;199993 ciclos
    movlw    0x3E
    movwf    r11
    movlw    0x9D
    movwf    r12
Retardo_100ms_0
    decfsz    r11, f
    goto    $+2
    decfsz    r12, f
    goto    Retardo_100ms_0

            ;3 ciclos
    goto    $+1
    nop

            ;4 ciclos (incluyendo call)
    return

;-----------------------------------------------------------------------------------------

; Retardo = 0.05 segundos
; Frecuencia reloj = 8 MHz

; Retardo actual = 0.05 segundos = 100000 ciclos
; Error = 0 %

    cblock
    r13
    r14
    endc

Retardo_50ms
            ;99993 ciclos
    movlw    0x1E
    movwf    r13
    movlw    0x4F
    movwf    r14
Retardo_50ms_0
    decfsz    r13, f
    goto    $+2
    decfsz    r14, f
    goto    Retardo_50ms_0

            ;3 ciclos
    goto    $+1
    nop

            ;4 ciclos (incluyendo call)
    return

;-----------------------------------------------------------------------------------------

; Retardo = 0.02 segundos
; Frecuencia reloj = 8 MHz

; Retardo actual = 0.02 segundos = 40000 ciclos
; Error = 0 %

    cblock
    r15
    r16
    endc

Retardo_20ms
            ;39993 ciclos
    movlw    0x3E
    movwf    r15
    movlw    0x20
    movwf    r16
Retardo_20ms_0
    decfsz    r15, f
    goto    $+2
    decfsz    r16, f
    goto    Retardo_20ms_0

            ;3 ciclos
    goto    $+1
    nop

            ;4 ciclos (incluyendo call)
    return

;-----------------------------------------------------------------------------------------

; Retardo = 0.01 segundos
; Frecuencia reloj = 8 MHz

; Retardo actual = 0.01 segundos = 20000 ciclos
; Error = 0 %

    cblock
    r17
    r18
    endc

Retardo_10ms
            ;19993 ciclos
    movlw    0x9E
    movwf    r17
    movlw    0x10
    movwf    r18
Retardo_10ms_0
    decfsz    r17, f
    goto    $+2
    decfsz    r18, f
    goto    Retardo_10ms_0

            ;3 ciclos
    goto    $+1
    nop

            ;4 ciclos (incluyendo call)
    return

;-----------------------------------------------------------------------------------------

; Retardo = 0.005 segundos
; Frecuencia reloj = 8 MHz

; Retardo actual = 0.005 segundos = 10000 ciclos
; Error = 0 %

    cblock
    r19
    r20
    endc

Retardo_5ms
            ;9993 ciclos
    movlw    0xCE
    movwf    r19
    movlw    0x08
    movwf    r20
Retardo_5ms_0
    decfsz    r19, f
    goto    $+2
    decfsz    r20, f
    goto    Retardo_5ms_0

            ;3 ciclos
    goto    $+1
    nop

            ;4 ciclos (incluyendo call)
    return

;-----------------------------------------------------------------------------------------

; Retardo = 0.002 segundos
; Frecuencia reloj = 8 MHz

; Retardo actual = 0.002 segundos = 4000 ciclos
; Error = 0 %

    cblock
    r21
    r22
    endc

Retardo_2ms
            ;3993 ciclos
    movlw    0x1E
    movwf    r21
    movlw    0x04
    movwf    r22
Retardo_2ms_0
    decfsz    r21, f
    goto    $+2
    decfsz    r22, f
    goto    Retardo_2ms_0

            ;3 ciclos
    goto    $+1
    nop

            ;4 ciclos (incluyendo call)
    return

;-----------------------------------------------------------------------------------------

; Retardo = 0.001 segundos
; Frecuencia reloj = 8 MHz

; Retardo actual = 0.001 segundos = 2000 ciclos
; Error = 0 %

    cblock
    r23
    r24
    endc

Retardo_1ms
            ;1993 ciclos
    movlw    0x8E
    movwf    r23
    movlw    0x02
    movwf    r24
Retardo_1ms_0
    decfsz    r23, f
    goto    $+2
    decfsz    r24, f
    goto    Retardo_1ms_0

            ;3 ciclos
    goto    $+1
    nop

            ;4 ciclos (incluyendo call)
    return

;-----------------------------------------------------------------------------------------

; Retardo = 20 segundos
; Frecuencia reloj = 8 MHz

; Retardo actual = 20 segundos = 40000000 ciclos
; Error = 0 %

    cblock
    r25
    r26
    r27
    endc

Retardo_20s
            ;39999993 ciclos
    movlw    0x6C
    movwf    r25
    movlw    0x32
    movwf    r26
    movlw    0x58
    movwf    r27
Retardo_20s_0
    decfsz    r25, f
    goto    $+2
    decfsz    r26, f
    goto    $+2
    decfsz    r27, f
    goto    Retardo_20s_0

            ;3 ciclos
    goto    $+1
    nop

            ;4 ciclos (incluyendo call)
    return

;-----------------------------------------------------------------------------------------

; Retardo = 10 segundos
; Frecuencia reloj = 8 MHz

; Retardo actual = 10 segundos = 20000000 ciclos
; Error = 0 %

    cblock
    r28
    r29
    r30
    endc

Retardo_10s
            ;19999992 ciclos
    movlw    0xB5
    movwf    r28
    movlw    0x99
    movwf    r29
    movlw    0x2C
    movwf    r30
Retardo_10s_0
    decfsz    r28, f
    goto    $+2
    decfsz    r29, f
    goto    $+2
    decfsz    r30, f
    goto    Retardo_10s_0

            ;4 ciclos
    goto    $+1
    goto    $+1

            ;4 ciclos (incluyendo call)
    return

;-----------------------------------------------------------------------------------------

; Retardo = 5 segundos
; Frecuencia reloj = 8 MHz

; Retardo actual = 5 segundos = 10000000 ciclos
; Error = 0 %

    cblock
    r31
    r32
    r33
    endc

Retardo_5s
            ;9999995 ciclos
    movlw    0x5A
    movwf    r31
    movlw    0xCD
    movwf    r32
    movlw    0x16
    movwf    r33
Retardo_5s_0
    decfsz    r31, f
    goto    $+2
    decfsz    r32, f
    goto    $+2
    decfsz    r33, f
    goto    Retardo_5s_0

            ;1 ciclos
    nop

            ;4 ciclos (incluyendo call)
    return

;-----------------------------------------------------------------------------------------

; Retardo = 2 segundos
; Frecuencia reloj = 8 MHz

; Retardo actual = 2 segundos = 4000000 ciclos
; Error = 0 %

    cblock
    r34
    r35
    r36
    endc

Retardo_2s
            ;3999994 ciclos
    movlw    0x23
    movwf    r34
    movlw    0xB9
    movwf    r35
    movlw    0x09
    movwf    r36
Retardo_2s_0
    decfsz    r34, f
    goto    $+2
    decfsz    r35, f
    goto    $+2
    decfsz    r36, f
    goto    Retardo_2s_0

            ;2 ciclos
    goto    $+1

            ;4 ciclos (incluyendo call)
    return

;-----------------------------------------------------------------------------------------



;-----------------------------------------------------------------------------------------



;-----------------------------------------------------------------------------------------



;-----------------------------------------------------------------------------------------



;-----------------------------------------------------------------------------------------


;-----------------------------------------------------------------------------------------

Saludo.
 
Es bueno tener a la mano subrutinas de retardo precisas... yo tenía una idea similar pero desistí porque me pareció engorroso estar contando ciclos máquina, entonces mejor me auxilio del TMR0 o el TMR1 para generar los retardos
 
Todavía no he acabado, me falta completar rutinas de 8 MHz, como 30 minutos, una hora, cosas así....
Después seguré unas cuantas más para 10MHz, 12MHz hasta llegar a 20 MHz. Vale la pena. En el ejemplo de arriba usa mucha RAM, si loso vas a usar pequeños retardos, por lo menos 20microsegundos y otros de 10uS. Se aconseja usar esas dos subrutinas y las demás no las añada al PIC, te ahorra una treintena de RAM que no usarás. hay que tenerlo en cuenta.
 
Todavía no he acabado, me falta completar rutinas de 8 MHz, como 30 minutos, una hora, cosas así....
Después seguré unas cuantas más para 10MHz, 12MHz hasta llegar a 20 MHz. Vale la pena.

¿30 min?, no me imagino la cantidad de bucles... en lo personal creo que es hacer desperdiciar mucho tiempo al PIC, en casos como ese me parece una mejor opción utilizar algún oscilador de baja frecuencia externo. Como te comentaba antes, me auxilio del TMR1 y un cristal de 32.768 KHz para la generación de retardos, de esta forma puedo "paralelizar" el temporizador con alguna otra actividad.

Respecto a los retardos de menos de 1ms tu opción me parece la más "económica", se agradecen las rutinas.
 
¿Hola?

Si la idea es paralaizar el PIC para poder hacer otras cosas, lo ideas es el TIMER0 con sus interrupciones INT. Hay casos que se usará el PIC de esa manera sin interrumpirlo. No tienes porqué usar 30 mintos y no tiene muchos bucles que digamos.

Código:
; Delay = 30 seconds ; Clock frequency = 4 MHz  ; Actual delay = 30 seconds = 30000000 cycles ; Error = 0 %  	cblock 	R1 	R2 	R3 	endc  Retardo_30seg 			;29999996 cycles 	movlw	0x11 	movwf	R1 	movlw	0x66 	movwf	R2 	movlw	0x42 	movwf	R3 Retardo_30seg_0 	decfsz	R1, f 	goto	$+2 	decfsz	R2, f 	goto	$+2 	decfsz	R3, f 	goto	Retardo_30seg_0  			;4 cycles (including call) 	return

Saludo.
 
Si la idea es paralaizar el PIC para poder hacer otras cosas, lo ideas es el TIMER0 con sus interrupciones INT.

Exacto... la verdad nunca he usado un retardo tan prolongado. Me remitiré a estos programas cuando lo necesite.

La rutina de 30 seg es pequeña, pero yo me refería a la de 30 minutos jeje...
 
Hola:

Retardo de 120 minutos.
Código:
; Delay = 120 seconds ; Clock frequency = 4 MHz  ; Actual delay = 120 seconds = 120000000 cycles ; Error = 0 %  	cblock 	d1 	d2 	d3 	d4 	endc  Retardo_120m 			;119999995 cycles 	movlw	0x54 	movwf	d1 	movlw	0x74 	movwf	d2 	movlw	0xCC 	movwf	d3 	movlw	0x01 	movwf	d4 Retardo_120m_0 	decfsz	d1, f 	goto	$+2 	decfsz	d2, f 	goto	$+2 	decfsz	d3, f 	goto	$+2 	decfsz	d4, f 	goto	Retardo_120m_0  			;1 cycle 	nop  			;4 cycles (including call) 	return
 

Adjuntos

  • Librería.zip
    28.4 KB · Visitas: 10
Atrás
Arriba