回答:
I2C IOエキスパンダー:-プロトコルのオーバーヘッドが多少ありますが、非常に多数(数千)のLEDに拡張できる必要があります。
シンプルなシフトレジスタ -Dead Simpleインターフェイス。シフトレジスタのクロックがかなり高速でない場合、更新時にLEDがちらつくことがあります。ダブルバッファシフトレジスタを使用すると、これが修正されます。
すでに指摘したように、IOピンが1つだけの場合は、1線式エキスパンダー/シフトレジスタを使用するか、I2Cバスに別のデバイスを追加できます。まだ言及されていない唯一のことは、SPIポートに別のスレーブを追加する可能性です。
SPIは4線式プロトコルと呼ばれます-クロック線と選択線の2本のデータ線があります(共通グラウンドも同様ですが、通常はカウントされません)。ただし、最初の3つはバス上のすべてのデバイス間で共有されるため、最初の3つ以降の各デバイスは、トレース/ワイヤを1つだけ使用します。また、SPIはバスを全二重に増やしますが、このアプリケーションでは問題になりません。
本当に1つのピンしか利用できない場合、ダラス1線式バスは最も明白なもののように見えます。ただし、これは出力専用であるため、より安価なソリューションがあります。データとクロックの両方を伝送するシリアルPWMバスはセットアップが簡単です。たとえば、davidcaryでも言及されているRoman Blackのページを参照してください。74VHC164のようなシリアルインパラレルアウトシフトレジスタのみが必要です。必要な数の出力にカスケードできます(1つの164には8つの出力があります)。
このソリューションでは、LEDは静的に駆動されます。
I2CのSPIなど、共有できる他のI / Oがある場合は、マキシムのMAX6950などのより豪華なソリューションが必要になる場合があります。MAX6950は、いくつかの機能を挙げて、点滅と輝度制御、およびスルーレート制限を備えています。LEDは多重化されているため、必要なのは1つの16ピンドライバーだけです。
サイズに依存する25個のLEDは、マイクロコントローラーの単一のデジタルIOピンに大量の電力を消費する可能性があります。それらを直接駆動するのではなく、単純なFETスイッチを使用して(IOがゲートに接続されているため)、LEDチェーンへの電力を制御する必要があります。
アプリケーションによっては、これを実現する他のより堅牢な方法があります。しかし、fetを投入すると、おそらく最速で作業できます。
たとえば、可変信号をゲートする場合、デジタルリレーと呼ばれることもある、より複雑なデバイスがあり、それをデジタルで切り替えることができます。
単一のIOポートで25個のLED を個別に制御する場合。他の人が示唆したように、いくつかのシフトレジスタを使用できます。シリアルプロトコル(I2Cなど)を使用して別のICと通信することを含む、より複雑なソリューションがあります。
Roman Blackは、単一のマイクロコントローラーピンから任意の数のLEDを独立して制御できるshift1システムについて説明しています。
@Fake Name、@ Tim、@ pingsweptはすべて、いくつかのシフトレジスタを一緒にチェーニングすることを提案しています。74HC595は正常に動作します。(おそらく、他のチップが少しうまく機能するでしょう)。
(@reemrevnivek、この種のデイジーチェーン接続されたSPIを使用すると、最初のデバイス以降の各デバイスは、多くの人が主張することに反して、マイクロコントローラーにピンをこれ以上必要としません-なぜあなたはそれらを聞くのですか?:-)。
通常、これには、マイクロコントローラーにMISO、MOSI、SCLK、およびラッチの4つのピンが必要です。出力を行うだけなので、MISO入力ピンは必要ありません。
Roman Blackは、単一のマイクロコントローラー出力の非常に注意深いタイミングと、アナログ回路の注意深い微調整により、単一のマイクロコントローラーピンが、一般的なSCLK、DIを分離するシンプルに見えるアナログ回路を駆動できることを発見しましたチェーンの最初のチップのピン(MOSI)、および共通ラッチ信号。
次に、そのマイクロコントローラーは単一のピンから25個のLEDを制御できます。