Partage
  • Partager sur Facebook
  • Partager sur Twitter

Programmation d'un MPC82E54AS2

Microcontrôleur 8-bit compatible 80C51

    7 juin 2022 à 4:13:11

    Bonjour, je vais tenter de lire et réécrire le programme d'un microcontrôleur 8-bit MPC82E54AS2. Ce microcontrôleur est le cœur de PAR64LEDPLUS (AmericanDJ) qui est un Par assez vieux mais qui fonctionne toujours très bien. Je me lance là dedans car j'en ai 32 et que j'ai donc jugé intéressant de passer quelques heures à les améliorer. Le programme de ces PAR ont un seul problème : Il n'y a pas de dimmer.

    En fait, on peut uniquement contrôler les valeurs RVB (Rouge, vert, bleu) indépendamment à des niveau entre 0 et 255 (standard DMX) mais impossible de contrôler les trois en même temps proportionnellement.

    Vous allez me dire, bah pas problème il suffis de faire des calculs et hop on a COULEUR = COMMANDE * (PUISSANCE / 255) sauf que malheureusement j'utilise un logiciel qui ne permet pas de faire des calculs comme celui ci.

    L'idée est donc de rajouter un canal DMX qui servira de dimmer et de modifier / réécrire afin d'appliquer la fonction mathématique directement dans le PAR.

    C'est là que commence les problèmes, je n'ai jamais programmer de microcontrôleurs compatible 80C51 et encore moins de MPC82E54AS2.

    J'aurais donc besoin de quelques conseils (quel logiciel utiliser, que programmeur, peut-ont utiliser un arduino en temps que programmeur, etc) je maitrise beaucoup de langage de programmation et j'ai aussi un peu plus que les bases en assembleur donc ça devrait être jouable.

    Hâte de vous lire, Nico.

    -
    Edité par nicolasdemailly7 7 juin 2022 à 4:14:24

    • Partager sur Facebook
    • Partager sur Twitter
      7 juin 2022 à 6:39:04

      > sauf que malheureusement j'utilise un logiciel qui ne permet pas de faire des calculs comme celui ci.
      Est-ce le logiciel ou le hardware du processeur qui ne supporte pas la multiplication ou la division?
      À la rigueur diviser par 255 est proche de diviser par 256 qui se ferait par un décalage de 8 positions sur un registre de 16 bits.
      Je ne me rappelle pas l'algo, mais on peut simuler la multiplication par des additions successives.

      L'algo naïf est de choisir le plus petit comme compteur et d'accumuler le plus grand et de décrémenter le petit jusqu'à ce qu'il soit nul.

      Un algo plus intelligent est de décaler le grand de 1 vers la gauche et le petit vers la droite.

      Si le bit 0 du petit est 1, tu ajoutes le grand à l'accumulateur, sinon tu décales les deux (à vérifier ...)

      -
      Edité par PierrotLeFou 7 juin 2022 à 6:55:31

      • Partager sur Facebook
      • Partager sur Twitter

      Le Tout est souvent plus grand que la somme de ses parties.

        7 juin 2022 à 16:18:45

        PierrotLeFou a écrit:

        > sauf que malheureusement j'utilise un logiciel qui ne permet pas de faire des calculs comme celui ci.
        Est-ce le logiciel ou le hardware du processeur qui ne supporte pas la multiplication ou la division?
        À la rigueur diviser par 255 est proche de diviser par 256 qui se ferait par un décalage de 8 positions sur un registre de 16 bits.
        Je ne me rappelle pas l'algo, mais on peut simuler la multiplication par des additions successives.

        L'algo naïf est de choisir le plus petit comme compteur et d'accumuler le plus grand et de décrémenter le petit jusqu'à ce qu'il soit nul.

        Un algo plus intelligent est de décaler le grand de 1 vers la gauche et le petit vers la droite.

        Si le bit 0 du petit est 1, tu ajoutes le grand à l'accumulateur, sinon tu décales les deux (à vérifier ...)

        -
        Edité par PierrotLeFou il y a environ 9 heures


        Salut, le MCP82E54AS2 permet la multiplication et la division. Conformément au jeu d'instructions disponible sur sa fiche technique section "ARITHEMATIC OPERATIONS" disponible ici : https://pdf1.alldatasheet.com/datasheet-pdf/view/302693/MEGAWIN/MPC82E54AS2.html

        Le problème ne va pas être la modification du code mais comment lire et écrire pour pas trop cher sur ce microcontrôleur.

        Bonne journée, Nico

        • Partager sur Facebook
        • Partager sur Twitter
          9 juin 2022 à 13:11:40

          La doc n'est pas très claire concernant la façon de reprogrammer la puce, d'après le site de Megawin, il y a 2 types de programmateurs : ISP et parallèle (dont U1, U1 plus et U2), sachant que le fabricant de ton appareil peut désactiver le mode ISP et rendre la relecture du code impossible (que ce soit en mode ISP ou parallèle). Il n'y a aucune description du protocole de mise à jour, donc l'utilisation d'un arduino pour ça risque d'être compliquée.

          Par contre, si c'est bien une puce DIP sur socket, tu peux peut-être la remplacer par un atmega328p (ou un autre microcontrôleur en 5V) en créant un adaptateur avec:

          • un PCB de prototypage
          • des barettes de broches rondes pour connecter le PCB dans le socket, parce que les broches carrées 2.54mm ordinaires l'abîmeraient,
          • un socket pour l'atmega,
          • des fils et un fer à souder, 
          • peut-être un cristal de 16 ou 20MHz si le cristal sur la carte est un 24MHz, parce que l'Atmega ne va pas aussi haut en fréquence. 

          Je crois qu'il existe des bibliothèques qui gèrent le protocole DMX512 pour l'arduino.

          • Partager sur Facebook
          • Partager sur Twitter
            14 juin 2022 à 8:05:34

            Une autre solution relativement simple à mettre en place niveau logiciel serait de faire une passerelle à base d'arduino.

            Celui-ci-ci aurait 2 deux port DMX :

            - un port d'entrée, à brancher sur le réseau DMX principal

            - un port de sortie, à brancher sur le PAR

            Et niveau code, il suffira d'écouter toutes les trames RGB+DIM sur le port d'entrée et les renvoyer au format RGB sur le port de sortie en ayant fait le calcul du dimmage.

            • Partager sur Facebook
            • Partager sur Twitter

            Programmation d'un MPC82E54AS2

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown