Led matrix 8x8 + Max7219

Bonjour à tous,

Tout nouveau dans l'univers de l'arduino , j'ai acheté un kit de demmarrage et je m'essaye à divers projet afin de connaître toutes le possibilités de la machine.
J'ai nottament suivi les tuto de Openclassroom.

A présent je m'attaque à une matrice led 8x8 livré dans mon kit.
Celle ci est montée sur une platine et controlée directement par un microcontroleur de type Max7219.

J'ai regardé divers tutos et videos, eplucher le datasheet pour comprendre le fonctionnement et j'ai vite compris que je devais me tourner vers les protocoles SPI , ce que j'ai fait de ce pas.

Process SPI

J'ai donc bien compris, qu'il y'avais en gros 3 pins de contrôles : CLK , DIN (ou MOSI), CS

Lorsque je souhaite dire à mon système que je veux communiquer avec lui , je mets CS à LOW
(DigitalWrite (Pin_CS, LOW);

J'ai egalement compris qu'une fois que mon système est en mesure de m'ecouter , je dois lui donner une info via DIN , a chaque "bip" d'horloge CLK.

Application au MAX7219 + Led 8*8

J'ai remarque que de nombreux tutos propose d'utiliser des bibliothèques toutes faites.
A priori , pourquoi pas ... mais avant cela j'aimerais comprendre le fonctionnement interne du truc avant de me lancer dans des trucs que je ne comprends pas.

j'ai donc pu trouver un code qui circule sur internet et qui semble être tout le temps le même pour faire fonctionner ce système.
Attention ... le voici https://retroetgeek.com/wp-content/uploads/2017/08/TutoMatriceSansLib.ino

A première vu rien de bien compliqué, cela fonctionne quand je televerse , vous me direz ... tout vas bien ?!

Eh bien voila, j'ai du mal à comprendre le squelette du programme et j'aimerais vous demander conseil pour clarifier tout ça

  • WriteMax (adress, data)
    pour moi cette fonction permet d'assigner une valeur à une adresse
    ex : Adresse "Luminosité" Valeur "4"
    Le tout est codé en Hexadecimal et les correspondances des adresse se trouve dans le data sheet

Cette même fonction fait en revanche appel à la fonction

*WriteMax_Byte(DATA)
Et.... c'est la que ça coince.
En effet j'ai beaucoup de mal à comprendre comment est faite cette fonction.
J'aurais tendance à dire que j'ai une chaine binaire (genre 10100010) et que

  1. Je fais un bip d'horloge
  2. J'ecris le premier bit dans DIN Pourquoi ajouter "&0x80"
  3. Je decale d'un bit Pas sur de celle la ??
  4. J'eteins mon horloge

Le tout réalisé 8 fois , pour faire 8 bit.

Questions

  1. Le Datasheet indique qu'il fonctionne sur 16 bit, pourquoi alors ecrire seulement 8 bits dans le programme ?
  2. Pourquoi rajouter 0x80 à DATA (pas impossible que cette reponse soit liée à la question précedente)

Voila ... c'est tout pour moi ,
Merci d'avance à ceux qui me liront et pourront m'apporter un eclairage.

Bonne soirée à tous ,

Ton message est mal placé, ici c'est pour les projets terminés, pas pour les questions ou demande d'aide.
Utilise le lien 'report to moderator' pour demander le déplacement dans la bonne section...

Sujet déplacé...

  1. J'ecris le premier bit dans DIN Pourquoi ajouter "&0x80"

On n'ajoute pas 0x80. & est un opérateur ET binaire (masque).

digitalWrite(Max7219_pinDIN,DATA&0x80); // écrit sur la pin DIN le bit de poids fort de l'octet.
DATA = DATA<<1; // décalage du l'octet d'un bit vers la gauche

A priori , pourquoi pas ... mais avant cela j'aimerais comprendre le fonctionnement interne du truc avant de me lancer dans des trucs que je ne comprends pas.

Oui mais avant d'essayer de comprendre le fonctionnement d'un code pêché sur le WEB il serait bien de comprendre le langage lui-même, et se former.
Le simple fait que tu confondes & avec une addition prouve que tu en as besoin.

Ensuite, ne pas profiter des librairies est un choix, mais comprendre l'interface d'une librairies n'est pas dénué d'intérêt, loin de là, et comprendre le code des autres est un atout de taille.
Donc de toutes façons, la base est essentielle : C Tutorial

On n'ajoute pas 0x80. & est un opérateur ET binaire

Milles excuses, je me suis mal exprimé. Ici il n'est pas question de faire une addition.

M’ enfin en relisant mon message et votre réponse. Je pense avoir compris la mécanique.

Le fait de faire un ET binaire avec 0x80 = 10000000 , permet de choper l'etat du bit de poids fort et seulement celui-ci

Ex :
Mon adresse est 10110011

10110011 & 10000000 = 10000000
J'envoie ce premier bit dans DIN

Je décale d'un bit , donc ma chaîne devient 0110011
je le recoupe à 0x80 et cette fois ci je récupère le 0
Ainsi de suite ....

C'est bien ça ?

Merci de votre aide

Mon adresse est 10110011
Ma donnée est 10110011

ma chaîne devient 0110011
mon caractère devient 0110011

Bonjour,

J'ai ma réponse,
Merci et desolé de vous avoir dérangé ...