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

Programmation Timer renesas M16C



  1. #1
    Noxtox

    Question Programmation Timer renesas M16C


    ------

    Bonjour à tous. J'ai besoin d'utiliser un timer en mode compteur. En effet, je cherche à calculer l'intervalle de temps qui sépare une transmission d'une autre.
    Exemple:
    début de la transmission --> fin de la transmission & lancement du compteur --> attente d'une nouvelle transmission --> début d'une nouvelle transmission & arrêt du compteur

    Le µC est un Renesas M16C/62P cadencé à 10MHz.
    Voici mon programme principale:
    unsigned int testimer=0;
    void main void {
    TA3MR=0x40; /*mode timer et source f8*/
    TA3=1249; /*détermination du temps pour l'interruption*/
    TA3IC=4; /*interruption de priorité 4*/
    TABSR=0x08; /*Timer A3 lancé*/
    }
    Et la routine d'interruption:
    interrupt [TA3_INTV] void timer_irq (void) {
    lcdout(testimer); /*affichage de la valeur de testimer sur un écran LCD*/
    testimer++; /*+1ms*/
    }
    Je veux une interruption toute les 1ms. Donc d'après la doc Renesas j'ai calculé comme cela:
    Le prédiviseur est déterminé par le registre TA3MR.
    B7 B6
    0 | 0 => f1 donc 10MHz
    0 | 1 => f8 donc 10MHz/8
    1 | 0 => f32 donc 10MHz/32

    Je choisis le prédiviseur par 8.
    10MHz/8 = 1 250 000
    T = 1/f = 1/1 250 000 = 0.0000008 soit 800ns
    Nous voulons 1ms alors:
    n = 1ms/T => n = 1ms/800ns = 1250
    je mets donc 1250-1 dans le registre TA3

    Jusque la j'ai bon?

    Je lance le programme. Ça semble fonctionner. je vois bien la valeur de testimer qui s'incrémente à chaque interruption mais la base de temps n'est pas bonne.
    J'ai chronométré pour 1min et la variable testimer = 1313. Là est mon problème... Je devrais avoir environ 60000 non?
    J'ai effectué plusieurs tests en choisissant un prédiviseur différent et une valeur dans TA3 différente voici les résultats (pour un chrono de 1min):
    1) TA3MR = 0x40, TA3=1250 => testimer = 1313 cela devrait être 60000
    2) TA3MR = 0x80, TA3=1250 => testimer = 1309 cela devrait être 15000 car normalement nous avons une interruption toutes les 4ms
    3) TA3MR = 0x40, TA3=50000 => testimer = 1311 cela devrait être 1500 car normalement nous avons une interruption toutes les 40ms
    4) TA3MR = 0x80, TA3=50000 => testimer = 376 cela devrait être 375 car nous avons une interruption toutes les 160ms. Ici le résultat correspond à la théorie. 375~376.

    La je ne comprend pas trop. Pour l'exemple du 4 ça fonctionne mais si je veux toutes les 1ms ben...c'est pas bon....
    Des idées?

    -----

  2. #2
    Noxtox

    Re : Programmation Timer renesas M16C

    J'ai effectué le test avec un autre timer (A0). Cela me donne exactement la même chose...
    C'est assez difficile de trouver des infos sur les µC de renesas dans les forums...
    Quelqu'un?

  3. #3
    Noxtox

    Re : Programmation Timer renesas M16C

    C'est bon cela fonctionne. En fait mon programme pour le timer est OK. Mais c'est ma fonction lcdout() qui posait problème. En étudiant celle-ci, je me suis aperçu qu'au début, les interruptions étaient désactivées pour être réactivées après. Donc cela faussait le timer car il ne pouvait plus générer d'interruption pendant ce temps.

Discussions similaires

  1. Programmer un microcontrôleur Renesas
    Par youril dans le forum Électronique
    Réponses: 2
    Dernier message: 08/10/2007, 15h47
  2. timer
    Par vindalou dans le forum Électronique
    Réponses: 2
    Dernier message: 24/02/2007, 13h00
  3. Mos Hitachi (Renesas) 2SK2937
    Par christof25 dans le forum Électronique
    Réponses: 4
    Dernier message: 10/12/2006, 14h17
  4. Timer....??
    Par bimo dans le forum Logiciel - Software - Open Source
    Réponses: 14
    Dernier message: 15/09/2006, 15h18
  5. problème de programmation de timer keeper MK48T08
    Par fildelo dans le forum Électronique
    Réponses: 0
    Dernier message: 25/04/2006, 07h43
Découvrez nos comparatifs produits sur l'informatique et les technologies.