マイクロの数本のピンで多くのLEDを制御するにはどうすればよいですか?


10

6ピンI / Oを備えたAtmel ATtiny13を使用しています。15個のLEDを制御したいのですが、すべてを接続する方法がわかりません。なんらかの多重化がなければ、一度に6つのLEDしか制御できないようです。マイクロコントローラーのサイズのため、6つのLEDに制限されていますか?


私は見ていませんでした。重複の可能性:electronics.stackexchange.com/questions/9860/...
ダニエル・グリロ

3
オプションをわずかに細かいマイクロコントローラーを購入するコストと比較することを忘れないでください。また、ポートごとの合計電流制限にも注意してください。
joeforker

しばらく前にマイクロを使い始めたとき、これは明確な答えで簡単に見つけられたらよかったのですが。charlieplexingについて何とか学び、それを正常に実装しましたが、SEコミュニティーの回答の優れた品質でここの質問を再現したいと思いました。
JYelton、2011年

1
@joeforkerそうです、私のプロジェクトが1回限りだったので、より多くのピンを備えたマイクロのコストはかなり最小限でした。ある時点で、約20のIOピンを備えたマイクロを使用して作業を行うことを考えましたが、私の目標の1つは、回路基板のフットプリントが非常に小さいことでした。また、素晴らしい形容詞のピニエ
JYelton、2011年

回答:


18

少数のIOピンから多数のLEDを駆動するために使用できる方法がいくつかあります。

最も単純なのは、標準の行/列表示の多重化です。この手法では、n個の IOピンを備えた個のLEDを駆動できます。数学的には、デューティサイクルは次のとおりです。/22

1メートルメートルあなたメートル一意の行パターン、一意の列パターン

つまり、この手法では、すべてのLEDが点灯している場合(またはすべての行またはすべての列が同一である場合)のデューティサイクルは100%であり、対角線を点灯する必要がある場合(またはすべての行が異なる場合)のデューティサイクルは)。すべてのLEDまたは1つのLED(または0個のLEDを点灯しますが、実際にはそれほど重要ではありません)を点灯すると、100%のデューティサイクルしか保証されません。1/

少し複雑なのはCharlieplexingです。この技術を使用すると、ドライブすることができ付きのLED のn IOピン。この手法で同時に点灯できるのはn 1個のLED だけです。数学的には、デューティサイクルは次のとおりです。21

1最小同時セット

ここで、同時セットは、共通のアノードまたは共通のカソードを持つLEDの一意のグループです。(これは証明されていません。問題を1分間熟考した後でたどり着いたものです。デューティサイクルがあなたにとって重要である場合、これをさらに詳しく検討する必要があります。)これは、両方ともより複雑な計算ですそして、標準的な多重化の同等の計算よりも計算上。事実上、すべてのLEDが点灯している場合、デューティサイクルが得られますが、n-1以下のLEDの一部(一部のみ)のパターンは100%のデューティサイクルを持つことができます。1つのLEDを点灯するときのみ、100%のデューティサイクルが保証されます。1/

最後に言及する方法は、シフトレジスタまたはIOエクスパンダを使用することです。2つのピン(Rawデータ/クロックインターフェイス、I2C、または単方向SPI)を使用すると、任意の数のLEDを制御できます。すべてのパターンのデューティサイクルは100%ですが、更新率はLEDの数に反比例します。これは最もコストのかかる方法です。15個のLEDの場合、IOピンの数が多いマイクロにアップグレードする方が安上がりです。


+1は、デューティサイクルの側面について少し説明します。Charlieplexing 1秒程度の文章では、「ドライブ意味したのn ^ 2-n個 のLED付きのn?IOピン
JYelton

チャーリープレックスは、各行から1つのライトを単純に省略した場合、多重化と非常によく似ています。実際には、ダイオードを追加することでその光を「回復」できる可能性がありますが、列ドライバーが定電流出力でない限り、他のドライバーの明るさに合わせるのは難しいかもしれません。
スーパーキャット、2011年

11

×1

例:

3つのピン上の6つのLED:

PINS        LEDS
0 1 2   1 2 3 4 5 6
0 0 0   0 0 0 0 0 0
0 1 Z   1 0 0 0 0 0
1 0 Z   0 1 0 0 0 0
Z 0 1   0 0 1 0 0 0
Z 1 0   0 0 0 1 0 0
0 Z 1   0 0 0 0 1 0
1 Z 0   0 0 0 0 0 1
0 0 1   0 0 1 0 1 0
0 1 0   1 0 0 1 0 0
0 1 1   1 0 0 0 1 0
1 0 0   0 1 0 0 0 1
1 0 1   0 1 1 0 0 0
1 1 0   0 0 0 1 0 1
1 1 1   0 0 0 0 0 0

3つの出力ピンを備えたチャーリープレックスの回路図


出力ピンデータセットと役立つ回路図をありがとうございます。
JYelton、2011年

1
回路図を描画する別の方法は、NxNグリッドとしてですが、列のみを駆動し、一次対角線を行-列短絡で置き換えます。
スーパーキャット2011年

すべてを一度にオンにできないということですか?それは私がそれらのすべてを一度にオンにしたい場合、目をだますのに十分な時間複雑化をしなければならないことを意味しますか?
MaNyYaCk 2018

@MaNyYaCkはい。あなたが正しい。
Daniel Grillo

8

多重化(ダイレクトドライブ)を使用しない場合、6つのLEDに制限されます。

charlieplexingを使用すると、nピンからn *(n-1)個のLEDを駆動できます。

I / Oエクスパンダまたはシフトレジスタを使用すると、実質的に無制限の数のLEDを駆動できます。
例:MCP23008 8ビットI2C I / Oエクスパンダ


I / Oエクスパンダーがどのようなものになるかについて詳しく説明していただけますか?
JYelton、2011年

3
I / Oエクスパンダは、I / Oピンとレジスタを含む外部チップです。I2CやSPIなどの標準通信バスを使用して、それらと通信できます。
mjh2007年

+1 TIのTLC594(focus.ti.com/lit/ds/symlink/tlc5940.pdf)を使用して多くのLEDを駆動できますが、多くのジョブにとってはやり過ぎになる場合があります。search.digikey.com/scripts/DkSearch/...
ケニー

おかげで-I / Oエクスパンダーを使用するプロジェクトを設計して、それらの使用法の学習を強制する必要があります。
JYelton、2011年


2

これが私が構築したチャーリープレックスの例です。

これは灯台のビームシミュレータであり、4つのGPIOにチャープレックスされた一連の12個のLEDを使用して、ディスクの周りに光線を掃引します。ここにビデオがあります

プロジェクトはPICベースで、私はPIC12f683を使用しています。これは8pin uPでもあり、8pin AVRに匹敵すると見なすことができます。

LEDの輝度は、約60Hzで32ステップPWMを提供する割り込みによって駆動されます。一度に2つのLEDのみを点灯させて、必要なのは各LEDに50%のデューティを与えるだけでした。また、PWMリフレッシュレートと解像度のバランスが良くなります。

非常に高速なリフレッシュレートで任意の時点で単一のLEDのみを点灯する「クラシック」な方法に固執する場合、実際に非常に単純なチャーリープレックスを使用するためのコーディング。まず、必要なPORTとTRIS(PIC固有のレジスター)を紙の上で計算し、その結果を静的配列に格納します。LED xを点灯するには、PICはアレイのインデックス[x]で値を検索し、直接PORTに書き込む必要があります(charliplexで使用されていない他のピンの状態を維持するためのマスキングを使用)

私のプロジェクトには15個ではなく12個のLEDしかありません。将来の開発のために1個のGPIOスペアを保持したかったので、5個のGPIOが許容する最大20個です。

とにかく...私はあなたの要求に似た実用的な例があると役立つかもしれないと思いました。

完全なソースコードと回路図は私のブログで入手できます


0

別のオプションは、Neopixel LEDを使用することです。制御ICが組み込まれており、必要な数のLEDを制御するために必要なピンは1つだけです。もちろん、適切な個別のLED電源が必要になります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.