Delay

Librerie PIC10/12/16 » Delay

Librerie a precisione migliorata distribuite da Microchipc.com.

Prerequisiti

Quarzo/oscillatore da 4MHz, 8MHz, 10MHz, 16MHz, 20MHz o 32MHz. Frequenze diverse da queste non sono supportate

Utilizzo

Definire nel main la frequenza del quarzo/oscillatore espressa in Hertz definendo PIC_CLK:

#define PIC_CLK 4000000 // quarzo a 4MHz

Includere delay.c nel main dopo il define del quarzo:

#include "delay.c"

Funzioni disponibili

DelayUs(x); // esegue un ritardo da x μSec (x da 0 a 255)
DelayMs(x); // esegue un ritardo da x mSec (x da 0 a 255)
DelayBigMs(x); // esegue un ritardo da x mSec (x da 0 a 65535)
DelayS(x); // esegue un ritardo da x Sec (x da 0 a 255)

Download

Routine Delay Enhanced Precision (645)
  1. #1 da pipporippolo il 22 maggio 2012

    Scusa ma rettifico cosa il messaggio postato prima…opssibilmente toglierlo adesso l’errore che mi da è #error please define PIC_CLK correctly..
    ovviamente PIC_CLK è definito correttamente..e cioè #define PIC_CLK 16000000 come suggerito all’inizio della pagina ma ad esempio non capisco perchè bisogna inserire #include “delay.c” e non #include “delay.h”

    • #2 da Giovanni Bernardo il 22 maggio 2012

      Dipende da come sono strutturate le funzioni e da come lavori. Se il file C si include lui l’H, allora includi solo il C. Se PIC_CLK è definito ma fa lo stesso errore, può darsi che lo definisci dopo aver incluso la libreria o comunque in un punto sbagliato.

  2. #3 da zeltnerg il 18 luglio 2012

    b. sera,
    a me funziona tutto tranne il ritardo
    DelayS(1); qualsiasi numero io ci scrivi dentro non lampeggia piu nulla.
    ho settato la freq a 20mhz nel main.c come sopra detto .
    dove sbaglio? uso un 16f877a
    grazie mille

  3. #4 da odessos il 29 dicembre 2012

    Salve a tutti, non capisco come mai utilizzando questa libreria Delay non mi permette di settare un tempo in us con la funzione DelayUs(x) inserendo il valore tramite una variabile, cioè se definisco una variabile “unsigned char tempo” e gli do il valore 100 dovrebbe darmi un ritardo di circa 100us, invece me lo da di 500/600us, se invece inserisco nella funzione il valore direttamente dentro le parentesi es. DelayUs(100) il ritardo è perfetto 100Us

    saluti
    Stefano

  4. #5 da apacchio il 23 febbraio 2013

    odessos :
    Salve a tutti, non capisco come mai utilizzando questa libreria Delay non mi permette di settare un tempo in us con la funzione DelayUs(x) inserendo il valore tramite una variabile, cioè se definisco una variabile “unsigned char tempo” e gli do il valore 100 dovrebbe darmi un ritardo di circa 100us, invece me lo da di 500/600us, se invece inserisco nella funzione il valore direttamente dentro le parentesi es. DelayUs(100) il ritardo è perfetto 100Us
    saluti
    Stefano

    Anche io ho lo stesso problema… :-(

  5. #7 da peppino53 il 1 giugno 2013

    ciao Giovanni,
    abilitando il watchdog, devo preoccuparmi di inserire l’istruzione di azzerare il watchdog prima che il suo avanzamento determina il reset del micro. cioè ho tempo pochi millisecondi o pochi secondi se utilizzo il prescaler per azzerare il watchdog.
    La domanda: se mi serve un ritardo di un minuto , nella routine di delay che devo utilizzare è già presente l’istruzione di azzerare il watchdog? o si pianta tutto?
    spero di essere stato chiaro.
    cordiali saluti
    peppino

  6. #8 da edoardo.bellamacina il 25 novembre 2016

    Ciao Giovanni, ho usato il tuo esempio con un PIC12F509 ma in fase di compilazione mi dà questo errore:

    Clean: Deleting intermediary and output files.
    Clean Warning: File “C:\Users\EDO\Desktop\CIAO MONDO\delay.p1” doesn’t exist.
    Clean: Deleted file “C:\Users\EDO\Desktop\CIAO MONDO\scheletro.p1”.
    Clean: Done.
    Build C:\Users\EDO\Desktop\CIAO MONDO\ciao_mondo for device 12F509
    Using driver C:\Program Files\HI-TECH Software\PICC\9.83\bin\picc.exe

    Executing: “C:\Program Files\HI-TECH Software\PICC\9.83\bin\picc.exe” –pass1 “C:\Users\EDO\Desktop\CIAO MONDO\delay.c” -q –chip=12F509 -P –runtime=default –opt=default -D__DEBUG=1 -g –asmlist “–errformat=Error [%n] %f; %l.%c %s” “–msgformat=Advisory[%n] %s” “–warnformat=Warning [%n] %f; %l.%c %s”
    Error [103] C:\Users\EDO\Desktop\CIAO MONDO\delay.h; 47.39 #error: please define PIC_CLK correctly
    Error [103] C:\Users\EDO\Desktop\CIAO MONDO\delay.h; 101.39 #error: please define PIC_CLK correctly
    Error [103] C:\Users\EDO\Desktop\CIAO MONDO\delay.h; 177.39 #error: please define PIC_CLK correctly
    Executing: “C:\Program Files\HI-TECH Software\PICC\9.83\bin\picc.exe” –pass1 “C:\Users\EDO\Desktop\CIAO MONDO\scheletro.c” -q –chip=12F509 -P –runtime=default –opt=default -D__DEBUG=1 -g –asmlist “–errformat=Error [%n] %f; %l.%c %s” “–msgformat=Advisory[%n] %s” “–warnformat=Warning [%n] %f; %l.%c %s”

    ********** Build failed! **********

    il codice del file principale è

    #include //parentesi angolari perche’ si trova in cartella include
    __CONFIG (OSC_IntRC & WDT_OFF & CP_OFF & MCLRE_OFF);
    #define PIC_CLK 4000000 // quarzo a 4MHz
    #include “delay.c”
    void main(){
    int pippo=0;
    TRISGPIO=0b00001000;

    while(pippo<10){
    //GPIO=0b00000000;
    // DelayMs(255);
    GPIO=0b00010111;
    pippo=pippo+1;
    // GPIO=0b00000000;
    // DelayMs(255);
    }

    }
    Grazie anticipatamente
    Edoardo

    • #9 da Giovanni Bernardo il 25 novembre 2016

      Error [103] C:\Users\EDO\Desktop\CIAO MONDO\delay.h; 47.39 #error: please define PIC_CLK correctly
      fa capire che delay.h sta cercando PIC_CLK ma non lo trova. Perchè l’hai messo nel main, il quale non include delay.h
      Definisci PIC_CLK nel delay.h

      • #10 da edoardo.bellamacina il 26 novembre 2016

        Ciao Giovanni, innanzitutto grazie per la risposta; ho definito PIC_CLK nel file delay.h e adesso l’errore del post precedente sembra essersi risolto ma in fase di compilazione mi dà questo:

        Clean: Deleting intermediary and output files.
        Clean Warning: File “C:\Users\EDO\Desktop\ultimo pic\delay.p1” doesn’t exist.
        Clean: Deleted file “C:\Users\EDO\Desktop\ultimo pic\scheletro.p1”.
        Clean: Done.
        Build C:\Users\EDO\Desktop\ultimo pic\ultimo pic for device 12F509
        Using driver C:\Program Files\HI-TECH Software\PICC\9.83\bin\picc.exe

        Executing: “C:\Program Files\HI-TECH Software\PICC\9.83\bin\picc.exe” –pass1 “C:\Users\EDO\Desktop\ultimo pic\delay.c” -q –chip=12F509 -P –runtime=default –opt=default -D__DEBUG=1 -g –asmlist “–errformat=Error [%n] %f; %l.%c %s” “–msgformat=Advisory[%n] %s” “–warnformat=Warning [%n] %f; %l.%c %s”
        Error [194] C:\Users\EDO\Desktop\ultimo pic\delay.c; 20.15 “)” expected
        Error [312] C:\Users\EDO\Desktop\ultimo pic\delay.c; 20.15 “;” expected
        Error [194] C:\Users\EDO\Desktop\ultimo pic\delay.c; 32.15 “)” expected
        Error [312] C:\Users\EDO\Desktop\ultimo pic\delay.c; 32.15 “;” expected
        Executing: “C:\Program Files\HI-TECH Software\PICC\9.83\bin\picc.exe” –pass1 “C:\Users\EDO\Desktop\ultimo pic\scheletro.c” -q –chip=12F509 -P –runtime=default –opt=default -D__DEBUG=1 -g –asmlist “–errformat=Error [%n] %f; %l.%c %s” “–msgformat=Advisory[%n] %s” “–warnformat=Warning [%n] %f; %l.%c %s”

        Nel file principale ho tolto il define del PIC_CLK per metterlo nel file dealy.h come da tuo consiglio, modificandolo così:

        #include //parentesi angolari perche’ si trova in cartella include

        __CONFIG (OSC_IntRC&WDT_OFF&CP_OFF&MCLRE_OFF);

        #include “delay.c”

        void main(){
        int pippo=0;
        TRISGPIO=0b00001000;

        while(1){

        GPIO=0b00010111;
        DelayMs(255);
        GPIO=0b00000000;
        DelayMs(255);
        }

        }

        mentre i due files ausiliari sono quelli proposti nel tuo esempio (con la modifica del define PIC_CLK spostato nel delay.h.)

        Non so più dove sbattere la testa, sono disperato (sì lo so che nella vita c’è di peggio di un pic che non si riesce a programmare) ma è diventata una questione di principio.
        Io uso Arduino senza problemi ed ho voluto introdurmi al mondo dei PIC ma mi sto scoraggiando.
        D’altro canto vorrei solo, per iniziare, far blinkare un led come spiegato in tutti i tutorial che trovo in rete, solamente che vorrei farlo con un 12F509 usando l’oscillatore interno.
        Penso di non aver capito bene il funzionamento dei file delay, mentre credo di aver afferrato il discorso dei Fuses di configurazione, dell’impostazione dei registri tristate e del settaggio della direzione delle porte.
        Se per caso hai un esempio di blink applicato al PIC di cui sopra e riesci a postarlo te ne sarei immensamente grato, mi servirebbe come partenza per andare avanti con il mio approfondimento.
        Diversamente ti ringrazio comunque per avermi dedicato un po’ del tuo tempo.
        Ciao, Edoardo.

      • #11 da Giovanni Bernardo il 1 dicembre 2016

        Ciao, scusami della risposta tarda.
        Il problema è che quella roba è piuttosto obsoleta. Dovresti provare con il nuovo MplabX e i compilatori XC. Li è tutto piu semplice e il ritardo lo fai con una macro di sistema.

        In questo articolo c’è il sorgente per un pic12F:
        http://www.settorezero.com/wordpress/misurare-temperatura-e-umidita-relativa-con-il-sensore-dht22-e-un-picmicro/

        Puoi prendere spunto da li. Potrei farti io un sorgente per il tuo pic ma adesso non ho molto tempo a disposizione. Dai un occhio a quello li e vedi se ci capisci qualcosa. Su MPLAB X tutto è piu organizzato, c’è anche il tool per generarti i fuses di configurazione, ci devi smanettare su un paio di giorni ma poi vedi che tutto torna. Chiaramente se sei abituato ad Arduino ti troverai a disagio perche non ci sono librerie gia fatte, esempi ecc

      • #12 da Giovanni Bernardo il 1 dicembre 2016

        Vedi anche qui sul mio repository github, ho messo le prime lezioni aggiornate con mplabx, sicuramente riesci ad attare un esempio al tuo pic. basta che cambi la word di configurazione e la definizione delle porte:
        https://github.com/Cyb3rn0id/settorezero_dot_com_updated_sources

      • #13 da edoardo.bellamacina il 5 dicembre 2016

        Grazie Giovanni, provo il tutto e ti faccio sapere.
        Ciao, Edoardo

Devi essere collegato per lasciare un commento.

  1. Ancora nessun trackback
Settorezero.com e il logo Zroid™ ©2007÷2017 Giovanni Bernardo - E' vietata la copia e la distribuzione anche parziale dei contenuti di questo sito web senza l'esplicito consenso dell'autore. I contenuti di settorezero.com sono distribuiti sotto una licenza Creative Commons Attribuzione-Non Commerciale-Non Opere derivate 2.5 Italia e sono soggetti alle condizioni definite nel disclaimer. Settorezero.com e tutti i suoi contenuti sono tutelati dalla legge sul diritto d'autore per cui i trasgressori sono perseguibili a norma di legge. Settorezero fa uso dei cookie leggi l'informativa estesa. Il tema di questo sito è basato sul tema Fusion per wordpress, realizzato originariamente da digitalnature e fa uso del plugin Wassup per il computo delle statistiche. Per contattare l'autore siete pregati di utilizzare la sezione contatti. Siamo presenti anche su Facebook e, meno assiduamente, anche su Twitter - Tumblr - Google+ - Blogspot - Youtube.
Creative Commons BY-NC-ND 2.5