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 ---
Forum général sur le langage C !

Modérateur : Jérémy

Faire clignoter une led TIMER0 PIC16F690 MIKROC
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#11 Message par Jérémy » dim. 15 nov. 2015 14:12

Ha non le bit 5 doit etre à 1 pas à 0 pardon ca donne Intcon=0xE7


0xC7 plutôt non ?

Quelle est la fréquence de ton OSC ?
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Faire clignoter une led TIMER0 PIC16F690 MIKROC
Subzero64170
Avatar de l’utilisateur
Débutant
Débutant
Messages : 51
Âge : 37
Enregistré en : octobre 2015
Localisation : PAU

#12 Message par Subzero64170 » dim. 15 nov. 2015 15:21

Mon quartz est de 20Mhz, je met le bit 5 a 1 ca me donne intcon=0b1110 0111=0xE7.
“L'imagination est plus importante que le savoir.” A.Einstein

Faire clignoter une led TIMER0 PIC16F690 MIKROC
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#13 Message par Jérémy » dim. 15 nov. 2015 17:08

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
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Faire clignoter une led TIMER0 PIC16F690 MIKROC
Subzero64170
Avatar de l’utilisateur
Débutant
Débutant
Messages : 51
Âge : 37
Enregistré en : octobre 2015
Localisation : PAU

#14 Message par Subzero64170 » dim. 15 nov. 2015 21:13

Ok, je vais essayer ça demain.Au pire j’achèterai un quartz de 8 Mhz si c'est ça le problème...
“L'imagination est plus importante que le savoir.” A.Einstein

Faire clignoter une led TIMER0 PIC16F690 MIKROC
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#15 Message par Jérémy » dim. 15 nov. 2015 21:29

Non utilise l'interne , sauf si tu as besoin de beaucoup de précision . Ton pic peut tourner à 8Mhz en interne !
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Faire clignoter une led TIMER0 PIC16F690 MIKROC
Subzero64170
Avatar de l’utilisateur
Débutant
Débutant
Messages : 51
Âge : 37
Enregistré en : octobre 2015
Localisation : PAU

#16 Message par Subzero64170 » lun. 16 nov. 2015 22:06

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

     
}


  }
“L'imagination est plus importante que le savoir.” A.Einstein

Faire clignoter une led TIMER0 PIC16F690 MIKROC
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#17 Message par Jérémy » lun. 16 nov. 2015 22:37

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 ! :D

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
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Faire clignoter une led TIMER0 PIC16F690 MIKROC
Subzero64170
Avatar de l’utilisateur
Débutant
Débutant
Messages : 51
Âge : 37
Enregistré en : octobre 2015
Localisation : PAU

#18 Message par Subzero64170 » lun. 16 nov. 2015 22:49

Voila ce que dis la doc du 16F690 :
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
“L'imagination est plus importante que le savoir.” A.Einstein

Faire clignoter une led TIMER0 PIC16F690 MIKROC
Subzero64170
Avatar de l’utilisateur
Débutant
Débutant
Messages : 51
Âge : 37
Enregistré en : octobre 2015
Localisation : PAU

#19 Message par Subzero64170 » lun. 16 nov. 2015 22:50

J'ai mis deux condos de 22pf oui.E tj'ai tout ressouder au plus prés oui.
“L'imagination est plus importante que le savoir.” A.Einstein

Faire clignoter une led TIMER0 PIC16F690 MIKROC
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#20 Message par Jérémy » lun. 16 nov. 2015 22:58

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 !
C'est en faisant des erreurs, que l'on apprend le mieux !!!


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 39 invités