[Programmation] Programmation C - Problème TMR0 [Résolu]
Répondre à la discussion
Affichage des résultats 1 à 4 sur 4

Programmation C - Problème TMR0 [Résolu]



  1. #1
    invite519aafc0

    Question Programmation C - Problème TMR0 [Résolu]


    ------

    Bonjour,

    Celas faisait un petit temps que je n'avais pas programmer.

    J'ai récemment voulus m'y remettre en étudiant les algorigramme pour mieux comprendre chacun de mes programme.

    Je suis tombé sur un problème,je n'arrive plus a faire fonctionné le TMR0 de mon PIC.

    J'ai commencé par voir si il fonctionnais avec un programme très basique,et il fonctionne.

    Je vais vous partager mon programme qui est simple qui permet de faire clignoter une simple LED sans devoir utilisé la fonction delay car celas engendre que le PIC ne peut plus rien faire d'autre quand il exécute celle-ci.

    Voici le cahier des charge :

    -PIC utilisé un 16F628A

    -Clignotement d'une LED

    -Utilisation de l'interruption TMR0 pour créer le délais. (125ms entre chaque état de la LED)

    -Utilisation de l'oscillateur interne a 4MHz.

    Code:
    #define led PORTA.B1 // masque pour le bit 1
    
    unsigned int compteur; // variable pour stocker debordement TMR0
    
    void interrupt() // routine interruption
    {
     if (INTCON.T0IF == 1) // si débordement TMR0 a lieu,alors
     {
      INTCON.T0IF = 0; // init du flag a 0
      compteur++; // incrémentation de la variable
     }
    }
    
    void main() // routine principale
    {
     PORTA = 0; // init 0V
     TRISA = 0; // init full sortie
     PCON = 0b00001000; // init OSC interne 4MHz
     INTCON = 0b10100000; // interrupt autorisé,TMR0 activé
     CMCON = 7; // désactivation comparateur PORTA
     
     compteur = 0; // init variable a 0
     
     while(1)
     {
    
      if (compteur == 490) // 490 vaut 125ms
      {
       led = 1;
      }
    
      if (compteur == 980) // 980 vaut 250ms
      {
       led = 0;
       compteur = 0; // init variable a 0
      }
     }
    }
    Ici je n'utilise que la variable "compteur" pour tester si elle incrémente bien.

    Vous remarquer sans doute que j'ai bien initialisé le PIC pour avoir son OSC interne a 4MHZ,j'ai bien initialisé les entrée/sortie et leur niveau logique,j'ai également désactivé les comparateur du PORTA,autorisé les interruptions et activé l'interruption TMR0.

    Avant de poster je me suis cassé la tête pour trouver l'erreur et comparer avec d'autre code a moi qui fonctionne et tous est correcte pour la routine d'interruption,j'ai vérifier les moindre détails comme les points virgule,les double = dans un IF ect...

    J'ai également vérifier les paramètre de mon projet.J'ai bien choisi le bon pic et la fréquence a la quelle j'allais l'utilisé,j'ai désactivé le MCLR car je n'en avais pas besoin ici et j'ai précisé que j'allais aussi utilisé l'oscillateur interne du PIC.

    Qu'en pensez-vous??


    Cordialement.

    -----

  2. #2
    Fantas-Pic

    Re : Programmation C - Problème TMR0

    Bonjour,

    Il manquerait la DS du PIC pour vérifier tes initialisations et le compilateur que tu utilise .

    Il te manque l'affectation des sorties en numériques . ( peut-être fait par PORTA) sous mikroC ce serait ANSELA = 0;

    La config de l'OSC en interne ne se fait pas dans le registre CONFIG.FOSC ? page 98

    Bon courage

  3. #3
    invite519aafc0

    Re : Programmation C - Problème TMR0

    Salut,

    J'ai trouver la solution.

    Non ici pour l'OSC c'est le registre PCON qui s'en charge.On a le choix entre 48Khz et 4MHz.Quand je suis en teste de petit programme je n'utilise pas d'OSC externe pour pas me prendre la tête.Mais pour les gros produis fini ça peut être utile d'avoir un Quartz de 20MHz.

    Ici il me manquais de configurer le registre OPTION_REG pour définir le prescaler.Depuis cette config mon programme fonctionne nickel.

    Grace a ton conseil envoyer par mp (le ... enfin tu vois de quoi je parle) j'ai pu voir une personne qui avais le même problème que moi donc merci a toi ça ma mit sur le touche pour le prescaler.

    Donc ce sujet est résolu.

    Cordialement.

    Je savais que c'étais une broutille encore mdr je suis peut être pas assez attentif parfois ça me perdra.

  4. #4
    Fantas-Pic

    Re : Programmation C - Problème TMR0

    Génial, l'important c'est que tu ai réussis à trouver une solution à ton Problème .

    Bonne bidouille

  5. A voir en vidéo sur Futura

Discussions similaires

  1. [Divers] Problème de programmation moteur Somfy Treevia 600 ! [résolu]
    Par daclo dans le forum Dépannage
    Réponses: 3
    Dernier message: 02/06/2013, 14h52
  2. Tmr0 de pic 16f877
    Par invite062eba2b dans le forum Électronique
    Réponses: 3
    Dernier message: 25/05/2011, 16h13
  3. Tmr0
    Par invite062eba2b dans le forum Électronique
    Réponses: 0
    Dernier message: 23/05/2011, 02h57
  4. PIC 16F688 et TMR0
    Par inviteac602306 dans le forum Électronique
    Réponses: 26
    Dernier message: 05/07/2010, 14h26
  5. Probleme de programmation pic sur portable résolu
    Par invite3a1051d7 dans le forum Électronique
    Réponses: 0
    Dernier message: 11/05/2005, 13h45
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...