problème delay us
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

problème delay us



  1. #1
    invitebcc2342c

    Smile problème delay us


    ------

    Bonjour,

    Je programme un pic 18F4550 avec MPLAB et le compilateur ccs PCW.
    J'ai un soucie sur la fonction delay_us() , je ne peut pas dépassé 255. (je devrais peut-ètre passé à un compilateur supérieur)
    Alors j'ai essayé une boucle for, avec comme fin ma tempo voulu et à l'intérieur delay_us(1); Le problème c'est qu'elle me sort un temps d'attente réelle incohérent (non linéaire par rapport à la valeur apparament) et supérieur. Il faut compter en plus à chaque fois le temps des instructions, mais j'y ai pensé... problème boucle for... je ne sais pas.

    Quelqu'un aurai une idée de l'erreur ou alors un moyen de faire un tempo plus longue autrement (avec un timer je ne peut pas, j'utilise déjà trop d'interruption)

    Merci

    -----

  2. #2
    invite6f219821

    Re : problème delay us

    Salut,

    Solution pas trés élégante: mettre plusieurs delay_us() à la suite !

    FloC

  3. #3
    invitee5da1686

    Re : problème delay us

    il est impossible de realiser un delai de 1 µs avec ton instruction

    il te faudrait creer une routine du genre

    delay:

    if mon_delay > 255 then
    mon_delay = mon_delay - 255
    delay_us 255
    else
    delay_us mon_delay
    return
    end if

    goto delay

    metre le temp voulu dans mon_delay (variable supperieure a 8 bit sinon sa sert a rien)

    a+

  4. #4
    invite5637435c

    Re : problème delay us

    bonjour,

    tu ne peux pas faire simplement ça?:

    [CODE]
    delay_us(255);
    delay_us(100);
    [CODE/]

    Pour avoir 355µs.

  5. A voir en vidéo sur Futura
  6. #5
    invitebcc2342c

    Wink Re : problème delay us

    Merci pour vos réponse, mais le soucie c'est que mon temps peut être supérieur a un nombre non défini de fois 255.
    j'ai essayé ceci:

    //larg_pulse est le delay voulu:

    val=larg_pulse/255; //tronque à une valeur entière
    for(i=0; i<val; i++)
    { delay_us(255); }
    val = larg_pulse%255;
    delay_us(val); //où val=larg_pulse-(255*(larg_pulse/255)) "reste"

    avec ceci j'arrive finalement à une valeur approcher mais ce n'est pas du tout précis et j'utilise déja trop d'interruption pour me permettre un timer. Surtout aussi que cette tempo est présente justement dans une interruption externe.

  7. #6
    invite5637435c

    Re : problème delay us

    Pourquoi ne pas écrire une fonction qui fait directement ce temps?

    Si je t'ai bien compris tu veux pouvoir faire une tempo multiple de la fonction delay_us().

    Le temps à générer sera tempo=x*delay_us(y);

    ce qui pourrait donner quelque chose du genre:

    Code:
    void tempo(int val)
    {
    	char x ;
    	while (val != 0)
    	{
    		-- val ;
    		delay_us(x) ;
    		while (x !=0)	-- x ;
    	}
    }

Discussions similaires

  1. fonction delay sous quartus II
    Par inviteef27c66e dans le forum Électronique
    Réponses: 4
    Dernier message: 11/06/2008, 18h21
  2. PIC16F84 PWM et delay
    Par inviteb54e0fd7 dans le forum Électronique
    Réponses: 3
    Dernier message: 05/01/2008, 13h43
  3. Instruction "delay" CC11 pour 68HC11F1
    Par invitea88e6ae4 dans le forum Électronique
    Réponses: 12
    Dernier message: 05/06/2007, 17h35
  4. TIPE : Pédale d'effet Delay
    Par invite3b115fa0 dans le forum TPE / TIPE et autres travaux
    Réponses: 0
    Dernier message: 21/05/2007, 13h00
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...