IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Compteur de font montant ATMEGA16


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 10
    Par défaut Compteur de font montant ATMEGA16
    Bonjour, dans le cadre d'un PPE sur l'anémomètre, nous sommes amenés à compter le nombre de fronts montants dans un temps donné.

    Nous branchons un systèmes nous permettant d'avoir un signal carré, et nous voudrions savoir comment obtenir le nombre de fronts montants pendant un temps donné.

    Nous nous sommes inspirés d'un autre programme que nous avons trouvés, où il fallait utiliser les interruptions et un timer.
    A chaque font montant on compte incrémenter un compteur. Mais nous ne savons pas comment régler le TIMER0.

    Voilà je vous demande votre aide et vous remercie d'avance.
    Si vous avez des questions je répondrais volontiers pour vous éclairer, merci d'avance.

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    La réponse se trouve dans la documentation du micro-contrôleur, au chapitre sur les timers. Ton timer doit en toute logique posséder un mode où il génère une interruption chaque fois qu'un front montant a lieu sur une patte donnée. C'est possible qu'en anglais, la documentation parle d'input capture, et dans ton cas sur rising edge. La documentation t'expliquera comment choisir les valeurs opportunes des registres de configuration des timers pour avoir ce comportement. La suite se passe effectivement dans la routine d'interruption, où tu incrémentes un compteur à chaque fois que la routine s'exécute.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 10
    Par défaut
    Merci de ta réponse

    Oui je pense que je devrai trouver la documentation de l'ATMEGA16 sur internet, mais y aura-t-il marqué également comment choisir le temps durant lequel on fait l'acquisition ?

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    De rien

    Tu trouveras la documentation sur le site du constructeur directement.


    Je ne comprend pas ta question par contre... :
    mais y aura-t-il marqué également comment choisir le temps durant lequel on fait l'acquisition ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 10
    Par défaut
    Ce que j'entend par là, c'est que je voudrais régler le temps durant lequel on compte les fronts montant.

    C'est à dire, par exmeple, qui si on obtient 30 fronts montants, il faudrait savoir si ces 30 fronts montants on été comptés sur 4s, 5s, 200µs, 1200 ms ??!!

    Tu vois ce que je veux dire ?

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Oui, je vois.

    La première technique qui me vient à l'esprit est de déclencher un timer quand survient la première interruption de détection de front. Quand tu obtiens 30 fronts, tu regardes la valeur de ce timer à ce moment là et tu peux en déduire le temps nécessaire pour obtenir tes 30 fronts.

    Tu auras un soucis si le temps est trop long pour obtenir les 30 fronts. Dans ce cas, il faut rajouter une nouvelle interruption qui se déclenchera à chaque overflow du timer. Une variable s'incrémente pour indiquer le nombre d'overflows.

    Si par exemple ton timer déborde toutes les 5 secondes, tu pourras savoir avec ta variable * 5s + temps en cours dans le timer quelle aura été la durée totale.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 10
    Par défaut
    Oui je vois,

    Mais je voulais plutôt savoir, non pas combien de temps il faut mettre pour qu'il y ait un certains nombre de fronts montants, mais plutôt combien de fonts montants on été comptés durant un temps fixé.

    En fait j'ai besoin de fixer la valeur de la fenêtre de mesure, et de savoir combien de front montants on été comptés durant le temps t qui défini la fenêtre de mesure.

    Cependant, je ne sais pas comment régler ce temps t.

  8. #8
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    ......... au lieu de t'arrêter quand 30 fronts ont été comptés, tu t'arrêtes quand le compteur de temps atteint la valeur que tu souhaites. Ca ne me parait pas super compliqué comme principe de fonctionnement, non ?

    Pour ce qui est du réglage du temps t, la réponse te sera donnée par la documentation du µC que tu utilises. Il est même possible que le site du constructeur propose un code exemple pour déclencher une interruption à intervalle régulier.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Février 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 10
    Par défaut
    D'accord, mais j'ai regardé sur la documentation de l'atmega16, déjà c'est ne anglais , et ensuite je n'ai pas vraiment trouvé de choses sur son fonctionnement, mais seulement sur ses différents PORTS, et les différentes catégories de atmega16.

    Je vais encore chercher, mais merci quand même.

    Sinon, je pense utiliser une source externe pour configurer mon timer0.
    J'ai lu dans un cours, que si je mettait mon signal carré 0-5V sur le timer, après je pourrais ainsi compter les fonts montants du timer. Ça me semble déjà plus raisonnable

  10. #10
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par cheikh35 Voir le message
    Oui je vois,

    Mais je voulais plutôt savoir, non pas combien de temps il faut mettre pour qu'il y ait un certains nombre de fronts montants, mais plutôt combien de fonts montants on été comptés durant un temps fixé.

    En fait j'ai besoin de fixer la valeur de la fenêtre de mesure, et de savoir combien de front montants on été comptés durant le temps t qui défini la fenêtre de mesure.

    Cependant, je ne sais pas comment régler ce temps t.
    euh...

    Que cherches-tu ?

    Comment avoir une varaible dont tu fixes la valeur en l'entrant dans le prog ? en la mettant en paramètre de lancement ? Comment calculer une moyenne ? Comment calculer un delta de temps ?

    D'après ce que je comprend tu es capable de trouver un front.

    Que te manque-t-il ?

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Février 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 10
    Par défaut
    Bah en fait, je veux fixer la variable de temps, et ça je ne sais pas comment le faire. Je ne sais pas quel registre utiliser pour configurer le temps durant lequel je compterai le nombre de fronts montants.

    Sinon, oui je pense savoir comment détecter un front montant de l’horloge, grâce à des registres tels que le TCNT0 et OCR0. Je met une valeur pour OCR0, et je compare si TCNT0=OCR0 (sachant que TCNT0 est lié au timer0). Puis si c'est le cas, j'active l’interruption, et ainsi de suite jusqu'à la fin du temps de la fenêtre de mesure. Ensuite je relève le nombre compté, et je l’exploité, et je remet le timer0 à 0 et c'est reparti.

  12. #12
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par cheikh35 Voir le message
    Bah en fait, je veux fixer la variable de temps, et ça je ne sais pas comment le faire. Je ne sais pas quel registre utiliser pour configurer le temps durant lequel je compterai le nombre de fronts montants.
    "Ce qui se conçoit bien s'énonce clairement et les mots pour le dire viennent aisément"

    Je vais me répéter :

    • Tu cherches quelle est la valeur du temps qu'il te faut pour un certain nombre de fronts pour ce controleur ?
    • Tu cherches comment mesurer le temps passé dans une partie d'un programme, pour pouvoir en déduire une moyenne ?
    • Tu cherches quoi ?

  13. #13
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par cheikh35 Voir le message
    D'accord, mais j'ai regardé sur la documentation de l'atmega16, déjà c'est ne anglais , et ensuite je n'ai pas vraiment trouvé de choses sur son fonctionnement, mais seulement sur ses différents PORTS, et les différentes catégories de atmega16.

    Je vais encore chercher, mais merci quand même.

    Sinon, je pense utiliser une source externe pour configurer mon timer0.
    J'ai lu dans un cours, que si je mettait mon signal carré 0-5V sur le timer, après je pourrais ainsi compter les fonts montants du timer. Ça me semble déjà plus raisonnable
    La documentation est anglais. La documentation de tous les micro-contrôleurs de toutes les marques que j'ai utilisé n'était disponible que en anglais. Il va falloir t'y faire. Es-tu sûr d'avoir pris la documentation complète ? Quelle est la référence exacte de ton µC ?

    L'histoire de la source externe me parait bien compliqué pour pas grand chose ; ou alors tu t'exprimes très mal ; ou alors tu n'as pas bien compris ton cours.

    Comme l'a dit souviron, ce que tu cherches à faire n'est clair du tout !

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Février 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 10
    Par défaut
    Ok, je m'excuse si j'ai pu paraitre confus dans mes propos.

    Donc je reprend tout depuis le début.

    Je dispose d'un signal "carré" 0 ou 5V.
    1)--> En utilisant une "External clock source on T0 pin", Je configure le timer pour que son horloge se cale parfaitement à mon signal.
    2)--> Puis je règle le temps de mesure sur (par exemple) 0,3 s
    3)--> Ensuite je compte les fronts montants de l'horloge du timer0 durant 0.3s
    4)--> Je sauvegarde ce nombre dans une variable.

    Voilà, j'espère avoir été un peu plus clair.
    C'est donc le 2) que je n'arrive pas à configurer.

  15. #15
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Pour résumé en une phrase ton objectif : tu souhaites connaitre la fréquence d'un signal carré ?

  16. #16
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par cheikh35 Voir le message
    2)--> Puis je règle le temps de mesure sur (par exemple) 0,3 s
    ..
    C'est donc le 2) que je n'arrive pas à configurer.
    C'est à dire ?

    Par le bouton sur le micro ? sur le voltmètre ou autre ? ou dans un programme ?


    Comment tu le règles sur 0.3 ?

    Que voudrais-tu pouvoir faire ???

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Février 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 10
    Par défaut
    Je pense que j’ai déjà expliqué cela souviron, ou peut être n'as-tu pas trop d'expérience dans ces choses là.

    Je veux, par programmation, grâce à des registres des ordres, etc. Je veux régler la fenêtre de mesure. Sachant que le microcontroleur est relié à un ordinateur et où j'utilise CodeVisionAVR pour compiler et envoyer le programme dans le micro-controleur.
    Par exemple cela pourrait donner :

    //Configuration de la fenêtre de mesure

    Fenetrevalue = 300ms; ---> C'est cet ordre là que je cherche, comment s'écrit-il, quel est l'ordre en question, faut(il utiliser une variable, des registres etc.

    Si tu ne sais pas ce n'est pas grave, je chercherai dans d'autres programmes existants et j'essayerai de trouver par moi même.

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Février 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 10
    Par défaut
    (Dsl double post)

    Sinon je pensai également pouvoir utiliser les interruptions externes. J'utilise l'interruption INT0, et je branche mon signal carré pour qu'il soit avec l'interruption. Puis je programme l'interruption pour quelle s'active lorsqu'elle détecte un front montant. Ensuite j'incrémente à chaque fois une variable. Et une fois le temps imparti écoulé, je récupère le nombre dans la variable et je l'exploite.

    Qu'en dites-vous ?

  19. #19
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    J'en pense que c'est la solution que je t'ai proposée.

  20. #20
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    Salut,

    Citation Envoyé par cheikh35 Voir le message
    Fenetrevalue = 300ms; ---> C'est cet ordre là que je cherche, comment s'écrit-il, quel est l'ordre en question, faut(il utiliser une variable, des registres etc.
    C'est donc la configuration du timer. Tu es obligé de passer par la lecture de la documentation. Les paramètres peuvent être très nombreux, mode de fonctionnement(cyclic, one shot etc...), valeur de rebouclage (8, 10, 12, 16 bits etc...), action déclenchée (levage d'une interruption, commutation d'un bit en sortie etc...), bref... Ce n'est pas du C, c'est la configuration/mise en oeuvre d'un périphérique de micro. Je ne peux que te conseiller de googler avec "timer application note" et la réference de ton micro. Bonne continuation.

    P.S. Au niveau purement "C", les registres de ces périphériques sont déclarés dans un fichier "h", géneralement "reference_du_micro.h" qui est toujours livré avec le compilo.

    A+

    Pfeuh

Discussions similaires

  1. Bloc compteur des fronts montants ou descendants
    Par Noura2013 dans le forum Simulink
    Réponses: 4
    Dernier message: 18/07/2013, 18h55
  2. [JavaScript] Police Numérique digitale sans font(pour compteur par exemple)
    Par SpaceFrog dans le forum Contribuez
    Réponses: 7
    Dernier message: 03/08/2010, 09h55
  3. compteur sur front montant d'un contact sec
    Par boettez dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 28/08/2009, 12h52
  4. comment changer d'attribut de fonte dans un Tlabel?
    Par sb dans le forum Composants VCL
    Réponses: 3
    Dernier message: 21/08/2002, 16h53
  5. TextOut : comment changer de font
    Par Freakazoid dans le forum DirectX
    Réponses: 2
    Dernier message: 15/07/2002, 20h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo