Jamais assez de broches GPIO sur un microprocesseur
Placé surD'une manière ou d'une autre, quel que soit le microprocesseur que je choisis, je manque de broches GPIO pour les besoins du projet ou pour ce que je veux faire.
Donc, pour un projet récent, je suis passé de l'ESP8266 à l'ESP32 qui a beaucoup plus de broches GPIO que son prédécesseur... mais toujours pas assez pour le projet sur lequel je travaille.
Pour mettre fin à cette course pour les broches GPIO une fois pour toutes, j'ai décidé que j'avais besoin d'une carte d'extension bon marché qui pourrait être configurée pour les commutateurs (entrée) et les LED ou d'autres choses (sortie). Et pendant que j'y étais, j'ai pensé qu'un peu de logique supplémentaire serait bien.
Donc, ce que j'ai proposé est une carte I2C avec huit broches GPIO qui sont librement configurables pour l'entrée ou la sortie (j'appelle les broches GPIO "Slots").
La carte d'extension est idéale pour une utilisation sur une planche à pain sans soudure. Le schéma peut ensuite être intégré à la conception matérielle globale.
Un emplacement configuré pour l'entrée sera probablement utilisé pour les commutateurs et ce serait formidable si nous pouvions faire la distinction entre appuyer sur le bouton et le relâcher (relâchement rapide, relâchement moyen et relâchement long). Dans le code du processeur principal, vous pouvez simplement dire :
Les emplacements configurés pour la sortie deviennent un type d'emplacement "tirer et oublier". C'est-à-dire que vous pouvez indiquer au Slot d'être HIGH ou LOW comme avec la fonction digitalWrite() dans l'IDE Arduino . Mais vous pouvez également dire : passe au niveau ÉLEVÉ pendant 2 500 ms, puis redevient BAS. Dans votre programme principal, vous n'avez pas besoin d'écrire le code pour attendre 2500 ms, puis rendre la broche GPIO LOW.
Vous pouvez également indiquer à la serrure de clignoter avec une heure d'activation et une heure d'arrêt et, si vous le souhaitez, une durée. Par exemple:
Le verrou clignote à 500 ms allumé, 1000 ms éteint pendant une période de 10 secondes (10000 ms) puis s'arrête de clignoter.
Similaire à l'exemple ci-dessus, mais maintenant le verrou clignotera pour toujours (ou jusqu'à ce que vous lui disiez de faire autre chose) ;
Le matériel est conçu autour d'un microcontrôleur ATtiny841. La communication se fait via le bus I2C (deux fils, SCL et SDA).
Vous pouvez faire fonctionner les cartes à 5 volts ou 3,3 volts selon vos besoins (principalement la tension utilisée par le processeur principal), mais vous ne pouvez pas câbler les systèmes 5 volts et 3,3 volts ensemble sans une logique supplémentaire (décaleurs de niveau pour les lignes SDA et SCL) .
Pour contrôler les cartes ADW0720 j'ai développé une bibliothèque avec des fonctions simples.
Chaque périphérique I2C a une adresse comprise entre 1 et 127 (décimal). L'adresse par défaut pour les cartes ADW0720 est 0x18 (24 décimal) mais vous pouvez la changer en ce que vous voulez avec le code suivant :
La deuxième ligne stocke ceci nouvelle adresse dans EEPROM et à partir de là, il est nouvelle adresse l'adresse de ce module.
En donnant à chaque carte ADW0720 une adresse unique, vous pouvez contrôler plusieurs cartes ADW0720 en utilisant uniquement les deux lignes I2C !
J'ai conçu deux types de cartes ADW0720 prêtes à l'emploi. La carte Type-1 a 4 interrupteurs tactiles et 4 LED, la carte Type-2 a 8 LED mais pas d'interrupteurs.
Au lieu des LED, il est également possible de piloter un MOSFET à canal N (tel que le 2N7000 ou le 2N7002) comme interrupteur pour piloter des charges plus importantes telles que des buzzers, des relais ou des moteurs.
Vous pouvez trouver la bibliothèque et le code de l'esclave ATtiny841-I2C sur github. Vous y trouverez également la documentation de la bibliothèque.
La bibliothèque est livrée avec deux exemples de croquis. Le premier est de montrer ce que les cartes ADW0720 peuvent faire (show-of) et le deuxième exemple (I2C_ADW0720_Configurator) montre l'utilisation plus avancée.
Par exemple, avec le deuxième exemple, vous pouvez définir la fonction (entrée ou sortie) des slots et vous pouvez définir l'adresse I2C de l'ADW0720 afin que vous n'ayez pas à le faire dans votre programme principal.