Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

Temporiser l'état d'une sortie d'un PIC ( en C )



  1. #1
    lcoulon

    Question Temporiser l'état d'une sortie d'un PIC ( en C )


    ------

    Bonjour


    Je cherche a realiser une temporisation ( en C18 Microchip ) qui passerait le niveau d'une sortie (RA1 par exemple) au niveau haut, pendant 5 secondes puis la remet automatiquement a "0"

    Mon but etant que la temporisation ( décompte des 5 secondes ) n'empêche PAS le deroulement du restant du programme.

    Je sais réaliser une boucle tempo, mais a chaque fois cette la boucle attend que le port du PIC passe a "1" donc le reste du programme est en attente et ce n'est pas ce que je souhaiterai.


    L'idée est créer un code qui scrute regulierement l'etat de sortie RA1 du PIC, et lorsque cette sortie est a " 1 " depuis plus de 5s alors il la remet au niveau bas, sinon le programme continu son déroulement .

    Pourriez vous m'aider ?

    Merci a vous

    -----

  2. Publicité
  3. #2
    sdec25

    Re : Temporiser l'état d'une sortie d'un PIC ( en C )

    Salut.
    Tu peux utiliser une interruption sur un Timer. Par exemple le Timer 0.
    Le PIC est à quelle fréquence ?
    Une durée de 5 secondes à 8 Mhz compte 8M/4*5 = 10000000 de cycles
    Avec un prescaler de 256 le timer est incrémenté de 39063.
    Initialise le Timer à 65536-39063 = 26473 avec un prescaler de 256 et active les interruptions TMR0IE = 1, la routine d'interruption se lancera au bout de 5s pour remettre la sortie à 0.

  4. #3
    lcoulon

    Re : Temporiser l'état d'une sortie d'un PIC ( en C )

    C'est un 18F2620 ( donc 10 Mhz )

    peux tu m'ecrire le code qui fera la verification de l'etat du port et si l'etat est a "1" depuis 5s alors la sortie du port est forcée a "0"

    je debute en C et je galere un peu (beaucoup)

  5. #4
    sdec25

    Re : Temporiser l'état d'une sortie d'un PIC ( en C )

    T'es sûr qu'il est à 10 Mhz ? C'est un quartz ou l'oscillateur interne ? Parce que j'ai un 2685 et l'oscillateur interne est à 8 Mhz.
    le code qui fera la verification de l'etat du port et si l'etat est a "1" depuis 5s alors la sortie du port est forcée a "0"
    Comme on met nous même la sortie à 1, on sait quand débute la temporisation, donc pas besoin de vérifier tous les x ms si la sortie est à 1 ou pas.
    Le code suivant fonctionne avec 10 Mhz :
    Code:
    void decompte_5s() {
    sortie = 1;
    T0CON = 0b00000111; // OFF, prescaler 256
    INTCONbits.TMR0IF = 0;
    INTCONbits.TMR0IE = 1;
    TMR0H = 65;
    TMR0L = 68;
    T0CONbits.TMR0ON = 1;
    }
    
    ...
    #pragma code InterruptVectorHigh = 0x08
    void
    InterruptVectorHigh (void)
    {
      _asm
        goto InterruptHandlerHigh
      _endasm
    }
    
    ...
    
    
    #pragma interrupt InterruptHandlerHigh nosave=section("MATH_DATA")
    void InterruptHandlerHigh() {
    if (INTCONbits.TMR0IF && INTCONbits.TMR0IE) {
    sortie = 0;
    }
    }
    Dernière modification par sdec25 ; 29/09/2008 à 17h35.

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

    Re : Temporiser l'état d'une sortie d'un PIC ( en C )

    J'ai oublié de dire qu'il faut activer les interruptions :
    INTCONbits.IPEN = 1;
    INTCON2bits.TMR0IP = 1;
    INTCONbits.GIEH = 1;

  8. #6
    lcoulon

    Re : Temporiser l'état d'une sortie d'un PIC ( en C )

    Merci beaucoup, c'est sympa.

    je vais tester cela.

  9. Publicité

Discussions similaires

  1. Réponses: 0
    Dernier message: 20/04/2008, 21h55
  2. Débit d'eau sortie à la sortie d'un Y
    Par yiei dans le forum Physique
    Réponses: 4
    Dernier message: 24/01/2008, 14h38
  3. Impédance d'entrée d'une IO d'un PIC
    Par Toufinet dans le forum Électronique
    Réponses: 7
    Dernier message: 05/12/2007, 17h41
  4. Alimenter une led à la sortie d'un PIC
    Par eul boïau rouge dans le forum Électronique
    Réponses: 3
    Dernier message: 12/10/2006, 15h31
  5. Réponses: 11
    Dernier message: 15/03/2006, 16h17
Découvrez nos comparatifs produits sur l'informatique et les technologies.