Frage:
Was ist die maximale Anzahl von Ausgängen, die Sie von einem Mikrocontroller mit n Ausgängen steuern können?
tgun926
2014-07-08 18:24:24 UTC
view on stackexchange narkive permalink

Ich habe eine Weile darüber nachgedacht, und ich denke, es sind \ $ 2 ^ {(n-1)} \ $ Ausgänge.

Wenn ich 5 Ausgänge habe, verwende ich 1 als Signal. und die anderen 4 als Steuerleitungen zu kaskadierten Decodern, was mir 16 Ausgänge bringt. Dies wächst exponentiell, so dass es bei Mikrocontrollern mit mehr als 4 Ausgängen in Ordnung ist.

Aber was ist mit Mikrocontrollern mit begrenzten Ausgängen (z. B. 4). Sind Sie hier auf nur 8 Ausgänge beschränkt?

Bearbeiten:

Das Projekt besteht darin, ein LED-Array mit variabler Helligkeit (PWM-gesteuert) von 32 x 4 von einem einzelnen Mikrocontroller mit einem begrenzten zu steuern Anzahl der Ausgänge (4). Ich frage mich, ob sich die damit verbundene Komplexität nicht lohnt und ob stattdessen ein Mikrocontroller mit mehr Ausgängen verwendet werden soll.

Wenn ich das richtig verstehe und Sie jeweils nur einen Ausgang benötigen, können Sie auch einen 4-zu-16-Zeilendecoder für 16 Ausgänge verwenden oder einen für 15 Ausgänge getrennt lassen, wenn Sie die Möglichkeit benötigen, dass alle ausgeschaltet sind.
Ja, es ist immer nur eine Ausgabe erforderlich - meine Frage wurde bearbeitet
Sechs antworten:
Dave Tweed
2014-07-08 18:34:24 UTC
view on stackexchange narkive permalink

Es hängt davon ab, was Sie unter "Kontrolle" verstehen. Beschränken Sie sich auf einfache kombinatorische Logik oder sind serielle Protokolle zulässig?

Theoretisch können Sie eine beliebige Anzahl von Ausgängen von einem einzelnen Pin aus steuern, indem Sie beispielsweise den Dallas / Maxim 1-Draht (seriell) verwenden ) Protokoll zum Ansteuern eines Satzes von E / A-Expander-Chips. Ähnliche Ansätze können mit I 2 C, SPI oder einfachen Schieberegistern verwendet werden, von denen jedes mindestens 2 Pins erfordern würde

Ich habe meine Frage bearbeitet.Ich habe meine Frage auf kombinatorische Logik beschränkt, weil ich eine große Anzahl von LEDs ansteuern wollte und dachte, Geschwindigkeit wäre ein wichtiger Faktor.
@tgun926, Wenn Sie LEDs steuern, ist die Persistenz des Sehens viel langsamer als bei digitalen Ports. Daher ist die Geschwindigkeit im Allgemeinen nicht wichtig (es sei denn, Sie steuern die Helligkeit!).
In diesem Fall ist das Schlüsselkonzept, nach dem Sie suchen, [Charlieplexing] (http://en.wikipedia.org/wiki/Charlieplexing).Ohne externe Logik können Sie N * (N-1) LEDs über N Pins steuern.Mit einem geraden Binärdecoder können Sie 2 ^ N - 1 LEDs steuern.
@ScottSeidman Ich denke eigentlich auch über PWM nach.Was wird sich dadurch ändern?Wie wäre es mit RGB und PWM?
@tgun926, PWM wäre viel schwieriger und Ihr gesamter Ansatz würde sich unterscheiden.Ich schlage vor, Ihre Frage so zu ändern, dass sie genau das widerspiegelt, was Sie versuchen, damit wir nicht weiter raten.Sie erhalten schneller eine richtige Antwort.
Hängt davon ab, wie Sie es PWM, wenn Sie PWM-Steuerung für jede einzelne LED benötigen, ist es viel schwieriger, aber PWMing nach Zeile / Spalte oder nur insgesamt könnte einfacher durchgeführt werden.
Es gibt RGB-LEDs mit eingebauten PWM-Schaltkreisen, z. B.: Https://www.sparkfun.com/products/12877.Warum auf die harte Tour?
pjc50
2014-07-08 19:45:46 UTC
view on stackexchange narkive permalink

Wenn Sie problemlos einen Mikrocontroller mit mehr Ausgängen verwenden können - und dies sollte recht einfach sein, es sei denn, Sie haben bereits viele andere Ausgänge für einen anderen Zweck festgelegt -, tun Sie dies.

Wenn Sie kann nicht, dann können Sie normalerweise sparen, indem Sie Schieberegister verwenden: http://wiringpi.com/extensions/shift-register-74x595/

Sie können fünf 8-Bit-Schieberegister haben, vier über die 32-Bit-Breite und eines über die 4-Bit-Höhe. Verwenden Sie Ihre vier Pins als Daten-, Takt-, Latch- und Chipauswahl.

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

Das hängt davon ab, wie schnell Sie sie steuern müssen. Wenn Sie hohe Geschwindigkeit benötigen, gilt Ihre Gleichung. Wenn Sie eine gewisse Verzögerung aushalten können, können Sie entweder I 2 C-Expander (2 GPIOs) oder 595 (3 Ausgänge) verwenden, die je nach Bedarf geknüpft oder kaskadiert sind.

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

Sie können ein Bit plus ein Verschiebungsbit verwenden, um eine beliebige Zahl mithilfe von verketteten seriellen Schieberegistern zu steuern, und Ihre Ausgabe kann JEDE Zahl sein, nicht nur ein 1-aus-16-Muster oder ähnliches.

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

Wenn Sie nur LEDs steuern möchten, können Sie auch CharliePlexing verwenden. Mit dieser Methode können n Ausgänge (n ^ 2 - n) Segmente oder LEDs ansteuern.

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

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

Wie bereits erwähnt, können mithilfe von Schieberegistern beliebig viele Ausgänge mit einer geringen Anzahl von CPU-Pins gesteuert werden. In Bezug auf Ihre spezifischen Anforderungen geben Sie nicht die Anzahl der erforderlichen Helligkeitsstufen an, aber Sie könnten wahrscheinlich eine angemessene Anzahl von Helligkeitsstufen erreichen, wenn der "Register Latch" -Pin der Schieberegister an eine Ausgangsfreigabe gebunden ist. Angenommen, Sie möchten 128 Helligkeitsstufen bei einer Bildwiederholfrequenz von 60 Hz oder besser, und es dauert 100 us, um die Bits zu stempeln, um eine Zeile auszuwählen und zu laden , dann pulsiere die Latch / Output-Freigabe für 20us. Dann takte Bit 1 die Helligkeit für jedes Licht in Zeile 0 aus und pulsiere die Latch / Output-Freigabe für 40us. Dann Bit 2 und Puls für 80us. Für die Bits 3-6 verdoppeln sich die Impulslängen weiter, aber Sie können das nächste Datenbit während des "Ein" -Teils des Zyklus eintakten (da die Freigabe länger als diese aktiv sein soll dauert, um durch die Bits zu verschieben). Die ersten drei Bits benötigen ungefähr 100 + 20 + 100 + 40 + 100 + 80 Mikrosekunden (insgesamt 440us). Die nächsten vier Bits benötigen ungefähr 160 + 320 + 640 + 1280 (2400us), was insgesamt ungefähr 2840us entspricht. Dies für alle vier Zeilen zu tun, dauert weniger als 12 ms, daher sollte eine Bildwiederholfrequenz von 60 Hz kein Problem sein.

Eine geringfügige Einschränkung bei diesem Ansatz besteht darin, dass Sie sicherstellen sollten, dass Sie nicht versuchen, die Helligkeit zu ändern der Lichter in einer Reihe, während diese Reihe verarbeitet wird. Andernfalls, wenn z. Die Helligkeit eines Lichts ändert sich zwischen der Ausgabe der Bits 5 und 6 von 63 auf 64, das Licht kann während der ersten 6 Bitzeiten eingeschaltet werden (da alle Bits 0-5 gesetzt sind, obwohl Bit 6 klar ist) und dann Ein für die letzte Bitzeit (da Bit 6 gesetzt wird, obwohl die Bits 0-5 gelöscht sind), wodurch es kurz bei voller Helligkeit erscheint. Wenn Sie die Helligkeit für die Lichter in einer Reihe vor dem Scannen dieser Reihe speichern, sollten solche Schwierigkeiten jedoch vermieden werden.



Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...