共通のアノード7セグメント、4桁ディスプレイの使い方は?

この疑問を例として、以下の(私自身の)答えにしてください。

私は7セグメント、4桁のLEDディスプレイを持っていますが、どのように配線するのかは分かりません。

私は共通の陽極/陰極の違いを理解していない、と私は奇妙なLEDごとに2つのピンがありません。 かなり最近、「7セグメント4桁の共通アノード」に関する質問が削除されました。 その瞬間、私は答えをタイプしていました。

しかし、私はまだあなたやあなたにそれを尋ねた人と答えを分けたいと思っています。 詳細は私の回答を確認/更新してください。 具体的に言えば、誰かが作業コードを追加できますか、現時点ではできません。

6
追加された 編集された
ビュー: 21
実際にはそのためのオプションがあります。しかし、私の質問のコメントも "背景ストーリー"を伝えます。私は質問に答えていた、それは削除されました。私の答えは無制限に投稿する必要があると感じました。そう、はい、私はしました。しかし、それは有効な方法です、私は質問の前に答えを持っていました。それで私には意味がありました。あなたが本当に良い質問(そして答え)を持っていれば、私は同じことをするように促すことができます。
追加された 著者 dotnetengineer,
ちょっと興味があるんだけど。あなたはそれに答えることができるように質問を投稿しましたか?
追加された 著者 anu,

2 答え

ポールの答えを補うように、私は短いプログラムを書いて どのように彼の図の7セグメント4桁のディスプレイを駆動する:

wiring schematic

これは実際には一般的な陰極ディスプレイであるため、プログラムでは、 図の特定の配線だけでなく、興味深い部分は 定期的に呼び出される refresh_display()関数です。 アルゴリズムは次のとおりです。

  • 数字の1つに適切な信号を入力して7つのアノードを駆動します 我々は
  • HIGH を設定すると、 NPNトランジスタ
  • 2.5ミリ秒間待つ(100 Hzのリフレッシュレートの場合)
  • カソード制御出力を LOW に設定します
  • 次の桁に移動します。

待機はCPUをブロックすることなく、 吹き飛ばしに記載されている技術を使用して 遅延 Arduino チュートリアル。ここにプログラムがあります:

const int NB_DIGITS     = 4; //4-digit display
const int FIRST_ANODE   = 2; //anodes a..g on pins 2..8
const int FIRST_CATHODE = 9; //cathodes, right to left, on pins 9..12

// Digits to display, from right to left.
uint8_t digits[NB_DIGITS];

// Set all the used pins as outputs.
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 << (6-i));

   //Switch digit on.
    digitalWrite(FIRST_CATHODE + pos, HIGH);
}

/***********************************************************************
 * Example usage.
 */

void setup()
{
    init_display();
}

void loop()
{
    uint32_t now = millis();

   //Change the number displayed every second.
    static uint32_t last_change;
    if (now - last_change >= 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は、チュートリアルに関するリンクを提供しました。 パララックス それは Multiplex7Seg Arduinoライブラリ。そのライブラリは、サンプルコードよりも一般的です これは、使用されるピンについては仮定していないためです。しかし、大きな ライブラリとこのコードの違いはタイミングです 管理されている:

  • ライブラリはTimer 2のオーバーフロー割り込みによって駆動されます。これはすべきである 1つのタイマーを犠牲にして、非常に安定したタイミングを提供する この仕事に専念しています。
  • 上記のコードは、 refresh_display()を頻繁に呼び出すユーザに依存しています 十分な。専用のハードウェアリソースは必要ありませんが、 loop()に時間がかかりすぎるプログラムではうまくいきません。 あなたが delay()を呼び出すのが好きではありません。
6
追加された
これが私がオープンソースのものが好きな理由です。ワークロードを他の世界と共有して、本当に素晴らしいものを作成することができます。他の開発者から多くのことを学ぶことができます。その知識は他の人に隠されているだけでなく永続的なものになります。
追加された 著者 dotnetengineer,

私はLEDの等の完全な基礎を試してみましょう。 4桁の7セグメントディスプレイは、複数の「LED技術」の組み合わせです。

ワイヤリングLED

LED、または発光ダイオードは、Arduinoの楽しいものの1つです。

本質的に、彼らは使いやすく、電源を入れて、彼らは明るくなるでしょう。

何らかの種類の極性があるため、迷惑になる可能性があります。これは、正しく配線するときにのみ機能することを意味します。正と負の電圧を逆にすると、まったく点灯しません。

それは迷惑でもあり、とても役に立ちます。

陰極対陽極

伝統的なLEDでは、長いリードはアノード(+)です。 もう一方のリードは( - )カソードです。

"あるいは、誰かが足をつまんだら、LEDの外側ケーシングの平坦なエッジを見つけてみてください。平坦なエッジに最も近いピンは陰極のピンです。" - スパークフン

Source: https://learn.sparkfun.com/tutorials/polarity/diode-and-led-polarity

Sparkfun

基本配線

私はインターネットからのイメージをリッピングしたので、これが正しいかどうかはわかりません。

Basic LED wiring

LEDの配線は非常に簡単ですが、陽極(+)は正の電圧に接続することをお勧めします。 陰極( - )はグランドに接続します(正側に電流制限抵抗がない場合は電流制限抵抗付き)。

電流制限抵抗はLEDが短絡するのを避け、LEDまたはマイクロコントローラ/ Arduinoを損傷します。

複数のLED、マトリックス、RGB LED

複数のLEDを使用する場合は、プラス側が接続(+)、「共通アノード」またはすべてが( - )「共通カソード」に接続されていることがよくあります。

基本的にはこれになるでしょう。

RGB common cathode/anode

一般的な陰極の場合、使用したいピンに電流を供給します。

共通のアノードでは、LEDに電流を流します。

多重化(複数桁、7セグメント)

You should check out the tutorial of parallax: http://learn.parallax.com/4-digit-7-segment-led-display-arduino-demo

Parallax 4digit7seg

あなたは多くのLEDを持っているとき、それらを「多重化」することはしばしば賢いことです。通常、LEDの「グループ」をすばやく通過するので、同時にすべてがオンになっているように見えます。

通常は、LEDの列から電流をシンクして、行の個々のLEDに電流を供給します。

または、LEDの列に電流を供給し、行の個々のLEDから電流をシンクします。

そのため、アクティブにする列とその列のどのLEDを点灯させるかを選択できます。これらの列/行をすばやく変更することで、ピン数の少ない複数のLEDを制御することができます。

あなたのソフトウェアの切り替えを気にしたくなければ、このためのディスプレイコントローラもあります。

したがって、4桁のマルチプレックスされた7セグメントの共通アノード

図は次のようになります。

enter image description here

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

5
追加された