Autor Tema: Duda :Como hacer delay con el pic 16f819 y otros pics  (Leído 4282 veces)

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

Desconectado Ragnarok

  • PIC10
  • *
  • Mensajes: 4
Duda :Como hacer delay con el pic 16f819 y otros pics
« en: 16 de Mayo de 2015, 18:50:34 »
Hola, perdón si los molesto soy novato en esto de la programacion de PICs pero me gustaría aprender  ha hacer retardos con cualquier pic sin disponer de librerías, estoy utilizando el compilador MPLAB XC8 y simulador proteus 7. dispongo de un pic 16f819 y cristal  interno a 8Mherzt.

estos son mis fusibles si al caso seria necesario en mi consulta:

#include <xc.h>


// CONFIG
#pragma config FOSC = INTOSCIO  // Oscillator Selection bits (INTRC oscillator; port I/O function on both RA6/OSC2/CLKO pin and RA7/OSC1/CLKI pin)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = ON       // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is MCLR)
#pragma config BOREN = OFF      // Brown-out Reset Enable bit (BOR disabled)
#pragma config LVP = OFF        // Low-Voltage Programming Enable bit (RB3/PGM pin has digital I/O function, HV on MCLR must be used for programming)
#pragma config CPD = OFF        // Data EE Memory Code Protection bit (Code protection off)
#pragma config WRT = OFF        // Flash Program Memory Write Enable bits (Write protection off)
#pragma config CCPMX = RB2      // CCP1 Pin Selection bit (CCP1 function on RB2)
#pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)



#define _XTAL_FREQ = 8000000

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2980
Re: Duda :Como hacer delay con el pic 16f819 y otros pics
« Respuesta #1 en: 16 de Mayo de 2015, 19:12:34 »
Hola ragnarok puedes hacer delay (Cosa que no recomiendo que se use) hay muchas maneras de hacerlo, por ejemplo, utilizando un Timer y un bucle while, cargas el timer a 1 mseg y haces una función donde pasas cuantos milisegundos quieres estar parado.

esto es un ejemplo con un reloj a 48 MHZ

Código: [Seleccionar]
void Delaymseg( unsigned t)
{
    OpenTimer1(T1_ON | T1_PS_1_256, 0xFFFF);
    while (t--)
    {  // t x 1ms loop
        WriteTimer1(0);
        while (ReadTimer1() < 48000000/256/1000);
    }
CloseTimer1();
} // Delayms

Con esta manera de hacerlo, si llega una interrupcion sera atendida, sin embargo esta manera es quizá un poco compleja para un usuario nuevo. Tu mejor alternativa, y no veo por que no quieres usarlo es hechar mano de las librerias y usar los delay estandar.

un saludo

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Duda :Como hacer delay con el pic 16f819 y otros pics
« Respuesta #2 en: 16 de Mayo de 2015, 19:36:36 »
Como dice juaperser no se recomienda.. Ya que el micro no hace nada util mientras. Y para hacer un delay de esa forma necesitas conocer que es, como funciona el micro.
No veo ninguna ventaja de usar el timer como un delay, ya que terminarias usando un modulo, cuando podrias hacerlo con las librerias. No es que este mal, pero la libreria no utiliza ese modulo

Ejemplo de Un delay simple. Algo asi:

for(i=0;i=10000;i++);

Cuanto lleva ejecutarse eso ? no tengo la menor idea, y tampoco a ciencia cierta podemos saberlo, ya que el compilador pasara esa funcion a ASM, el cual no sabemos cuantas instrucciones necesitara para eso. Si i es de 16bits va a llevar un tiempo, si es de 8 bits otro.
Podrias utilizar ASM si queres que sea mas exacto, aun asi, tambien podrias ver cuantos ciclos usa 1 vuelta de ese loop(for) y calcular un estimado el numero al cual deberia llegar. No es tan exacto pero bastante simple.

Los delays se usan para cosas insignificantes, ej. 5us por temas de tiempo con otro IC. Si son tiempos mas largos, derecho a las interrupciones.

Desconectado Ragnarok

  • PIC10
  • *
  • Mensajes: 4
Re: Duda :Como hacer delay con el pic 16f819 y otros pics
« Respuesta #3 en: 09 de Junio de 2015, 23:43:04 »
gracias muchachos por responder a mi pregunta, usare esas dos formas de retardo en mis proyectos  al caso de necesitarlos, pero ya resolví mi problema de los delay que me estaban fallando por mal configurado mi cristal, tenia doble espacio al inicio de definirlo

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 805
    • https://electronicadicto.wordpress.com/
Re: Duda :Como hacer delay con el pic 16f819 y otros pics
« Respuesta #4 en: 12 de Junio de 2015, 19:58:32 »
Tienes una librería llamada Tick.c proporcionada por microchip que utiliza el timer0 y la interrupción del timer para contar desde segundos hasta horas, días y no sé si años.
las puedes encontrar en el stack tcpip del fabricante.
Stack TCP/IP v2013-06-15

Si te paras a estudiarla verás que es muy sencilla y da mucho juego
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...