Salut a tous,
Récemment je bosse sur un système d'alarme sur base d'un PIC 16F628A.
Pendant ma programmation j'ai remarqué une lacune avec la fonction delay.J'utilise comme IDE MikroC.
Voici un petit bout de code pour vous montré :
Code:if(variable == 1) { BUZER = 1; delay_ms(50); // délais sensé être de 50ms BUZER = 0; delay_ms(50); // délais sensé être de 50ms }
Bon,tout d'abord je tient a dire que j'utilise le PIC avec son OSC interne régler a 4MHz grâce au registre PCON prévus a cette effet.
L'incrémentation de la variable se fait par l'interruption INT/RB0.Celas donne donc :
Code:void interrupt() { if (INTCON.INTF == 1) // si le débordement du flag a lieu,alors... { INTCON.INTF = 0; // remise a 0 du flag variable++; // incrémentation de "variable" } }
Voila,maintenant ce qui se passe avec le delay c'est que lui dure 1 seconde quand je tape 50 pour avoir 50 ms.Donc en gros mon buzer sonne a intervalle de 1 seconde allumé et 1 seconde éteint.
Plutôt bizarre je trouve car le délais est précisé en (ms) et j'ai noté 50.LE timing devrais être de 50 ms.
Moi qui cherchais a la base un delay de 125ms je suis obligé de tapé delay_ms(2).Alors celas fonctionne parfaitement mais celas me semble pas logique.
Celas pourrais t-il venir de l'oscillateur interne?
Cordialement.
-----