Bonjour, cliquez-ici pour vous inscrire et participer au forum.
  • Login:



+ Répondre à la discussion
Page 3 sur 3 PremièrePremière 3
Affichage des résultats 31 à 34 sur 34

Utilisation d'un codeur incrémental

  1. extremgear

    Date d'inscription
    mai 2013
    Messages
    156

    Re : Utilisation d'un codeur incrémental

    Merci .
    je vais faire des essais , il faut que je termine le programme.

    -----

     


    • Publicité



  2. extremgear

    Date d'inscription
    mai 2013
    Messages
    156

    Re : Utilisation d'un codeur incrémental

    Je remercie l'auteur du post et ces participants , ça fonctionne parfaitement avec le code ci dessous ,mais j'ai du modifier car je pense qu'il y a une erreur , dans le principe c'est bon , mais par exemple dans le case 3 l'état 00 ou 11 est impossible et dans ce le programme incrémente/décrément à l'infini, je pense que l'auteur du post a inversé le cas 2 et 3 :

    Code:
    #define SIG_A PIND.2
    #define SIG_B PIND.3
    #define INC_MAX 100
    #define INC_MIN 0
    /* Les lignes précédentes sont à ajuster 
       en fonction du codeur et du µcontroleur.
       On peut par exemple les placer dans un fichier .h à part.
     */
    #define INCREMENTER \
        if (var<INC_MAX) var++;\
        var_ab=(SIG_A<<1)+SIG_B;
        
    #define DECREMENTER \
        if (var>INC_MIN) var--;\
        var_ab=(SIG_A<<1)+SIG_B;
       
    unsigned var=0; //variables globales
     
    interrupt[14] void gray() // interruption sur compteur (toutes les 1,6ms)
    {
            static unsigned char var_ab=0;
            switch (var_ab){
                case 0:if(SIG_A==0 && SIG_B==1) INCREMENTER 
                       else if(SIG_A==1 && SIG_B==0) DECREMENTER
                       break;
                case 1:if(SIG_A==1 && SIG_B==1) INCREMENTER
                       else if(SIG_A==0 && SIG_B==0) DECREMENTER
                       break;
                case 2:if(SIG_A==1 && SIG_B==0) INCREMENTER // ne fonctionne pas 
                       else if(SIG_A==0 && SIG_B==1) DECREMENTER
                       break;
                case 3:if(SIG_A==0 && SIG_B==0) INCREMENTER
                       else if(SIG_A==1 && SIG_B==1) DECREMENTER      
    
            }

    correction :

    Code:
    #define SIG_A PIND.2
    #define SIG_B PIND.3
    #define INC_MAX 100
    #define INC_MIN 0
    /* Les lignes précédentes sont à ajuster 
       en fonction du codeur et du µcontroleur.
       On peut par exemple les placer dans un fichier .h à part.
     */
    #define INCREMENTER \
        if (var<INC_MAX) var++;\
        var_ab=(SIG_A<<1)+SIG_B;
        
    #define DECREMENTER \
        if (var>INC_MIN) var--;\
        var_ab=(SIG_A<<1)+SIG_B;
       
    unsigned var=0; //variables globales
     
    interrupt[14] void gray() // interruption sur compteur (toutes les 1,6ms)
    {
            static unsigned char var_ab=0;
            switch (var_ab){
                case 0:if(SIG_A==0 && SIG_B==1) INCREMENTER 
                       else if(SIG_A==1 && SIG_B==0) DECREMENTER
                       break;
                case 1:if(SIG_A==1 && SIG_B==1) INCREMENTER
                       else if(SIG_A==0 && SIG_B==0) DECREMENTER
                       break;
                case 2:if(SIG_A==0 && SIG_B==0) INCREMENTER
                       else if(SIG_A==1 && SIG_B==1) DECREMENTER
                       break;
                case 3:if(SIG_A==1 && SIG_B==0) INCREMENTER
                       else if(SIG_A==0 && SIG_B==1) DECREMENTER      
            }
     

  3. DAUDET78

    Date d'inscription
    septembre 2006
    Localisation
    Ile de France
    Âge
    74
    Messages
    62 696

    Re : Utilisation d'un codeur incrémental

    Merci de ton retour ...... coté soft , je suis incapable de donner un avis !
    Bonjour et au revoir .... a remettre en début et en fin de réponse
     

  4. Eroos

    Date d'inscription
    mars 2017
    Localisation
    Brest
    Âge
    20
    Messages
    39

    Question Re : Utilisation d'un codeur incrémental

    Bonjour,

    Discussion très intéressante et qui peut servir de base pour ce à qui veulent partir dans des projets comportant des roues codeuses !
    J'avais néanmoins une question, j'utilise ce codeur incrémental :
    http://www.walkerindustrial.com/BDK-...4k100-l5-5.htm

    Et je compte utiliser ce code pour incrémenter une variable à chaque impulsion de mon codeur :
    Code:
    #include <stdio.h>
    #include <wiringPi.h>
    int main(void)
    {
    int switchPin=0;
    if(wiringPiSetup()==-1)
    	  {return 0;}
    //le port GPIO du bouton est configuré en lecture
    pinMode(switchPin,INPUT);
    int button=0;
    while(1)
    {
      //on lit la valeur de la broche GPIO
      button=digitalRead(switchPin);
      if(button==0)//Si un appui sur le bouton est détecté
      {
       //on affiche un message
       printf("button pressed!\n");
       //cette boucle permet de gerer un appui continu
       while(button==0)
    	{
    			//on relit la valeur à chaque fois
    			button=digitalRead(switchPin);
    			delay(20);//et on attend 20ms
    	}
      }
      delay(20);//on attend 20ms entre chaque lecture.
    }
      return 0;
    }
    Celui-ci va venir lire l'état de mes GPIO de ma raspberry pi où sont branché mes signaux A, B & N (Top zero), ce qui fait que je peux réaliser et ajouter à mon code la partie suivante que vous avez partagée :
    Citation Envoyé par DAUDET78
    if(var_a==0 && var_b==0)
    {

    if(PIND.2==0 && PIND.3==1)var_plus(); //fonction incrémenter
    else if(PIND.2==1 && PIND.3==0)var_moins(); //fonction décrémenter
    }
    else if(var_a==0 && var_b==1)
    {
    if(PIND.2==1 && PIND.3==1)var_plus();
    else if(PIND.2==0 && PIND.3==0)var_moins();
    }
    else if(var_a==1 && var_b==1)
    {
    if(PIND.2==1 && PIND.3==0)var_plus();
    else if(PIND.2==0 && PIND.3==1)var_moins();
    }
    else if(var_a==1 && var_b==0)
    {
    if(PIND.2==0 && PIND.3==0)var_plus();
    else if(PIND.2==1 && PIND.3==1)var_moins();
    }
    Mais est-ce-que dans le code que j'ai partagé le "delay" sert à avoir une référence de temps pour pouvoir connaître le nombre d'impulsions par seconde et récupérer une vitesse correspondante ?
    J'ai quelques incompréhensions qui persistent malgré tout mais je compte bien réussir à lire mes données !

    Merci d'avance,
    Cordialement,
    Vincent. D
     


    • Publicité







Sur le même thème :





 

Discussions similaires

  1. Codeur incrémental
    Par le fondateur du cosmos dans le forum Électronique
    Réponses: 9
    Dernier message: 16/12/2011, 13h30
  2. Codeur Incrémental
    Par petitnul12 dans le forum Électronique
    Réponses: 16
    Dernier message: 27/10/2010, 20h21
  3. Codeur incrémental - 16f628
    Par Gilgari dans le forum Électronique
    Réponses: 0
    Dernier message: 12/10/2010, 07h39
  4. Codeur incrémental?
    Par méta_flo dans le forum Électronique
    Réponses: 1
    Dernier message: 20/04/2007, 20h51
  5. Codeur Incremental
    Par 1953 dans le forum Électronique
    Réponses: 4
    Dernier message: 26/02/2006, 12h55