Autor Tema: Librerias Retardos para PIC 16fxxx con diferentes velocidades Reloj  (Leído 15359 veces)

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

Desconectado Almejandro

  • PIC10
  • *
  • Mensajes: 2
Bueno, luego de todo un dia de investigacion, diseño y prueba de mis librerias de retardos, quisiera compartirlas con ustedes, espero les sea util.

En el archivo a bajar encontraran 4 librerias.

    delay_us.INC: libreria para retardos en microsegundos, con velocidades de reloj (4MHz, 8MHz, 16MHz y 20MHz)
    delay_ms.INC: libreria para retardos en milisegundos, con velocidades de reloj (1MHz, 2MHz, 4MHz, 8MHz, 16MHz y 20MHz)
    delay_s.INC: libreria para retardos en segundos, con velocidades de reloj (1MHz, 2MHz, 4MHz, 8MHz, 16MHz y 20MHz)
    Macro_Delays: Con esta libreria podemos hacer llamada a los retardos como si lenguaje de alto nivel se tratara (con la ventaja de seguir siendo ensamblador)


Como usamos las librerias. Muy sencillo:

    
  • Primero que nada, en el documento principal de nuestro proyecto, incluimos la libreria de macros (usando INCLUDE <C\...\Macro_Delays.INC>; los puntos suspensivos con la ruta completa del archivo, asumimos que esta en C).
  • Especifiar el reloj usado, para ello definimos una constante: CLOCK equ "velocidad del reloj". En "velocidad del reloj especificamos, pues, eso exactamente, en Hertz. (Ejemplo: CLOCK equ 16000000)
  •  En cualquier punto donde queremos llamar un retardo, si es en 1 segundo por ejemplo, escribimos "Delay_s cantidadsegundos". La macro convierte esta "instruccion" en la correspondiente llamada para el retardo de 1 segundo.
  • Al final del documento incluimos las demas librerias como se hizo en el punto 1.

    
Vemos que el diseño de las librerias permite la llamada a las subrutinas de retardo de una forma muy sencilla. En los retrasos en segundos, podemos ir de (1 a 255). Lo mismo en milisegundos. En microsegundos si se complica un poco a bajas velocidades, en la libreria se explica los cuidados a tener en cuenta, es recomendable que para retardos tan bajos, se use la velocidad de reloj mas recomendable (en este caso, para us, lo mas recomendable es 20 MHz).

Las librerias se diseñaron de forma que se puedan usar las 3 al mismo tiempo en un proyecto. Deben tener cuidado con la libreria de macros, ya que si solo usan 1 de las librerias, delay_s.inc, tiene que comentar las demas macros no utilizadas porque si no le generan un error al compilar.

En resumen podemos llamar a los retardos de la siguientes formas:

   Delay_s      "cantidad_de_segundos"
    Delay_ms        "cantidad_de_milisegundos"
    Delay_us         "cantidad_de_microsegundos"


Sin comillas. La cantidad puede estar en decimal o hexadecimal mientras no sobrepase 255 decimal (1 Byte)

Incluyo ademas el programa en ensamblador que estuve usando para hacer las pruebas.

Código: [Seleccionar]
;***********************Prueba_libreria_retardos******************************
;
;
;====CONFIGURACION DEL MICROCONTROLADOR====
        List P=16F877A                    ;Especificacion del PIC
        INCLUDE     <P16F877A.INC>            ;Inclusion Archivos y Registros
        __CONFIG  _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC & _DEBUG_OFF & _WRT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_ON    ;Configuracion de los Fuses    


INCLUDE <E:\Archivos Personales\Documentos\Universidad\Microcontroladores\Programacion ASM\Librerias MPLAB\Macro_Delays.INC>

CLOCK equ 16000000    ;Seleccionamos la velocidad del reloj en Hz


;====VARIABLES Y CONSTANTES====
        CBLOCK    0x20

        ENDC

;====VECTOR RESET====
Reset    
        ORG        0x00
         GOTO     Inicio
        ORG        0x04            ;Manejo de interrupciones en direccion 4
        
;====PROGRAMA PRINCIPAL====
        ORG        5
Inicio
        BCF        STATUS,RP1        ;Seleccionamos Bank0 o Bank1
        BSF        STATUS,RP0        ;Seleccionamos Bank1
        CLRF    TRISB            ;PORTB --> Out
        MOVLW    b'00111111'        ;
        MOVWF    TRISA            ;PORTA --> In
        MOVLW    0x06            ;Hacemos todas las salidas analogicas
        MOVWF    ADCON1
        BCF        STATUS,RP0        ;Seleccionamos Bank0
        CLRF    PORTB

Loop
        BSF        PORTB,0            ;Encendemos el LED en PORTB.0
        Delay_s    .1                ;Esperamos 1 segundo
        BCF        PORTB,0            ;Apagamos el LED en PORTB.0
        Delay_s    .1                ;Esperamos 1 segundo
        goto     Loop            ;repetimos el bucle

INCLUDE <E:\Archivos Personales\Documentos\Universidad\Microcontroladores\Programacion ASM\Librerias MPLAB\delay_us.INC>
INCLUDE <E:\Archivos Personales\Documentos\Universidad\Microcontroladores\Programacion ASM\Librerias MPLAB\delay_ms.INC>
INCLUDE <E:\Archivos Personales\Documentos\Universidad\Microcontroladores\Programacion ASM\Librerias MPLAB\delay_s.INC>

END
Quisiera agradecerle a Andrew Bishop porque la mayor parte del trabajo la hizo el, yo solo tome sus librerias (en ms y us) y las edite para las mias (PIC Assembler Code). Los retardos en segundos los diseñe usando esta aplicacion Delay Code Generator)

Espero lo disfruten. Cualquier duda sobre el uso de las librerias, me avisan.

Agradecer no cuesta nada!!!

Descarga: Libreria de retardos.zip

NOTA DEL MODERADOR: Adjunto el archivo directamente al foro para evitar que se borre eventualmente.
« Última modificación: 11 de Octubre de 2010, 14:53:17 por un Moderador »