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.
-----