compteur 8 bits 5MHz avec le PIC16F877A en utilisant le TIMER0

Affichage des résultats du sondage: je ne

Votants
2. Vous ne pouvez pas participer à ce sondage.
  • voulais

    1 50,00%
  • pas faire de sondage

    1 50,00%
Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

compteur 8 bits 5MHz avec le PIC16F877A en utilisant le TIMER0



  1. #1
    invited4a0c839

    compteur 8 bits 5MHz avec le PIC16F877A en utilisant le TIMER0


    ------

    Bonjour à tous.
    Je souhaite entre autre réaliser un compteur 8 bits 5MHz avec le PIC16F877A. J’ai un quartz de 20MHz j’ai utilisé le TIMER0, dans un premier temps dans le main j’ai fait :
    While(1)
    {
    PORTB = TMR0;
    }


    Mais lorsque je visualise le port B à l’oscilloscope, les 6 bits de poids forts sont correcte (bonne fréquence) mais les deux premier bits de poids faible (ceux qui sont sensé varier les plus vite : 5MHh et 2.5MHz) : je pense que ceci est du au fait que les durée des instructions while et l’affectation du port B sont trop grandes devant la période de comptage. En effet en divisant la fréquence pars 4 (j’ai modifié OPTION) tous les signaux sont bon.
    J’ai réalisé une deuxième teste en utilisant l’interruption du TIMER0 qui avait lieu toutes les 1/5000000s qui incrémentait le port B mais là encore et je m’en doutais, le compteur fonctionne bien mais pas à la bonne fréquence. Là encore je pense que lors d’une interruption, le PIC doit exécuter le remise à 0 du T0IF et en plus le chargement du TNR0 ce qui prend des cycles machine durant les quel l’interruption m’est pas prise en compte. Voici le code :

    #include <htc.h>
    //#include"pic1687x.h" // file of pic16F877A
    __CONFIG(0x3372);


    #include "init.h"


    main()
    {
    Init_PIC();
    while (1)
    {
    }
    }

    /* Fonction d'interruption */
    static void interrupt inter(void)
    {
    if(T0IF) // Ce bit passe à 1 dès un débordement du Timer0
    {
    PORTB ++; // Passage à 1 donc on va traiter l'interruption.
    T0IF=0; // Mise à 0 du Bit
    TMR0 = 0xFF;
    }
    }

    Cette fonction est dans un .h
    /* Initialization of PIC */
    void Init_PIC(void)
    {
    // Valid all peripheral interruptions
    INTCON = 0xE0;

    // Configure TIMER0
    OPTION = 0x08; //0b00001000
    TMR0 = 0; //initialisation at 0

    // Configure input and output of the Port A
    ADCON1=0x06; //0b00000110; //Configuration in Digitalt O/I because default Analog configuration
    TRISA=0x10; //0b00010000; //The bit RA4 selects the mode: 0: scanning, 1: selective
    PORTA=0;
    // Configure input and output of the Port B
    TRISB=0x00; //0b00010000;
    PORTB=0x00;
    // Configure input and output of the Port C use for SPI
    TRISC=0x10; //0b0O010000;
    PORTC=0xFF;
    }

    Je voudrai savoir s’il y a d’autre moyen pour réaliser mon conteur ou s’il faut que je choisisse un PIC plus rapide? Je vous remercie par avance de vo réponses. A bientôt, Yo.

    -----

  2. #2
    ftorama

    Re : compteur 8 bits 5MHz avec le PIC16F877A en utilisant le TIMER0

    Même avec un microcontrôleur "rapide", c'est tendu.

    Ce que tu peux faire, c'est faire générer les deux sorties de poids faibles directement par des timers, le premier à F, le second à F/2

    Pour les bits suivants, tu utilises ton interruption. Normalement tu devrais pouvoir faire tes 5 MHz ainsi, mais avec des bits répartis sur différents ports
    Quand un homme a faim, mieux vaut lui aprendre à pecher que de lui donner un poisson.

  3. #3
    invited4a0c839

    Re : compteur 8 bits 5MHz avec le PIC16F877A en utilisant le TIMER0

    Bonsoir et merci de m’avoir répondu rapidement.
    En fait c’est ce que voudrai faire : sortir la valeur tu timer sur un des ports mais il me semble que c’est ce que j’ai fait en faisant PORTB = TMR0 mais dans mon exemple cette instruction est dans la main se qui n’est pas acceptable donc ma question est comment affecter directement le timer0 à un des ports sans passer par le main et à la bonne fréquence. Je me doute que cela va être dur car ça commence à faire haut en fréquence. Merci, Yo.

Discussions similaires

  1. Compteur décompteur 8 bits
    Par Albatour37 dans le forum Électronique
    Réponses: 7
    Dernier message: 29/03/2010, 19h05
  2. compteur binaire 20 bits
    Par thomasalbert1993 dans le forum Électronique
    Réponses: 10
    Dernier message: 08/02/2008, 07h25
  3. compteur 2 bits
    Par invite06f22352 dans le forum Électronique
    Réponses: 14
    Dernier message: 21/02/2007, 16h43
  4. Compteur 16 bits
    Par KHEOPS1982 dans le forum Électronique
    Réponses: 6
    Dernier message: 20/03/2006, 19h11
  5. Convertir 12 bits série en 7 bits paralléle avec un HC11 ?
    Par invite0ee134f7 dans le forum Électronique
    Réponses: 2
    Dernier message: 03/03/2005, 08h39
Découvrez nos comparatifs produits sur l'informatique et les technologies.