Augmenter le nbre de sorties avec 74HC595N - Part II
Description
L'article "Augmenter le nbre de sorties avec 74HC595N - Part I" expliquait comment utiliser un 74HC595 pour augmenter le nombre de sorties digitales d'un Arduino.
Il y avait deux amélioration possibles pour ce montage.
L'une d'entre elles concernait l'utilisation d'un code source permettant le contrôle de chaque sortie indépendamment de l'autre.
C'est le but de cet article.
Quelques explications sur le code
En plus de permettre le contrôle de chaque sortie du 74HC595 indépendamment des autres, le code source présenté ci-dessous possède les caractéristiques suivantes:
Source: ShiftRegisterEnh.pde
Grâce à la déclaration de la classe BQS_DigitalOutExt, le code principal du programme (loop) devient extrêmement simple et lisible.
Pour simplifier la lecture, j'ai volontairement omis de reprendre la déclaration de la classe. Elle reste cependant disponible dans le fichier source ShiftRegisterEnh.pde
Améliorations possibles
La classe BQS_DigitalOutExt pourrait être améliorée pour recevoir quelques fonctionnalités complémentaires... voire aussi contrôler une double 74HC595, ce qui porterait le nombre de sortie digitale à 16!
Par ailleurs, une telle classe serait plus facile à ré-utiliser si elle était disponible sous forme de librairie.
Il y a encore un peu de travail à faire :-)
L'article "Augmenter le nbre de sorties avec 74HC595N - Part I" expliquait comment utiliser un 74HC595 pour augmenter le nombre de sorties digitales d'un Arduino.
Il y avait deux amélioration possibles pour ce montage.
L'une d'entre elles concernait l'utilisation d'un code source permettant le contrôle de chaque sortie indépendamment de l'autre.
C'est le but de cet article.
Quelques explications sur le code
En plus de permettre le contrôle de chaque sortie du 74HC595 indépendamment des autres, le code source présenté ci-dessous possède les caractéristiques suivantes:
- Déclaration et utilisation d'une classe BQS_DigitalOutExt (digital output extension) pour simplifier l'écriture du code de loop().
- Utilisation de méthode "prepareXXX" qui permet de modifier l'état de plusieurs sortie avant d'appliquer le nouvel état.
- Déclaration des méthodes setOutput, switchOutput, resetOutputs pour modifier immédiatement l'état des sortie (applique aussi les "prepareXXX")
- Un code complètement documenté avec une description pour chaque méthode.
Source: ShiftRegisterEnh.pde
Grâce à la déclaration de la classe BQS_DigitalOutExt, le code principal du programme (loop) devient extrêmement simple et lisible.
Pour simplifier la lecture, j'ai volontairement omis de reprendre la déclaration de la classe. Elle reste cependant disponible dans le fichier source ShiftRegisterEnh.pde
/* ------------------------------------------ Arduino Main Loop ------------------------------------------ */ // Declare OutputExtension control pining for 74HC595 int oeDataPin = 2; int oeClockPin = 3; int oeLatchPin = 4; // Declare Output Extension BQS_DigitalOutExt outExt = BQS_DigitalOutExt( oeDataPin, oeClockPin, oeLatchPin ); void setup(){ } void loop(){ // Modifie directement une sortie outExt.setOutput( 0, HIGH ); delay( 2000 ); // 2 sec // Prepare une triple modification outExt.prepareOutput( 7, HIGH ); outExt.prepareOutput( 1, HIGH ); outExt.setOutput( 0, LOW ); // applique les modifications delay( 2000 ); // Clear all outputs outExt.resetOutputs(); // Switch on/off each output (one at the time). for( int i = 0; i<=7; i++ ){ outExt.switchOutput( i ); delay( 300 ); outExt.switchOutput( i ); delay( 300 ); } // Clear all outputs outExt.resetOutputs(); }
Améliorations possibles
La classe BQS_DigitalOutExt pourrait être améliorée pour recevoir quelques fonctionnalités complémentaires... voire aussi contrôler une double 74HC595, ce qui porterait le nombre de sortie digitale à 16!
Par ailleurs, une telle classe serait plus facile à ré-utiliser si elle était disponible sous forme de librairie.
Il y a encore un peu de travail à faire :-)
Bonjour je n'arrive pas à avoir le fichier source shift register enh.pde
RépondreSupprimerpourriez vous me dire comment le trouvé merci.
Lien corrigé... merci
Supprimer