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

Timer0 avec MikroC
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#1 Message par Jérémy » mer. 19 août 2015 17:22

Bonjour,

J'aurais aimé faire des tests avec le timer0 d'un PIC18F45K22, afin de faire un petit tuto . Mais voila dur de faire un tuto quand on y arrive pas .

savez comment lire la valeur du Timer0 ? pour le moment je ne souhaite pas utiliser les interruption de ce timer , juste avoir une réaction quand il atteint une certaine valeur .

J'ai essayé avec "TMR0" ou encore "timer0" et d'autre mais rien ni fait !

Voici mon petit bout de programme qui m’indique une erreur quand j'essaye de le compiler

Code : Tout sélectionner

//#################################       DECLARATION      #########################################

 char compteur = 0;
//#################################        FONCTION       #########################################



//#########################     FONCTION PRINCIPALE ET CONFIGURATION    #################################

void main() {           // ceci contiendra notre programme, c'est la fonction principale(main) et elle est obligatoire.

     ANSELB = 0;             // Met le PORT B en numérique

     PORTB = 0;              // Affecte 0 au PORT B

     TRISB = 0b00000000;     // Place le PORTB en sortie pour afficher les leds

     T0CON = 0b10000111 ;


 //#################################     Boucle infinie    #########################################

 while(1)                 // Ici c'est notre boucle sans fin.
 {
     if ( TMR0 >= 250)
         compteur++;

     if ( compteur >= 200)
        {
         PORTB.B0 = 1;
         compteur = 0;
         delay_ms (200);
        }
     else
         
{
          PORTB.B0 = 0;
         }
     
  
}
 }                        // Fin de notre fonction principale, la boucle est bouclée   
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Timer0 avec MikroC
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#2 Message par Jérémy » jeu. 20 août 2015 11:36

Je perçois une réponse du coté du TMR0L et TMR0H , mais je comprends toujours pas pourquoi je n'arrive pas a utiliser correctement ces valeurs.

Voir page 161 le diagramme du mode 16bit . Je crois comprendre qu’en fait cela va trop vite . Du coup seul l’interruption est utilisable ?
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Timer0 avec MikroC
Pat
Débutant
Débutant
Messages : 43
Enregistré en : juillet 2015

#3 Message par Pat » jeu. 20 août 2015 13:18

Ou est la routine d'interruption et l'initialisation du timer ?
Mettre un delayms en testant TMR0 ça ne va pas.
D'ailleurs quelle est la fréquence du TMR0?

Et le message d'erreur ?

Timer0 avec MikroC
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#4 Message par Jérémy » jeu. 20 août 2015 13:49

Salut Pat,

Merci d'intervenir, car je commence à désespérer de pouvoir faire mon Tuto !

Ou est la routine d'interruption et l'initialisation du timer ?

D'aprés ce que j'ai crus comprendre, l’initialisation se fait avec le Bit_7 du registre T0Con ( Timer0 control ), mis à 1 .

Justement il n'y a pas de routine d’interruption , je souhaite seulement lire la valeur du TMR0 . il est écrit "readable" dans la DS mais pas comment , car cela dépend du compilateur je suppose !. et rien trouver en MikroC

Mettre un delayms en testant TMR0 ça ne va pas.

D'accord je vais essayer sans, c’était pour avoir le temps de voir ma led s'allumée .

D'ailleurs quelle est la fréquence du TMR0?

La fréquence de travail est la même que celle du quartz c'est a dire 8Mhz .
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Timer0 avec MikroC
mazertoc
Passioné
Passioné
Messages : 201
Enregistré en : juillet 2015
Localisation : Auvernha

#5 Message par mazertoc » jeu. 20 août 2015 14:06

Jérémy a écrit :
D'ailleurs quelle est la fréquence du TMR0?

La fréquence de travail est la même que celle du quartz c'est a dire 8Mhz .

TMR0 se lit comme n'importe quel registre, et je crois que sur les 18F il s'appelle TMR0L (8 bit).
Si tu l'incrémentes à partir de la fréquence d'horloge, c'est Fcy (Fosc/4) puis le prédiviseur (2 à 256).
Faut lire les doc !

Timer0 avec MikroC
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#6 Message par Jérémy » jeu. 20 août 2015 14:25

Faut lire les doc !

Oui oui , c'est bien ce que j'ai fais !

Si tu l'incrémentes à partir de la fréquence d'horloge, c'est Fcy (Fosc/4) puis le prédiviseur (2 à 256).

Oui , on a 8Mhz/4 soit 2x106
avec mon registre j'ai mi le presacler à 256 : donc 2x106/256 = 7812 .Si F=1/T on a T=1/F=1/7812=0.000128 soit 128µs

et je crois que sur les 18F il s'appelle TMR0L (8 bit).

Oui c'est bien ce que j'ai cru comprendre aussi , mais pourquoi je n'arrive pas à le lire ? cela va trop vite non ?
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Timer0 avec MikroC
mazertoc
Passioné
Passioné
Messages : 201
Enregistré en : juillet 2015
Localisation : Auvernha

#7 Message par mazertoc » jeu. 20 août 2015 15:00

Je connais pas C, mais 128 µs c'est très long (par rapport à 1 cycle instruction).
Tu utilises un simulateur pour observer TMR0 ? En pas à pas ?

edit
Pourquoi <char compteur> ?

Timer0 avec MikroC
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#8 Message par Jérémy » jeu. 20 août 2015 15:15

Je connais pas C, mais 128 µs c'est très long (par rapport à 1 cycle instruction).

Oui moi aussi , mais si on utilise pas le prescaler on 0.5µs .

Tu utilises un simulateur pour observer TMR0 ? En pas à pas ?

Je ne suis pas encore tout a fait à l'aise avec MikroC et le ICD, mais j'arrive a voir mon TMR0L bouger ; mais les valeurs qu'il me renvoie sont trés grande même en pas à pas .
Pourquoi <char compteur> ?

Je voulais creer une boucle ! pour ralentir la cadence en fait
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Timer0 avec MikroC
mazertoc
Passioné
Passioné
Messages : 201
Enregistré en : juillet 2015
Localisation : Auvernha

#9 Message par mazertoc » jeu. 20 août 2015 16:53

Jérémy a écrit :
Je connais pas C, mais 128 µs c'est très long (par rapport à 1 cycle instruction).

Oui moi aussi , mais si on utilise pas le prescaler on 0.5µs .

Mais là tu l'utilises !

Timer0 avec MikroC
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#10 Message par Jérémy » jeu. 20 août 2015 17:15

Oui c'est exact, c'est pour cela que 128 ųS,me paraissent pas anormale.
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 49 invités