Chargement...

& larr; Retour à l'accueil
Matrice LED
Développement C++

Matrice LED

Équipe de Projet
Clément
Matthieu

Introduction

L'objectif de ce projet est de contrôler un panneau LED similaire à ceux rencontrés dans les transports en commun ou les espaces publics. Le but est de développer un système embarqué capable de récupérer l'heure en temps réel pour l'afficher sur la matrice. Bien que monochrome, ce type de panneau reste essentiel pour diffuser des informations de manière fiable et à faible coût.

Synoptique

Ce projet s'appuie sur une carte Arduino UNO pour le traitement des données. La commande est assurée par des modules 74HC238 et 74HC4094, permettant de piloter une matrice LED de 8x32. Un module TinyRTC, connecté en I2C à l'Arduino, fournit l'heure en temps réel.

Registres à Décalages

Un registre à décalage est un système séquentiel permettant de mémoriser des bits ; lorsqu'un nouveau bit entre, les précédents sont décalés d'une position. Cela permet de transférer des données bit par bit dans un circuit numérique via un ensemble de bascules synchrones. Ces registres peuvent facilement être mis en cascade s'ils partagent le même signal d'horloge, qui cadence le basculement.

Intégration TinyRTC

Le module TinyRTC intègre un composant DS1307 (Horloge Temps Réel I2C) et une EEPROM 24C32. Secouru par une pile bouton, il garantit la conservation de l'heure même en cas de coupure de l'alimentation de la carte Arduino. Cela évite de devoir reconfigurer l'heure à chaque démarrage du système.

Implémentation

Fonctions Principales

Le cœur de l'affichage repose sur plusieurs fonctions développées par Matthieu, dont GenerateBufferLed(). Voici un extrait du code C++ illustrant la préparation du buffer et la logique d'affichage bit par bit sur la matrice.

C++ Arduino UNO VS Code GitHub
main.cpp
 void   GenerateBufferLed () {
     uint8_t  *window;
     if  (mySnakeGame.__Snake_running) window = mySnakeGame.__window;
     else  window = myMatrice.__MatriceLed;

     for  ( uint8_t  i =  0 ; i <  32 ; i++) {
        data_buffer[i] = ((window[i] >> ligneInProcesse) &  1 ) ^  1 ;  // inversion bit
     }
}

 void   ShowLigne () {
     /* Éteint la matrice */
     PORTC &= ~( 1  << CS1_PIN);

     /* Envoie la ligne */
     PORTC = (PORTC & ~( 1  << ALO_PIN)) | (((ligneInProcesse >> BIT0) &  1 ) << ALO_PIN);
    PORTC = (PORTC & ~( 1  << AL1_PIN)) | (((ligneInProcesse >> BIT1) &  1 ) << AL1_PIN);
    PORTC = (PORTC & ~( 1  << AL2_PIN)) | (((ligneInProcesse >> BIT2) &  1 ) << AL2_PIN);
}

Galerie Détaillée

Cliquez sur un schéma ou une image pour l'agrandir.

Synoptique & Routage
Registres à Décalage
Module TinyRTC