Bienvenue aux nouveaux arrivants sur FantasPic !
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
Modérateur : Jérémy
Faire clignoter une led TIMER0 PIC16F690 MIKROC
Faire clignoter une led TIMER0 PIC16F690 MIKROC
- Subzero64170
Débutant- Messages : 51
- Âge : 37
- Enregistré en : octobre 2015
- Localisation : PAU
Faire clignoter une led TIMER0 PIC16F690 MIKROC
-
Jérémy
Administrateur du site- Messages : 2722
- Âge : 44
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
je met le bit 5 a 1 ca me donne intcon=0b1110 0111=0xE7.
Oui tu as raison , je m'est gouré !
Par contre un quartz de 20 MHZ ? je pense que le problème vient d'ici .
Peut tu passer avec l'osc interne ( enleve ton quartz) et une vitesse de 8MHZ pour voir .
A 20Mhz j'ai un doute sur ton timing, surtout avec un compteur de 8 bit ; ça va trop vite à mon avis
Faire clignoter une led TIMER0 PIC16F690 MIKROC
- Subzero64170
Débutant- Messages : 51
- Âge : 37
- Enregistré en : octobre 2015
- Localisation : PAU
Faire clignoter une led TIMER0 PIC16F690 MIKROC
Faire clignoter une led TIMER0 PIC16F690 MIKROC
- Subzero64170
Débutant- Messages : 51
- Âge : 37
- Enregistré en : octobre 2015
- Localisation : PAU
Salut les gars,
Eureka, ce quartz de 20Mhz est vraiment une source à problème, bien vu Jeremy et Merci Paulfjujo.J'ai configurer le registre OSCCON pour utiliser le 8Mz interne et j'ai du coup remis le bit5 de OPTION_REG à 0 (oscilateur interne) ce qui donne OPTION_REG=0xC7.J'ai aussi re-calculer maboucle de comptage pour avoir 1s avec la led qui clignote.Voila mon code si ça peut aider Au faite pourquoi le 20MHz pose problème?A quel moment le pic n'arrive t'il pas à suivre? étant donné que le pic 16F690 peut fonctionner avec un quartz de 20MHz en externe d'aprés le constructeur
///////////////////////////////////////////////////////////////////////////////////////////////
-PIC 16F690
-Quartz = 8 MHz
-une instruction 4 cycles
Donc je peux realiser 8Mhz/4=2 Mips.
Mon timer va incrementer toute les (1/2000000=0.5us)toute les 0,5 us.
Utilisation du prédiviseur
Je prend un prédiviseur de 256 soit : 2MIPS/256=7812.5 instructions par secondes
A présent Mon timer va incrementer toute les (1/7812.5=51.2us)toute les 128 us.
Pour un compteur de 256 :
Mon compteur étant de 256 pour aller de 0 à 255 il va faloir : 256 (incrémentations) x 128 us=32768 us.
Compteur de 1 seconde :
Je veux allumer une led toutes les secondes donc je dois incrémenter une vriable à chaque fois que le flag se lève à savoir toutes les 32768 us.
Combien de fois le flag devra t-il selever avant que a led ne s'allume?Reponse : 1/32768us=30.52.Donc le flag devra se lever environ 31 fois avant que ma Led ne s'allume.
Eureka, ce quartz de 20Mhz est vraiment une source à problème, bien vu Jeremy et Merci Paulfjujo.J'ai configurer le registre OSCCON pour utiliser le 8Mz interne et j'ai du coup remis le bit5 de OPTION_REG à 0 (oscilateur interne) ce qui donne OPTION_REG=0xC7.J'ai aussi re-calculer maboucle de comptage pour avoir 1s avec la led qui clignote.Voila mon code si ça peut aider Au faite pourquoi le 20MHz pose problème?A quel moment le pic n'arrive t'il pas à suivre? étant donné que le pic 16F690 peut fonctionner avec un quartz de 20MHz en externe d'aprés le constructeur
///////////////////////////////////////////////////////////////////////////////////////////////
-PIC 16F690
-Quartz = 8 MHz
-une instruction 4 cycles
Donc je peux realiser 8Mhz/4=2 Mips.
Mon timer va incrementer toute les (1/2000000=0.5us)toute les 0,5 us.
Utilisation du prédiviseur
Je prend un prédiviseur de 256 soit : 2MIPS/256=7812.5 instructions par secondes
A présent Mon timer va incrementer toute les (1/7812.5=51.2us)toute les 128 us.
Pour un compteur de 256 :
Mon compteur étant de 256 pour aller de 0 à 255 il va faloir : 256 (incrémentations) x 128 us=32768 us.
Compteur de 1 seconde :
Je veux allumer une led toutes les secondes donc je dois incrémenter une vriable à chaque fois que le flag se lève à savoir toutes les 32768 us.
Combien de fois le flag devra t-il selever avant que a led ne s'allume?Reponse : 1/32768us=30.52.Donc le flag devra se lever environ 31 fois avant que ma Led ne s'allume.
Code : Tout sélectionner
sbit Led at PORTC.B0;
sbit Led_direction at TRISC.B0;
unsigned int compteur;
////////////////////Prog D'interuption//////////////////////
void interrupt ()
{
if (INTCON.T0IF==1) //je teste si mon flag d'interuption est levé.
{
//Led=1;
compteur++; //a chaque fois que mon flag est levé j'incrémente la variable X
}
INTCON.T0IF=0; //je remet le flag à 0 pur pouvoir incrémenter x une nouvelle fois
}
//////////////// PROG PRINCIPAL/////////////////
void main()
{
ANSEL=0; // on n'utilise pas les voies analogiques
ANSELH=0;
/*ANSEL = 0b00000001;
ANSELH = 0b00000001;*/
TMR0=0; //j'initialise la valeur de mon Compteur à 0
compteur=0;
OPTION_REG=0xC7;// 0xE7 le bit 5 est à 1 pour utiliser l'horloge externe //0xC7 le bit 5 est à 0 pour utiliser l'horloge externe
INTCON=0xA0;
OSCCON=0b01110110;
// test preliminaire
Led_direction=0;
Led=1;
Delay_ms(5000); // on peut chronometrer la duree pour verifier si FOSC est bien OK
Led=0;
while(1)
{
if(compteur>=31) //si j'atteind 76 je réalise une tempo de 1s
{
Led=~Led; //je peux allumer ma led.
compteur=0; //je remet X à 0 car j'ai atteind les 1s je peux ainsi recommencer.
}
}
}
Faire clignoter une led TIMER0 PIC16F690 MIKROC
-
Jérémy
Administrateur du site- Messages : 2722
- Âge : 44
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Je suis ravie que tu ai résolu ton problème. j’espère que le forum à répondu à tes attentes, et que tu en fera une bonne PUB !
L'histoire du 0xC7, maintenant que tu le dis je comprends pourquoi je t'avais indiqué ceci , car j'avais zappé que tu utilisais un quartz externe.
Je te propose en guise de compréhension de détermine la valeur a laquelle tu devrais initialiser ton compteur lors de la première boucle pour te rapproché un peu plus de la seconde exacte !. car la en l'état tu as 15ms de trop .... A toi de jouer !
Je suis novice dans la prog , mais j'ai pas trouvé ( ok j'ai pas cherché longtemps je l'avoue) , ou tu vois que le PIC peut accepter un quartz de 20Mhz , pourrais tu m'indiquer la page please , pour ma culture personnel ?
PS : tu as bien mis les condo de découplage autour du quartz , et le quartz le plus prêt possible des PIN du PIC
L'histoire du 0xC7, maintenant que tu le dis je comprends pourquoi je t'avais indiqué ceci , car j'avais zappé que tu utilisais un quartz externe.
Je te propose en guise de compréhension de détermine la valeur a laquelle tu devrais initialiser ton compteur lors de la première boucle pour te rapproché un peu plus de la seconde exacte !. car la en l'état tu as 15ms de trop .... A toi de jouer !
Je suis novice dans la prog , mais j'ai pas trouvé ( ok j'ai pas cherché longtemps je l'avoue) , ou tu vois que le PIC peut accepter un quartz de 20Mhz , pourrais tu m'indiquer la page please , pour ma culture personnel ?
PS : tu as bien mis les condo de découplage autour du quartz , et le quartz le plus prêt possible des PIN du PIC
Faire clignoter une led TIMER0 PIC16F690 MIKROC
- Subzero64170
Débutant- Messages : 51
- Âge : 37
- Enregistré en : octobre 2015
- Localisation : PAU
Faire clignoter une led TIMER0 PIC16F690 MIKROC
- Subzero64170
Débutant- Messages : 51
- Âge : 37
- Enregistré en : octobre 2015
- Localisation : PAU
Faire clignoter une led TIMER0 PIC16F690 MIKROC
-
Jérémy
Administrateur du site- Messages : 2722
- Âge : 44
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
J'ai mis deux condos de 22pf oui.E tj'ai tout ressouder au plus prés oui.
Parfait !.
Pour le quartz , je suis pas certain qu'il indique que tu peut mettre un quartz de 20Mhz . Je suis pas assez calé pour être sur de moi, attendons l'avis de quelqu'un qui s'y connait mieux !
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 27 invités