Question:
Quel est le nombre maximum de sorties que vous pouvez contrôler à partir d'un microcontrôleur avec n sorties?
tgun926
2014-07-08 18:24:24 UTC
view on stackexchange narkive permalink

J'y réfléchis depuis un moment, et je pense que c'est \ $ 2 ^ {(n-1)} \ $ sorties.

Si j'ai 5 sorties, j'utiliserai 1 comme signal, et les 4 autres comme lignes de contrôle vers les décodeurs en cascade, ce qui me donne 16 sorties. Cela croît de façon exponentielle, donc c'est bien avec les microcontrôleurs avec plus de 4 sorties.

Mais qu'en est-il des microcontrôleurs avec des sorties limitées (par exemple 4). Êtes-vous limité à seulement 8 sorties ici?

Edit:

Le projet consiste à piloter une matrice de LED à luminosité variable (contrôlée PWM) de 32 x 4 à partir d'un seul microcontrôleur avec un nombre limité nombre de sorties (4). Je me demande si la complexité impliquée dans cela ne vaut pas la peine et s'il faut plutôt utiliser un microcontrôleur avec plus de sorties.

Si je comprends bien cela et que vous n'avez besoin que d'une sortie à la fois, vous pouvez également utiliser un décodeur de 4 à 16 lignes pour 16 sorties, ou en laisser un déconnecté pour 15 sorties si vous avez besoin de la possibilité qu'elles soient toutes éteintes.
Oui, une seule sortie est requise à la fois - j'ai modifié ma question
Six réponses:
Dave Tweed
2014-07-08 18:34:24 UTC
view on stackexchange narkive permalink

Cela dépend de ce que vous entendez par "contrôle". Vous limitez-vous à une logique combinatoire simple ou les protocoles série sont-ils autorisés?

En théorie, vous pouvez contrôler un nombre arbitraire de sorties à partir d'une seule broche en utilisant quelque chose comme le Dallas / Maxim 1-wire (serial ) pour piloter un ensemble de puces d'extension d'E / S. Des approches similaires peuvent être utilisées avec I 2 C, SPI ou de simples registres à décalage, chacun nécessitant un minimum de 2 broches.

J'ai édité ma question.J'ai limité ma question à la logique combinatoire parce que je voulais piloter un grand nombre de LED et que la vitesse serait un facteur important.
@tgun926, si vous contrôlez les LED, la persistance de la vision est beaucoup plus lente que les ports numériques ne peuvent aller, donc la vitesse n'est généralement pas importante (sauf si vous PWMing la luminosité!)
Dans ce cas, le concept clé que vous recherchez est [Charlieplexing] (http://en.wikipedia.org/wiki/Charlieplexing).Sans logique externe, vous pouvez contrôler N * (N-1) LED à partir de N broches.Avec un décodeur binaire droit, vous pouvez contrôler 2 ^ N - 1 LED.
@ScottSeidman Je considère également PWM.Qu'est-ce que cela va changer?Et avec RVB et PWM?
@tgun926, PWM serait beaucoup plus difficile, et toute votre approche serait différente.Je suggère de modifier votre question pour refléter ce que vous essayez de faire aussi précisément que possible, afin que nous ne continuions pas à deviner.Vous obtiendrez une réponse correcte plus rapidement.
Cela dépend de la façon dont vous le PWM, si vous avez besoin d'un contrôle PWM de chaque LED individuelle, c'est beaucoup plus difficile, mais le PWM par ligne / colonne ou juste globalement pourrait être fait plus facilement.
Il existe des LED RVB avec des circuits PWM intégrés, tels que ceux-ci: https: //www.sparkfun.com/products/12877.Pourquoi le faire à la dure?
pjc50
2014-07-08 19:45:46 UTC
view on stackexchange narkive permalink

Si vous pouvez facilement utiliser un microcontrôleur avec plus de sorties - et cela devrait être assez facile, sauf si vous avez déjà beaucoup d'autres sorties engagées dans un autre but - alors faites-le.

Si vous impossible, alors vous pouvez généralement faire des économies en utilisant des registres à décalage : http://wiringpi.com/extensions/shift-register-74x595/

Vous pouvez avoir cinq registres à décalage 8 bits, quatre sur la largeur de 32 bits et un pour la hauteur de 4 bits. Utilisez vos quatre broches comme données, horloge, verrouillage et sélection de puce.

Ignacio Vazquez-Abrams
2014-07-08 18:34:47 UTC
view on stackexchange narkive permalink

Cela dépend de la vitesse à laquelle vous devez les contrôler. Si vous avez besoin d'une vitesse élevée, votre équation tient. Si vous pouvez supporter un peu de retard, vous pouvez utiliser des expandeurs I 2 C (2 GPIO) ou '595s (3 sorties), concentrés ou en cascade selon les besoins.

Scott Seidman
2014-07-08 18:40:49 UTC
view on stackexchange narkive permalink

Vous pouvez utiliser un bit plus un bit de décalage pour contrôler un nombre arbitraire en utilisant des registres à décalage série en série, et votre sortie pourrait être N'IMPORTE QUEL nombre, pas seulement un modèle 1 sur 16 ou quelque chose comme ça.

Chris Feltman
2014-07-08 20:59:41 UTC
view on stackexchange narkive permalink

Si vous souhaitez simplement contrôler les LED, vous pouvez également utiliser CharliePlexing. En utilisant cette méthode, n sorties peuvent piloter (n ^ 2 - n) segments ou LED.

http://en.wikipedia.org/wiki/Charlieplexing

supercat
2014-07-08 21:04:49 UTC
view on stackexchange narkive permalink

Comme indiqué, en utilisant des registres à décalage, il est possible de contrôler n'importe quel nombre de sorties en utilisant un petit nombre de broches CPU. En ce qui concerne vos exigences spécifiques, vous ne spécifiez pas le nombre de niveaux de luminosité dont vous avez besoin, mais vous pourriez probablement atteindre un nombre raisonnable de niveaux de luminosité si vous avez la broche «verrou de registre» des registres à décalage liée à une activation de sortie. Supposons que vous vouliez 128 niveaux de luminosité à un taux de rafraîchissement de 60 Hz ou plus, et qu'il faut 100us pour synchroniser les bits pour sélectionner et charger une ligne.

Déclenchez le bit 0 de la luminosité pour chaque lumière de la ligne 0 , puis impulsez la validation de verrouillage / sortie pendant 20us. Ensuite, synchronisez le bit 1 de la luminosité pour chaque lumière de la ligne 0 et impulsez la validation de verrouillage / sortie pendant 40us. Puis bit 2 et impulsion pendant 80us. Pour les bits 3 à 6, les longueurs d'impulsion continueront de doubler mais vous pourrez synchroniser le bit suivant de données pendant la partie "on" du cycle (puisque vous voudrez que l'activation soit active plus longtemps qu'elle prend pour passer à travers les bits). Les trois premiers bits prendront environ 100 + 20 + 100 + 40 + 100 + 80 microsecondes (440us au total). Les quatre bits suivants prendront environ 160 + 320 + 640 + 1280 (2400us), pour un total d'environ 2840us. Faire cela pour les quatre lignes prendra moins de 12 ms, donc un taux de rafraîchissement de 60 Hz ne devrait pas poser de problème.

Une légère limitation avec cette approche est que vous devez vous assurer de ne pas essayer de modifier la luminosité des lumières sur une ligne pendant que cette ligne est en cours de traitement. Sinon, si par ex. la luminosité d'une lumière passe de 63 à 64 entre les moments où les bits 5 et 6 sont émis, la lumière peut être allumée pendant les 6 premiers temps de bit (puisque les bits 0-5 sont tous définis, même si le bit 6 est clair), puis activé pour le dernier temps de bit (puisque le bit 6 sera mis à 1, même si les bits 0-5 sont clairs), le faisant apparaître brièvement à pleine luminosité. Si vous verrouillez la luminosité pour les lumières dans une rangée avant de numériser cette rangée, cependant, de telles difficultés doivent être évitées.



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...