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
- Je fais un bip d'horloge
- J'ecris le premier bit dans DIN Pourquoi ajouter "&0x80"
- Je decale d'un bit Pas sur de celle la ??
- J'eteins mon horloge
Le tout réalisé 8 fois , pour faire 8 bit.
Questions
- Le Datasheet indique qu'il fonctionne sur 16 bit, pourquoi alors ecrire seulement 8 bits dans le programme ?
- 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 ,