
Matrice LED

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.

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.
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.


