Timer pour gestion temps réel 18f4431
Répondre à la discussion
Affichage des résultats 1 à 11 sur 11

Timer pour gestion temps réel 18f4431



  1. #1
    inviteb2b48352

    Timer pour gestion temps réel 18f4431


    ------

    Bonjour, voila j'ai effectuée un source en C pour la gestion du temps avec le TIMER1 du PIC18F4431 et un oscillateur de 32768Hz. Je souhaite à présent savoir si mon source est correct et avoir une aide pour le tester en allumant une led en fonction des secondes, et une autres en fonction des minutes. Merci de votre aide

    Voici le programme :
    /* Un timer gère le temps par Interuptions */

    #include <p18f4431.h> // déclarations pour le PIC18F4431


    #pragma config OSC=HS
    #pragma config LVP=OFF
    #pragma config DEBUG=ON


    #pragma interrupt MyInterrupt
    void MyInterrupt(void);

    // on déclare que lors d'une interruption
    #pragma code highVector=0x008
    void atInterrupthigh(void)
    {
    // on doit éxecuter le code de la fonction MyHighInterrupt
    _asm GOTO MyInterrupt _endasm
    }
    #pragma code // retour à la zone de code

    void Init_Timer1(void);
    void Init_Port(void);

    void main (void)
    {
    Init_Timer1();
    Init_Port();

    while (1) {
    // traitement principal
    }

    }


    void Init_Timer1(void)
    {
    // Débordement toutes les 1 secondes
    TMR1H = 0x80;
    TMR1L = 0x00;
    // Configuration du Timer pour oscilleur externe, prescale de 1
    // synchronisation sur oscillateur externe
    T1CON=0b00001111;
    // Flag à 0
    PIR1bits.TMR1IF = 0;
    // active le debordement par interuptions
    PIE1bits.TMR1IE = 1;
    // Haute priorité
    IPR1bits.TMR1IP = 1;

    // On autorise toutes les interruptions
    INTCONbits.GIE = 1;
    INTCONbits.PEIE = 1;
    }


    void Init_Port(void)
    {

    // on configure le pin 0 du port C en entrée (oscillateur externe)
    TRISCbits.TRISC0 = 1;
    TRISCbits.TRISC1 = 1;
    TRISA= 0x00;

    }

    volatile unsigned secondes, minutes, heures;

    void MyInterrupt(void)
    {
    if (PIR1bits.TMR1IF)
    {
    secondes++; // Incrementation des secondes
    if (secondes > 59) // 60 secondes ?
    {
    secondes = 0;
    minutes++; // Incrémentation des minutes
    }
    if(minutes > 59) //60minutes ?
    {
    minutes = 0;
    heures++; // Incrémenation des heures
    }
    if (heures > 12) //Ne pas utiliser les 24H
    heures = 1;
    TMR1H |= 0x80; //Réinitialistion du Timer1
    PIR1bits.TMR1IF = 0; //Effacer le Flag

    }

    }

    -----

  2. #2
    RISC

    Re : Timer pour gestion temps réel 18f4431

    Salut,

    Le mieux c'est de tester ton soft soit sur une maquette soit sur le simulateur de MPLAB (Debug > MPLAB Sim)

    a+

  3. #3
    invite7a49d0d5

    Cool Re : Timer pour gestion temps réel 18f4431

    Salut,

    >if (PIR1bits.TMR1IF)
    ce test ne sert à rien... vu que c'est la seule interruption utilisée...

    >TMR1H |= 0x80; //Réinitialistion du Timer1
    je mettrais ça dès la 1ère ligne de l'interruption... pour plus de "précision"...
    sinon tu "sautes" x cycles (selon que +minutes et/ou +heures...)...

    sinon @ quelle vitesse tourne le PIC ?

    vede
    ;O]
    ___________
    ...

  4. #4
    invite7a49d0d5

    Cool Re : Timer pour gestion temps réel 18f4431

    ps :

    la prochaine fois utilises les balises "code"... ça rend le code plus facile à lire...

    et n'oublies pas d'incrémenter quelque peu TMR1L (2@10 selon ton Fosc...),
    dû aux cycles de sauvegardes des registres avant chaque interruption... cf le .asm...
    pour te rapprocher de la vraie "seconde" théorique...
    ;O]

    .

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

    Re : Timer pour gestion temps réel 18f4431

    Vede,

    Centurion a fait exactement qu'il faut pour avoir une horloge TRES précise...
    Il ne faut justement PAS toucher à TMR1L De cette façon on est complètement indépendant du temps d'exécution de l'interruption.
    Quand l'interruption arrive, TMR1L continue de s'incrémenter de 0x0000, 0x0001 pendant l'interruption (cela dépend bien sur de la longueur du code et de la fréquence de l'oscillateur principal).
    En ne touchant que TMR1H on évite de décaler de TMR1L puisqu'il faut remettre 0x80xx dedans xx étant la valeur de TMR1L au moment ou TMR1H est écrit

    a+

  7. #6
    invite7a49d0d5

    Cool Re : Timer pour gestion temps réel 18f4431

    re,

    merci RISC pour tes infos sur le fonctionnement du TMR1...
    je vais tester ça dans la semaine avec un quartz 32.768Khz...
    pour faire des "comptes" ronds ^2 ;O] car je reste sceptique ;O]
    enfin je vous tiendrais au jus, armé de mon fréquencemètre ;O]

  8. #7
    invite7a49d0d5

    Cool Re : Timer pour gestion temps réel 18f4431

    re re :

    une question que je me pose... pour finir :

    qu'est ce qu'une horloge TRES précise ?

    -une horloge qui reproduit la norme horaire (1seconde = 1 "vraie" seconde,000000)
    ou
    -une horloge qui ne dérive "jamais" (quelque soit "sa base", 1seconde=sabase))
    ou
    -qui fait les deux
    ou
    ???

    .

  9. #8
    RISC

    Re : Timer pour gestion temps réel 18f4431

    Salut,

    Tu as raison. Mon allusion à une horloge très précise est incorrecte. J'aurais du dire une horloge SANS jitter qui aura la précision du quartz 32kHz car le registre TIMER1 ne sera jamais "déréglé" en n'écrivant QUE TMR1H.
    Les quartz 32kHz les plus précis sur le marché semblent avoir une dérive de l'ordre de 20ppm. L'horloge temps-réel ne pourra faire mieux sauf si.....on corrige dynamiquement.

    Les PIC24 et certains PIC18 ont une horloge RTCC intégrée avec un registre pour la correction dynamique à +/- 200ppm.
    Le principe est que chaque minute ce correcteur ajoute / retire des impulsions pour corriger la dérive. Pour cela on a besoin de 2 choses :

    1/ l'information de la température (principale responsable de la dérive)

    2/ la courbe en cloche du quartz utilisé qui est entrée dans une table de lookup de façon à corriger la dérive.

    Une note d'application explique je crois comment descendre à 5 ou 6 ppm avec un PIC24
    L'avantage est que cela se fait automatiquement dans l'unité RTCC même quand le micro est en veille d'où un consommation plus faible (500nA / 32kHz / 1.8V dans les PIC24 XLP)

    a+

  10. #9
    invite7a49d0d5

    Cool Re : Timer pour gestion temps réel 18f4431

    Salut,

    comm'd'ab merci pour toutes tes infos,
    je vais tester tout ça cette semaine,
    armé de mon fréquencemètre ;O]
    et vous tiendrais au jus/courant...

    vede
    ;O]
    ___________
    ...

    ps : zé bon'Dimanche za toutes zé tous...

  11. #10
    invite7a49d0d5

    Cool Re : Timer pour gestion temps réel 18f4431

    Citation Envoyé par vede Voir le message
    (...)
    armé de mon fréquencemètre ;O]
    (...)
    [humour]
    et de mon briquet ;O]
    mais y va "dériver" ce p.....g de quartz ;O]
    [/humour]

    plus sérieusement j'ai peur que la valeur des condos (du quartz)
    et la tension n'influent aussi beaucoup sur la "précision"
    (dans le sens 1 seconde = 1 "vraie" seconde , 00000000)
    et surtout les "valeurs théoriques" (formules TMR1)...
    pour avoir une "vraie seconde"...

  12. #11
    RISC

    Re : Timer pour gestion temps réel 18f4431

    Salut,

    J'ai peur de ne pas te suivre dans tes craintes....
    Quartz = 32768Hz garanti +/- x% à 25C à 3.3V (ou autre par le fabricant) avec x <<1%
    Tu mets 0x8000 dans le TIMER1 tu divises donc par (formule de la datasheet) 0x10000 - 0x8000 = 0x8000 = 32768 donc division parfaite.

    Les capas et la tension influence bien sûr mais si tu calibres et tu ajustes aux conditions de tests, quand tu feras varier Vdd et la température tu devrais avoir de très bon résultats à l'erreur prête donnée par le fabricant du quartz.

    Tu peux apparemment trouver facilement ce genre de 32kHz précis chez Citizen, Micro-Crystal et autres fabricants (EPSON?)
    NB : trouver des capas de 12,5pF n'est peut-être pas facile...

    a+

Discussions similaires

  1. Quel OS pour du temps réel
    Par vilveq dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 21/05/2015, 16h34
  2. interface (hard+soft) ordinateur pour ttt temps réel
    Par invite1b81724a dans le forum Matériel - Hardware
    Réponses: 16
    Dernier message: 08/12/2009, 21h56
  3. Gestion Timer 0
    Par invite5d1bc976 dans le forum Électronique
    Réponses: 0
    Dernier message: 10/05/2009, 10h45
  4. Timer pour gestion temps réel 18f2550
    Par Tyller dans le forum Électronique
    Réponses: 29
    Dernier message: 08/03/2009, 18h03
  5. gestion horloge temps réel
    Par invitecec8a619 dans le forum Électronique
    Réponses: 1
    Dernier message: 21/01/2008, 21h54
Découvrez nos comparatifs produits sur l'informatique et les technologies.