カソードコモンの8セグメントLEDへ表示する(その1)


Raspberry Piで8セグメントのLEDを使ってみようと思いましたが、基礎的な解説のページがなかなか見つからなかったので
実験をしながら使い方を紹介します。
使用するLEDは3桁の8セグメントLEDでカソード(マイナス側)がコモンのタイプです。
8セグメントLEDのスペックは以下のとおりです。
8セグメントのLEDというのは、8個のLEDが1つのパッケージに納められているもので、
3桁の8セグメントLEDになると、8*3個のLEDが1つのパッケージに納められているものです。




8セグメントLEDの動作は、基本的にエルチカ(LEDチカチカ)と同じです。
使用したセグメントLEDは下に6本、上に5本のピンがあるもので、
ピン配置は下の左端から1→2→3→4→5→6となり
上の右端から7→8→9→10→11となります。
データーシートはこ ちらにあります。

なお、3桁の8セグメントLEDのピン配置は2、4、5番ピンがコモンのものと、
8、9、12番ピンがコモンのものの2パターンあるようです。
見分け方ですが、12番ピンが無いものは2、4、5番ピンがコモン、
6番ピンが無いものは8、9、12番がコモンです。
8、9、12番がコモンのデータシートはこちらに ありま す。

【12番ピンが無いLEDのピン配置】
LEDのPin No. Function Position
1 Segment "c" 下側一番左
2 Digit 1 Common(一番左側の桁) 下側左から2番目
3 Segment "d" 下側左から3番目
4 Digit 2 Common(真ん中の桁) 下側左から4番目
5 Digit 3 Common(一番右側の桁) 下側左から5番目
6 Segment D.P 下側左から6番目
7 Segment "b" 上側一番右
8 Segment "f" 上側右から2番目
9 Segment "a" 上側右から3番目
10 Segment "e" 上側右から4番目
11 Segment "g" 上側右から5番目
12 欠番 上側右から6番目


【6番ピンが無いLEDのピン配置】
LEDのPin No. Function Position
1 Segment "e" 下側一番左
2 Segment "d" 下側左から2番目
3 Segment D.P 下側左から3番目
4 Segment "c" 下側左から4番目
5 Segment "g" 下側左から5番目
6 欠番 下側左から6番目
7 Segment "b" 上側一番右
8 Digit 1 Common(一番左側の桁) 上側右から2番目
9 Digit 2 Common(真ん中の桁) 上側右から3番目
10 Segment "f" 上側右から4番目
11 Segment "a" 上側右から5番目
12 Digit 3 Common(一番右側の桁) 上側右から6番目


回路図は以下のとおりです。
3桁のLEDの部品図が無かったので4桁のLEDの図で代用しています。
LEDのPin No. Function Raspberryのピン番号
1 Segment "c"
2 Digit 1 Common(一番左側の桁) 6(GND)
3 Segment "d"
4 Digit 2 Common(真ん中の桁)
5 Digit 3 Common(一番右側の桁)
6 Segment D.P
7 Segment "b"
8 Segment "f"
9 Segment "a" 11
10 Segment "e"
11 Segment "g"

使用する抵抗ですが、順方向電圧が2.0Vから2.8V、順方向電流が10mAなのでLEDのときと同じ計算で
抵抗値(Max)=(3.3V-2.0V)/0.01A=130オーム
抵抗値(Min)=(3.3V-2.8V)/0.01A=50オーム
MaxとMinの間の抵抗を使います。
私は100オームの抵抗を使いました。
3桁のLEDのパーツが無かったので4桁のLEDで代用していますがGNDが2番ピンです。




ソースコードもエルチカのものと同じです。
#include <stdio.h>
#include <stdlib.h>
#include <wiringPi.h>

int main (int argc, char **argv) {
    int i,j,k,l,m;
    int Pin;

    if(wiringPiSetup() == -1) return 1;
    Pin=0;
    pinMode(Pin, OUTPUT);

    for (i=0;i<10;i++) {
        digitalWrite(Pin, 1);
        delay(500);
        digitalWrite(Pin, 0);
    }

    exit;
}

一番左の桁の上側のLEDが点滅します。
エルチカそのまんまです。



次回は全てのセグメントを点滅させます。