[Numérique] Encodeur numérique rotatif sur Teensy 4.1
Répondre à la discussion
Affichage des résultats 1 à 12 sur 12

Encodeur numérique rotatif sur Teensy 4.1



  1. #1
    da23real

    Encodeur numérique rotatif sur Teensy 4.1


    ------

    Bonjour,

    Ayant réussi à faire un séquenceur midi stable sur Teensy 4.1 je me lance dans le projet de conception d'un appareil trés complet (100% assisté par IA pour la création)
    La base du fonctionnement : au moins 16 encodeurs rotatifs pour les 16 pas de la mesure pour pouvoir y régler tout un tas de paramètres: vélocité, longueur, hauteur, et autres infos CC.
    Plus tard dans l'idéal plusieurs lignes de 16 ainsi que d'autres encodeurs rotatifs ailleurs, pour avoir le moins de menus et triple fonctions cachés
    L'idée étant que cet outils complet ultra personnalisé me permet de me passer de tout un tas d'autres appareils moins efficaces dans ce que je veux faire (et bien plus chers). Avec aussi 8 sorties midi et plusieurs écrans OLED voir tactile

    Mais là si j'arrivais bien à gérer les potards analogiques direct sur teensy (grace à un menu de paramètres sensibilité/smoothing notamment). Je n'arrive à rien avec ces encodeurs numériques.

    Enfin disons qu'avec un seul encodeur direct sur Teensy j'arrive à avoir les 3 signaux UP DOWN CLK.
    Mais ensuite pour pouvoir en brancher beaucoup GPT me conseille d'utiliser des 74HC165
    Donc déjà est-ce que 74HC165 semble le bon choix ??? Et si oui y a t-il des qualités douteuses ? Ou des version différents. Car là après des heures de test il a semblé que la 1ere puce testé ne donnait rien sur pin11 alors qu'une autre oui
    Et là je passe par des journées de branchements tests sur breadboard selon les directives de GPT sans savoir si c'est vraiment la bonne direction.
    Du coup avant de continuer j'aurais aimé savoir si vous avez un avis là dessus (j'ai rien trouvé à mon niveau sur internet)

    Voilà merci
    Je montre le code de test de l'encodeur

    Code:
    const int PIN_PL   = 5;   // 74HC165 pin 1  (SH/LD)
    const int PIN_CLK  = 6;   // 74HC165 pin 2  (CLK)
    const int PIN_DATA = 7;   // 74HC165 pin 9  (Q7)
    
    byte lastRaw = 0xFF;
    
    int lastAB1 = 0;
    int lastAB2 = 0;
    int pos1 = 0;
    int pos2 = 0;
    
    int lastSW1 = 1;
    int lastSW2 = 1;
    
    byte read165() {
      byte data = 0;
    
      digitalWrite(PIN_PL, LOW);
      delayMicroseconds(5);
      digitalWrite(PIN_PL, HIGH);
    
      for (int i = 0; i < 8; i++) {
        data <<= 1;
        data |= digitalRead(PIN_DATA);
    
        digitalWrite(PIN_CLK, HIGH);
        delayMicroseconds(5);
        digitalWrite(PIN_CLK, LOW);
      }
    
      return data;
    }
    
    int quadDelta(int oldAB, int newAB) {
      if (oldAB == 0 && newAB == 1) return +1;
      if (oldAB == 1 && newAB == 3) return +1;
      if (oldAB == 3 && newAB == 2) return +1;
      if (oldAB == 2 && newAB == 0) return +1;
    
      if (oldAB == 0 && newAB == 2) return -1;
      if (oldAB == 2 && newAB == 3) return -1;
      if (oldAB == 3 && newAB == 1) return -1;
      if (oldAB == 1 && newAB == 0) return -1;
    
      return 0;
    }
    
    void printRaw8(byte data) {
      for (int i = 7; i >= 0; i--) {
        Serial.print((data >> i) & 1);
      }
    }
    
    void setup() {
      Serial.begin(115200);
    
      pinMode(PIN_PL, OUTPUT);
      pinMode(PIN_CLK, OUTPUT);
      pinMode(PIN_DATA, INPUT);
    
      digitalWrite(PIN_PL, HIGH);
      digitalWrite(PIN_CLK, LOW);
    
      byte raw = read165();
    
      int enc1A  = (raw >> 7) & 1;   // 165 pin 11
      int enc1B  = (raw >> 4) & 1;   // 165 pin 12
      int sw1    = (raw >> 5) & 1;   // 165 pin 13
    
      int enc2A  = (raw >> 4) & 1;   // 165 pin 14
      int enc2B  = (raw >> 3) & 1;   // 165 pin 3
      int sw2    = (raw >> 2) & 1;   // 165 pin 4
    
      lastAB1 = (enc1A << 1) | enc1B;
      lastAB2 = (enc2A << 1) | enc2B;
      lastSW1 = sw1;
      lastSW2 = sw2;
      lastRaw = raw;
    
      Serial.println("Test 2x EC11 via 74HC165");
      Serial.println("E1: A=11 B=12 SW=13");
      Serial.println("E2: A=14 B=3  SW=4");
    }
    
    void loop() {
      byte raw = read165();
    
      int enc1A  = (raw >> 7) & 1;
      int enc1B  = (raw >> 6) & 1;
      int sw1    = (raw >> 5) & 1;
    
      int enc2A  = (raw >> 4) & 1;
      int enc2B  = (raw >> 3) & 1;
      int sw2    = (raw >> 2) & 1;
    
      int ab1 = (enc1A << 1) | enc1B;
      int ab2 = (enc2A << 1) | enc2B;
    
      int d1 = quadDelta(lastAB1, ab1);
      int d2 = quadDelta(lastAB2, ab2);
    
      if (d1 != 0) {
        pos1 += d1;
        Serial.print("E1 ");
        if (d1 > 0) Serial.print("+1");
        else        Serial.print("-1");
        Serial.print("  pos=");
        Serial.print(pos1);
        Serial.print("  RAW=");
        printRaw8(raw);
        Serial.println();
        lastAB1 = ab1;
      } else if (ab1 != lastAB1) {
        lastAB1 = ab1;
      }
    
      if (d2 != 0) {
        pos2 += d2;
        Serial.print("E2 ");
        if (d2 > 0) Serial.print("+1");
        else        Serial.print("-1");
        Serial.print("  pos=");
        Serial.print(pos2);
        Serial.print("  RAW=");
        printRaw8(raw);
        Serial.println();
        lastAB2 = ab2;
      } else if (ab2 != lastAB2) {
        lastAB2 = ab2;
      }
    
      if (sw1 != lastSW1) {
        Serial.print("E1 SW ");
        Serial.println(sw1 == 0 ? "DOWN" : "UP");
        lastSW1 = sw1;
      }
    
      if (sw2 != lastSW2) {
        Serial.print("E2 SW ");
        Serial.println(sw2 == 0 ? "DOWN" : "UP");
        lastSW2 = sw2;
      }
    
      if (raw != lastRaw) {
        lastRaw = raw;
      }
    
      delay(2);
    }

    -----
    J'ai vachement appris grâce à internet. Tout ces livres qu'on trouve dans les poubelles

  2. #2
    Forhorse

    Re : Encodeur numérique rotatif sur Teensy 4.1

    Un registre à décalage pour lire plusieurs encodeurs rotatif ( à quelle fréquence ? relatif ou absolu ? relatif si j'en crois le code donc encore pire...) non mais n'importe quoi...
    Faut arrêter avec l'IA, en l'état actuel des choses c'est juste des machines à raconter des bobards !
    Tout projet flou conduit à une connerie précise !

  3. #3
    da23real

    Re : Encodeur numérique rotatif sur Teensy 4.1

    Bah oui sur le début du projet j'ai eu des impasses mais des sacrés réussites. Et fais en 2 semaines ce qui m'aurait pris des mois entre apprendre à coder et l'électronique.
    Là il y a une nouvelle série de tests simples qui le pousse à dire que le truc sur breadboard est instable. Mais ça serait pas ça ?

    Quel serait le bon choix dans ce cas ?
    J'ai vachement appris grâce à internet. Tout ces livres qu'on trouve dans les poubelles

  4. #4
    da23real

    Re : Encodeur numérique rotatif sur Teensy 4.1

    Après m'avoir fait tout un speech qui soutenait que le 165 est un choix trés pertinent et proposait tout un tas de solutions qu'il considérait moyennes.
    Là je redemande encore une fois en précisant la demande de savoir s'il n'y a pas des kits plug n play et il finit par me proposer ça
    https://www.lextronic.fr/platine-i2c...ce=chatgpt.com
    Exactement ce que je voulais. Donc bon encore une fois avec les IA il faut surtout savoir le demander. Et il a précisé au passage que ces trucs était mieux comparé au 165.... pas bon du tout pour ça car trop pourris de bruit parasite !!!
    J'ai vachement appris grâce à internet. Tout ces livres qu'on trouve dans les poubelles

  5. A voir en vidéo sur Futura
  6. #5
    antek

    Re : Encodeur numérique rotatif sur Teensy 4.1

    Ce n'est ni mieux ni moins bien qu'un 165, ça n'a rien à voir.
    L'électronique c'est comme le violon. Soit on joue juste, soit on joue tzigane . . .

  7. #6
    Pascal071

    Re : Encodeur numérique rotatif sur Teensy 4.1

    bonjour

    j'ai fait un séquencer tout analogique 8 step
    marre d'ajuster les CV notes, et pour disposer de plusieurs programmes pouvant être mis en série.
    je suis passé à l'arduino pour programmer et gérer tout ça:
    donc 2 encodeurs pour le choix du programme, le step, la note (calibrée par 1/2 tons sur 5 octaves).
    la programmation se fait donc step par step.
    Nom : DSC_3020-2.jpg
Affichages : 28
Taille : 99,0 Ko

    pour ton projet tu pourrais te contenter de 3 encodeurs:
    1 pour le programme / step en cours
    1 pour le paramètre
    1 pour la valeur du paramètre
    plus facile à coder que 16 encodeurs !
    Pascal

  8. #7
    Pascal071

    Re : Encodeur numérique rotatif sur Teensy 4.1

    Il y a aussi la possibilité de gérer 16 potentiomètres par un multiplexeur analogique 16 canaux, scruter les 16 canaux et enregistrer le nouveau paramètre à chaque changement.
    c'est un peu le fonctionnement d'un clavier midi qui scrute tous les potentiomètres et affiche la nouvelle valeur sur l'afficheur.
    Pascal

  9. #8
    da23real

    Re : Encodeur numérique rotatif sur Teensy 4.1

    Non pas du tout ça existe déjà et c'est pas ça que je veux.

    Je veux pouvoir sans rentrer dans des menus, de manière trés direct pour 16 notes avoir soit:
    Plusieurs niveaux de zoom. Ligne centrale zoom normal. Au dessus et en dessous en 1/2 mesure, 1/4 mesure. 2 mesure, 4 mesures. Sur Hapax je passe souvent mon temps à zoomer/dézoomer si je veux éditer à la fois des finesses et d'autres trucs plus larges.

    Soit:
    1 ligne 16 vélocité, 1 lignes 16 lenght, 1 ligne 16 gate, etc...

    En tout les cas 16 est le minimum car je veux aussi pouvoir comme avec Yamaha RM1x et son mode groove pouvoir régler des avances et retards sur certains pas. Et que ça soit ensuite appliquer à toutes les mesures d'une ou plusieurs pistes voir du morceaux.

    En fait j'ai actuellement un Squarp Hapax sur lequel il manque à peu près tout sur le plan groove. Tout est synchro et trés orienté évolution mélogique. Moi je suis plus dans des style trés rythmique comme Urban Kiz et là Hapax est à coté de la plaque.
    Les solutions MPC qui sont plus orienté groove ne me vont pas car c'est du sample et moi je veux des effets midi (comme midi delay, ou le pré-roll que j'ai inventé sur mon prototype et me change la vie),
    et beacoup de sortie midi.
    Car là avec Hapax si je fais une enveloppe de kick au début ça va, mais s'il y a d'autres enveloppes ou LFO sur meme sortie midi il commence à y avoir des retards. Et une solution splitter filtre j'ai ça mais le mal est déjà fait en fait.
    Autre truc trés décevant sur Hapax: pas de P.locks (pourtant j'ai réussi à en faire sur mon proto) et pas de sidechain. Enfin j'ai trouvé l'astuce de brancher une sortie CV de la machine sur une entrée pour en faire en multiple mais c'est un peu moyen de devoir faire ça.
    Si Hapax ne fait pas de routings internes c'est que ça peut faire bugger la machine, comme des rolls ultra serrés ou d'autres choses. Mais donc en faisant mon truc moi je me fiche que ça 'puisse" bugger sur un certain usage, je le connais et je l'accepte vu ce que ça m'offre à coté

    Donc meme si ça me coute 200eur de commander ces supports de potards pour en mettre 4X16 lignes ça resteras

    En plus je vois que tu dis
    plus facile à coder que 16 encodeurs !
    Mais je ne code pas, GPT fait tout, je lui dit ce que ça doit faire, je lui demande s'il a compris, j'ajuste les explications au besoin et à la fin j'ai ce que je veux.
    Là le problème c'est qu'il a conseillé les 74HC165 sur la base d'une demande de réduire le nombre de pins utilisés, et il a trouvé des utilisateurs qui faisaient ça mais sur des boutons ON/OFF. Puis ensuite il part du principe que c'est moi qui est choisis ces puces (surtout si autre chat) et va m'aider jusqu'au bout dans ce choix.
    Donc j'ai corrigé mes instructions générales que les choix de materiels viennent souvent de lui, et que meme s'ils vienennt de moi il faut savoir les remettre en question et ne pas s'enfoncer quand ça semble ne pas fonctionner. Proposer d'autres solutions.

    Pour Pascal tu parles de potards analogiques ? J'ai réussi à en brancher 6 direct Teensy et ça fonctionne bien, j'ai pu mettre des paramètres de ne pas les prendre en compte dans un nouveau menu s'ils ne bougent pas franchement mais ça reste l'enfer quand on switch entre 2 modes d'actions du genre 6 paramètres de Roll/6 paramètres globaux.
    Des potards à incrémentations sont mille fois mieux pour ça

    Et l'option controleur midi n'est pas adapté pour ça: à ma connaissance en midi on peut envoyer une valeur brute mais pas +1 ou -1
    Donc voilà c'est pas un choix en l'air le petit prototype que j'ai fait m'a permis de faire des choses que je reve de faire sur mes séquenceurs depuis 20 ans mais que les fabricants semblent considérer comme des gadgets ou trop "niche" pour les implémenter

    Et j'oubliais aussi le mode song des séquenceurs matériels qui est souvent pathétique (tout le monde fait ça sur PC de nos jours). Donc j'ai aussi ma petite idée sur la manière dont je vais faire le mien. A commencer par des automations de songs (sur Hapax c'est sur Pattern)
    Dernière modification par da23real ; Aujourd'hui à 16h22.
    J'ai vachement appris grâce à internet. Tout ces livres qu'on trouve dans les poubelles

  10. #9
    Pascal071

    Re : Encodeur numérique rotatif sur Teensy 4.1

    puisque Chat GPT va tout faire, alors il n'y a plus de problème .
    mais avec le code en #1 et des HC165, tu es mal parti...

    à ma connaissance en midi on peut envoyer une valeur brute mais pas +1 ou -1
    tout à fait, une donnée midi, c'est 0 à 127 + le N°paramètre, canal, etc.
    Dernière modification par Pascal071 ; Aujourd'hui à 17h19.
    Pascal

  11. #10
    jiherve

    Re : Encodeur numérique rotatif sur Teensy 4.1

    bonjour,
    avec des 165 en série on peut lire un grand nombres de switch(j'utilise des 165 pour lire un clavier 88+1 touches) mais il faudra gérer l'anti-rebonds soit par hard soit par soft(et là l'assembleur c'est mieux) , le kit Adafruit semble prendre en compte l'anti-rebonds mais est il possible d'en placer 4 en // sur le meme bus I²C là j'ai des doutes.
    JR
    l'électronique c'est pas du vaudou!

  12. #11
    da23real

    Re : Encodeur numérique rotatif sur Teensy 4.1

    Non mais là à force de question GPT a finis par me dire que je peux brancher un clavier usb (et meme aussi une souris).
    Donc là en attendant mieux dans l'immédiat je vais souder l'entrée usb comme ça sur le clavier je suis déjà mille fois plus à l'aise pour avancer sur les fonctions (les 3 keypads du prototype qui venaient me prendre 20 pins du teensy c'était moyen)
    Nom : IMG_20260311_140744.jpg
Affichages : 11
Taille : 3,61 Mo
    J'ai vachement appris grâce à internet. Tout ces livres qu'on trouve dans les poubelles

  13. #12
    Pascal071

    Re : Encodeur numérique rotatif sur Teensy 4.1

    des propos d'utilisateur spécialisé midi, je ne pense pas qu'on soit beaucoup ici à suivre...
    perso je ne suis pas tous les termes, suis plus électronicien que musicien.
    et je ne vois pas le rapport entre keypad, clavier USB et les nx16 encodeurs rotatifs désirés...
    poses des questions concrètes, on pourra répondre.
    Pascal

Discussions similaires

  1. [Outils/Fab/Comp] Encodeur rotatif
    Par FC05 dans le forum Électronique
    Réponses: 2
    Dernier message: 22/09/2016, 23h59
  2. encodeur rotatif
    Par invite6615d9e4 dans le forum Électronique
    Réponses: 1
    Dernier message: 03/07/2012, 13h20
  3. Encodeur rotatif
    Par invitea2542880 dans le forum Électronique
    Réponses: 11
    Dernier message: 24/05/2012, 08h23
  4. Où trouver un encodeur rotatif?
    Par invitea28fcae9 dans le forum Électronique
    Réponses: 7
    Dernier message: 07/06/2011, 17h06
  5. Encodeur rotatif et sens
    Par invitea88e6ae4 dans le forum Électronique
    Réponses: 34
    Dernier message: 08/02/2007, 14h22
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...