共通アノード7セグメント4桁ディスプレイの使い方は?
How Use Common Anode 7 Segment
解決:
ポールの答えを補足するのと同じように、私は彼の姿の7セグメント4桁ディスプレイを駆動する方法を示す短いプログラムを書きました。
これは実際には一般的なカソードディスプレイであるため、プログラムは、図の特定の配線と同様に、それを想定しています。興味深い部分はrefresh_display()関数。定期的に呼び出す必要があります。アルゴリズムは次のとおりです。
- 表示したい数字の1つに適切な信号で7つのアノードを駆動します
- 設定
NPNトランジスタを介してその桁のカソードを制御する出力をHIGHにします。
- 2.5ミリ秒待つ(リフレッシュレート100 Hzの場合)
- 設定
カソード制御出力をLOWにする
- 次の桁に移動します。
遅延なしの点滅Arduinoチュートリアルで説明されている手法を使用して、CPUをブロックせずに待機が行われることに注意してください。プログラムは次のとおりです。
const int NB_DIGITS = 4; // 4桁の表示constint FIRST_ANODE = 2; //ピン2..8のアノードa..gconst int FIRST_CATHODE = 9; //カソード、右から左、ピン9..12 //表示する数字、右から左。 uint8_t桁[NB_DIGITS]; //使用するすべてのピンを出力として設定します。 void init_display(){for(int i = 0; i<7; i++) pinMode(FIRST_ANODE + i, OUTPUT); for (int i = 0; i < NB_DIGITS; i++) pinMode(FIRST_CATHODE + i, OUTPUT); } // This should be called periodically. void refresh_display() { // Our 7-segment 'font'. static const uint8_t font[10] = { //abcdefg 0b1111110, // 0 0b0110000, // 1 0b1101101, // 2 0b1111001, // 3 0b0110011, // 4 0b1011011, // 5 0b1011111, // 6 0b1110000, // 7 0b1111111, // 8 0b1111011 // 9 }; // Wait for 2.5 ms before switching digits. static uint32_t last_switch; uint32_t now = micros(); if (now - last_switch < 2500) return; last_switch = now; // Switch off the current digit. static uint8_t pos; digitalWrite(FIRST_CATHODE + pos, LOW); // Set the anodes for the next digit. pos = (pos + 1) % NB_DIGITS; uint8_t glyph = font[digits[pos]]; for (int i = 0; i < 7; i++) digitalWrite(FIRST_ANODE + i, glyph & 1 <= 1000) { digits[3] = digits[2]; digits[2] = digits[1]; digits[1] = digits[0]; digits[0] = (digits[0] + 1) % 10; last_change = now; } refresh_display(); } Paulは、Multiplex7SegArduinoライブラリの使用を提案する視差に関するチュートリアルへのリンクを提供しました。このライブラリは、使用されるピンについての仮定を行わないため、上記のサンプルコードよりも一般的です。しかし、ライブラリとこのコードの大きな違いは、タイミングの管理方法にあります。
- ライブラリは、タイマー2オーバーフロー割り込みによって駆動されます。これにより、非常に安定したタイミングが提供されますが、このジョブ専用のタイマーが1つ必要になります。
- 上記のコードは、ユーザーが呼び出すことに依存しています
十分な頻度でrefresh_display()。専用のハードウェアリソースは必要ありませんが、時間がかかりすぎるプログラムではうまく機能しません。loop():それはあなたが呼び出すのが好きではありません遅れ()。
LEDなどの完全な基本を紹介します。4桁の7セグメントディスプレイは、複数の「LED技術」を組み合わせたものです。
LEDの配線
LED、または発光ダイオードは、Arduinoの楽しいものの1つです。
基本的に、それらは使いやすく、電源を入れれば点灯します。
ある種の極性があるため、煩わしい場合があります。つまり、正しく配線した場合にのみ機能します。正と負の電圧を逆にすると、まったく点灯しません。
煩わしいのですが、とても便利です。
カソードvsアノード
従来のLEDでは、長いリード線は(+)、アノードです。もう1つのリードは(-)カソードです。
'または、誰かが脚をトリミングした場合は、LEDの外側のケーシングの平らな端を見つけてみてください。フラットエッジに最も近いピンは、負のカソードピンになります。 -Sparkfun
出典:https://learn.sparkfun.com/tutorials/polarity/diode-and-led-polarity

基本配線
インターネットから画像をリッピングしたので、これが正しいかどうかはわかりません。

LEDの配線は非常に簡単で、アノード(+)は、できれば電流制限抵抗を介して正の電圧に接続します。カソード(-)はグランドに接続します(プラス側に電流制限抵抗がない場合は、電流制限抵抗を使用します)。
電流制限抵抗は、LEDが短絡して、LEDまたはマイクロコントローラー/ Arduinoに損傷を与えるのを防ぎます。
複数のLED、マトリックス、RGB LED
複数のLEDを使用すると、多くの場合、プラス側が接続されている(+)、「共通アノード」、またはすべてが(-)「共通カソード」に接続されています。
基本的にはこれになります。

共通のカソードの場合、オンにしたいピンに電流を供給します。
共通アノードの場合、LEDを介して電流をシンクします。
多重化(複数桁、7セグメント)
視差のチュートリアルを確認する必要があります:http://learn.parallax.com/4-digit-7-segment-led-display-arduino-demo

多くのLEDがある場合、それらを「多重化」するのが賢明なことがよくあります。通常、LEDの「グループ」をすばやく通過するため、すべてが同時にオンになっているように見えます。
通常、LEDの列から電流をシンクし、行の個々のLEDに電流を供給します。
または、LEDの列に電流を供給し、行の個々のLEDから電流をシンクします。
これにより、アクティブにする列と、その列のどのLEDを点灯させるかを選択できます。これらの列/行をすばやく変更すると、はるかに少ないピンで複数のLEDを制御できるようになります。
ソフトウェアの切り替えを処理したくない場合は、このためのディスプレイコントローラーもあります。
したがって、4桁、多重化された7セグメント、共通アノードがある場合
図は次のようになります。

http://www.mytutorialcafe.com/Microcontroller%20Application%20C%207segmen.htm