Précision TMR0
Répondre à la discussion
Affichage des résultats 1 à 11 sur 11

Précision TMR0



  1. #1
    invite02a9928f

    Précision TMR0


    ------

    Salut a tous,
    je compte réalisé un chronomètre avec un pic avec un affichage comme celui ci : Minutes : Secondes : Centiemes

    Si j'utilise un quartz de 4Mhz et une source Fosc/4, le timer en 8 bits (0 --> 255), et un prédiviseur de 4 j'aurais une intérruption toutes les :

    (1.10-6*4)*255 = 1.02 .10-3 secondes.

    Comment pourrais je faire afin d'avoir une précision plus proche de la milliseconde ?

    En vous remerciant par avance.

    -----

  2. #2
    invited3dcf66c

    Re : Précision TMR0

    Salut,
    Il te suffit de faire partir ton timer de 5 au lieu de 0 à chaque fois. Ainsi tu auras
    (1.10-6*4)*250 = 1.10-3 seconde tout rond.

  3. #3
    invite02a9928f

    Re : Précision TMR0

    rhooo lool mai quel couillon ... merci pour la reponse c'est la 1ere fois que j'utilise le timer j'ai pas les bon reflexes encore ... xD

  4. #4
    invite02a9928f

    Re : Précision TMR0

    je viens de faire un programme et lorsque j'envois le programme sur le pic, le LCD affiche un peu n'importe quoi ... les minutes defilent super vite, les secondes restent a 0 et les ms clignotent (99 -->0 -->99) ...
    Je vois pas d'ou cela vient ... si quelqu'un voit ...
    Code:
    char ms ;
    char sec ;
    char minu ;
    char Dms=0;
    char Ums=0;
    char Dsec=0;
    char Usec=0;
    char Dmin=0;
    char Umin=0;
    
    void interrupt() {
      ms++;               // Incrementation de la valeur a chaque interruption
      TMR0L  = 5;
      INTCON = 0x20;       // autorisation T0IE, mise a zero T0IF
    }//~
    
    void main()
    {
      ADCON1 = 0x3F;            // Set AN pins to Digital I/O
      T0CON  = 0XC1;            // Timer en 8 bits et prédiviseur en 1/4
      TMR0L  = 5;               // Timer0 commence à 5
      INTCON = 0xA0;            // Autorisation des interruptions du TMR0
      ms = 0;                   // Millisecondes à 0
      sec = 0;                  // Seconces à 0
      minu = 0 ;                 // Minutes à 0
      TRISB = 0;                // PORTB en sortie
      Lcd_Init(&PORTB);         // LCD connecté au PORTB
      Lcd_Cmd(Lcd_CLEAR);       // Efface ecran
      Lcd_Cmd(Lcd_CURSOR_OFF);  // Curseur OFF
    
    
      do
      {
        if (ms = 100) // si ms = 1 seconde
        {
        ms = 0;
         sec++;
        }
        if (sec = 60) // si sec = 1 minute
        {
         sec = 0;
         minu++;
        }
        Dms = ms /10;             // calcul des dizaines de ms
        Ums = ms -(Dms*10);       // calcul des unités de ms
        Dsec = sec/10 ;           // calcul des dizaines de sec
        Usec = sec - (Dsec*10);   // calul des unités de sec
        Dmin = minu/10;            // calcul des dizaines de min
        Umin = minu - (Dmin*10);   // calcul des unités de min
        LCD_Chr(1, 1,48 + Dmin);
        LCD_Chr(1, 2,48 + Umin);
        LCD_Chr(1, 3,':');
        LCD_Chr(1, 4,48 + Dsec);
        LCD_Chr(1, 5,48 + Usec);
        LCD_Chr(1, 6,':');
        LCD_Chr(1, 7,48 + Dms);
        LCD_Chr(1, 8,48 + Ums);
    
      } while(1);          // Boucle sans fin
    }//

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

    Re : Précision TMR0

    Au cas où ton code voudrait être du C, le '=' n'est pas un test mais une affectation ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  7. #6
    invite02a9928f

    Re : Précision TMR0

    pfiou merci, en effet c'est du C ... (je fais du visual basic non stop depuis 2 mois pour mon boulot c'est pour ça que j'ai fait une erreur ...) j'ai donc remis '==' dans les tests => les millisecondes sincrementent de façon trés bizarre, elles prennent n'importe quelle valeur (même des lettres) ... et par consequent les secondes s'incrementent quand ça leur chante ...

    [EDIT] je viens de remplacer "==" par ">=" et ça fonctionne le seul truc c'est que ça va super vite !! va falloir que je regarde d'ou cela vient

  8. #7
    inviteb71ecc36

    Re : Précision TMR0

    Citation Envoyé par Kmicaz Voir le message
    Code:
    if (ms == 100) // si ms = 1 seconde
    Pour info: 1s = 1000ms

  9. #8
    invite02a9928f

    Re : Précision TMR0

    Citation Envoyé par Kr3st Voir le message
    Pour info: 1s = 1000ms
    c'était pour voir si vous suiviez ... lool je suis vraiment un boulet aujourd'hui (sisi, d'habitude je le suis un peu moins ...)

  10. #9
    invite02a9928f

    Re : Précision TMR0

    je viens de comparer en simulation le temps de "mon chrono" avec le temps du chrono du PC les temps changent ... a 14 secondes sur mon chrono, il s'est ecoulé 15secondes de simulation ... ça pourrait venir d'ou ?? du temps d'execution de mes lignes de code ? si oui comment je pourrais faire pour le reduire ??

  11. #10
    invite3a1051d7

    Re : Précision TMR0

    bonjour,
    le temps des instructions tu peux pas y faire grand chose
    tu peux tenter de calculer tout ça mais
    la solution "bourrin" tu chronometre de façon precise un temp temps et tu modifie ton timer par une regle de trois .
    bon je sais c'est pas tres pro mais c'est le resultat qui compte.
    bonne soirée
    lain

  12. #11
    Seb.26

    Re : Précision TMR0

    Normal qu'avec '==' ça marche pas mais qu'avec '>=' oui : l'écriture dans le LCD prend plus de 1ms ... donc ton code ne peut pas marcher (tu devais sauter le '1000' ).

    pour ton problème de chrono, remplace :

    Code:
    if (ms >= 1000)
    {
        ms = 0;
        sec++;
    }
    par :

    Code:
    if (ms >= 1000)
    {
        ms -= 1000;
        sec++;
    }


    PS: tu as bien passé 'ms' en 16b , hein ?!!

    La règle de 3 te donnera un résultat pas trop mal statistiquement, mais restera aléatoire.
    Dernière modification par Seb.26 ; 25/10/2010 à 02h27.
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

Discussions similaires

  1. PIC 16F688 et TMR0
    Par inviteac602306 dans le forum Électronique
    Réponses: 26
    Dernier message: 05/07/2010, 14h26
  2. Précision DL
    Par invite962bb108 dans le forum Mathématiques du supérieur
    Réponses: 2
    Dernier message: 01/03/2009, 14h13
  3. ampli OP de precision
    Par invite14532198711 dans le forum Électronique
    Réponses: 3
    Dernier message: 19/10/2007, 00h02
  4. Plus de précision
    Par invite02ff1fa3 dans le forum Orientation après le BAC
    Réponses: 4
    Dernier message: 09/07/2007, 22h56
  5. precision
    Par inviteba9d98e8 dans le forum Matériel astronomique et photos d'amateurs
    Réponses: 3
    Dernier message: 15/01/2006, 18h39
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...