Jamais assez de broches GPIO sur un microprocesseur

Placé sur

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

ADW0720 Type 2 ADW0720 Type 2

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

ADW0720 ATtiny841 ADW0720 ATtiny841

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.

ADW0720 Type 1 (4 LED, 4 interrupteurs) ADW0720 Type 1 (4 LED, 4 interrupteurs)
ADW0720 Type-2 (8 LED, pas de commutateurs) ADW0720 Type-2 (8 LED, pas de commutateurs)


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.

Schéma de la carte ADW0720 Type-1 Schéma de la carte ADW0720 Type-1
Carte ADW0720 Type-2 Carte ADW0720 Type-2
Fonctions d'assistance de la bibliothèque Fonctions d'assistance de la bibliothèque
Posté par Site Internet Willem Aandewiel (1955) a une formation en électronique et en techniques numériques. Cependant, la majeure partie de sa vie professionnelle, il a travaillé dans l'automatisation où il a travaillé dans à peu près toutes les disciplines, du programmeur au chef de projet et au chef de projet. Willem a été l'un des premiers Néerlandais à posséder un micro-ordinateur (KIM-1, 1976) à une époque où le PC n'avait pas encore été inventé. Aujourd'hui, il s'occupe principalement de la conception et de la production de petits circuits électroniques à microprocesseurs. Sa «mission dans la vie» est de rendre les gens enthousiastes à l'idée de fabriquer leurs propres circuits électroniques, micro-ordinateurs et programmes.

Commentaires

The Netherlands Edwin vd Oetelaar
Bonjour M. Willem, L'application d'un extenseur d'E/S 16 bits MCP23017 avec génération d'interruptions ne serait-elle pas plus pratique dans les projets que de créer vous-même un processeur d'E/S séparé ? Je pose cette question parce que je suis aussi moi-même en train d'observer les oiseaux. Je souhaite équiper un module ESP32-S d'une série d'interfaces thermocouples - une paire de CAN 0-10V - et d'une rangée d'entrées/sorties logiques pour réaliser un projet concernant le contrôle des pompes à chaleur (et aussi comprendre le comportement). est d'aider ce club https://www.adelaar-innovatie.nl/over-ons." rel="nofollow" target="_blank">https://www.adelaar-innovatie.nl/over-ons. J'espère sur 2 pensées, un ESP32 avec tout via le bus I2C ou un AVR séparé (par exemple un atmega2560) qui gère toutes les E/S (et éventuellement le comportement en temps réel) et avec lequel je laisse l'ESP32 parler via un protocole série. S'il vous plaît, vos idées. Cordialement, Edwin van den Oetelaar
Placé sur 
Willem
Bonjour Edwin, Un tel module d'extension d'E/S convient également, mais il ne fournit pas d'options supplémentaires telles que la gestion des pressions de bouton courtes, moyennes et longues ou des LED clignotantes sans l'intervention de votre propre code ou après un temps spécifié, éteindre une LED. encore. Voir : https://willem.aandewiel.nl/index.php/2020/08/10/extending-gpio-pins-on-your-micro-processor/" rel="nofollow" target="_blank">https://willem.aandewiel.nl/index.php/2020/08/10/extending-gpio-pins-on-your-micro-processor/
Placé sur 
Edwin
Bonjour M. Willem, merci pour vos commentaires sur ce sujet. Je suis arrivé à la même conclusion, les deux options sont réalisables. Cependant, il y a une chose qui me préoccupe lors de l'utilisation d'un processeur IO contrôlé par firmware. C'est le fait que le firmware peut avoir des problèmes (bugs ou autres). En mettant à jour le firmware principal de l'ESP32, je souhaite également mettre à jour et supprimer les bugs de l'ensemble du système. Avez-vous déjà flashé depuis un autre CPU maître le firmware d'un MCU AVR qui était déjà en circuit et déployé ? Une approche alternative que j'envisage consiste à utiliser un FPGA pour le traitement des E/S. Le micrologiciel FPGA (image) est fourni par le processeur principal au démarrage du système. De cette façon, le micrologiciel de l’ensemble du système peut être mis à jour pendant que le système est sur le terrain, sans intervention humaine. Vos réflexions et votre riche expérience sont les bienvenues. Cordialement, Edwin
Placé sur 
Webwinkelkeur Kiyoh Trustpilot Opencircuit