7segduino

2015 年 4 月 24 日

7segduino(セブンセグ・デュイーノ)

7segduino-00

7セグメントLEDをユニットとして組み込んで利用できるように、専用基板を設計しました。Arduino互換にしてArduinoの開発環境をそのまま使えるようにしたので、「7segduino」と呼ぶことにしました。プロトタイプが完成しましたので紹介します。

1. 回路図

最低限のArduinoの構成としています。特徴的な部分だけを説明します。

7seguino-V2-schematic

【LEDドライバ】

外部にLED用のドライバを置かず、直接AVRからドライブする方式を採用し、部品数を削減しました。マトリックスになっているLEDへのピンの割り当ては、基板に配置した時に物理的に近くなるようにしています。

【クロック回路】

AVR内部のRC発振器を使いうことを推奨します。回路図の水晶発振子と負荷抵抗(22P)は実装は不要です。アプリケーションによって正確な周波数が必要な場合にだけ取り付けます。水晶発振器を利用する場合には、互換性の観点から16MHzが良いと思います。標準的なArduinoと互換になります。

なお、発振器と動作周波数によって、ブートローダとAVRのヒューズビットの設定が異なりますので、注意が必要です。

2. パーツ

組み立てに必要なパーツは次の通りです。

パーツ 数量 備考
7セグメント4桁LEDマトリックス 1 アノードコモン、色は好みで選んで下さい。
AVRチップ Mega328P 1
28PINソケット 1 省略可能
抵抗 100オーム 1/6W 8 利用する電圧とLEDの種類によって調整して下さい。
抵抗 10Kオーム 1/6W 1
積層セラミックコンデンサ 0.1uF 3
ピンヘッダ 6P一列 2
ピンヘッダ 4P一列 1
専用基板 1

【プログラムに必要な環境】

AVRチップの設定やプログラミング作業には以下の機材が必要になります。
・AVRライタ
ブートローダの書き込みに利用します。初回組み立て時のみ必要になります。
・USB-シリアルブリッジ( FTDIアダプタなど)
7segduinoが完成したあとのプログラム書き込みに利用します。

3. 組み立て方

(1)裏面の組み立て

基板の裏のシルク印刷部分に電流制限抵抗(100オーム)を8個とりつけます。 LEDのはんだづけを行うと、この面は修正が出来なくなるので、この時点でテスターで接続の確認をしておきます。

LED裏側の抵抗の取り付け

LED裏側の抵抗の取り付け

(2)表面の組み立て

基板の表面に抵抗(10Kオーム),セラミックコンデンサ(0.1uFが3個)、28PINソケットとピンヘッダ(3個)を取り付けます。

表面へICソケット、ピンヘッダ、コンデンサなどの取り付け

表面へICソケット、ピンヘッダ、コンデンサなどの取り付け

(3)ブートローダの確認

この時点で別環境でブートローダ書き込みます。その後、ブートローダ書き込み済みのMega328Pを7segduinoに取り付けて、USB-シリアル経由でArduino IDEから書き込みできることを確認します。

ISPのチェック

ISPのチェック

(4) LEDの取り付け

(オプション)裏面のリード線を切り揃えてLEDと干渉しないようにします。ピンヘッダも裏側に飛び出した部分を1.0mm以下に切ります。

LEDを基板の裏側に取り付けます。取り付け方向注意!LEDを正面から見て右側にFTDIコネクタが来るようにします。

LEDの取り付け

LEDの取り付け

(5)動作確認

Arduino IDEからプロムラムを書き込んで動作の確認を行います。動作検証には、Hello_7seg.pdeがお勧めです。

HELLO 7seg.

HELLO 7seg.

完成!

4. 使い方

専用のライブラリを用意しています。
Arduino IDEからSSegライブラリを使ってアプリケーションを記述して下さい。
Exampleにいくつか例を載せていますので参考になると思います。

/*** Hello 7seg 2digit

SEG-A(11)    PD4    4
SEG-B(7)     PB0    8
SEG-C(4)     PB3    11
SEG-D (2)    PB5    13
SEG-E(1)     PC0    14
SEG-F(10)    PD2    2  ** Change on V2
SEG-G(5)     PB2    10
SEG-DP(3)    PB4    12

DIG-1(12)    PD3    3
DIG-2(9)     PD6    6
DIG-3(8)     PD7    7
DIG-4(6)     PB1    9
*/

#include <Sseg.h>
Sseg mySseg = Sseg(4, 8, 11, 13, 14, 2, 10, 12, 3, 6, 7, 9);

uint8_t hello[] = {
       0b00000000,
       0b00000000,
       0b00000000,
       0b00000000,
       0b01101110, // H
       0b10011110, // E
       0b00011100, // L
       0b00011100, // L
       0b00111010, // o
       0b00000000, //
       NUM_PAT_7,  // 7
       0b10110110, // S
       NUM_PAT_E,  // E
       0b11110110, // G
       0b00000001
};

int p = 0;
void setup() {
  mySseg.begin();
}
#define OVERWRAP(a, x) (((x) < sizeof(a)) ? (a[(x)]) : a[((x) - sizeof(a))])

void loop() {
   uint8_t i;
   if ((++p) > sizeof(hello))
   p = 0;

 mySseg.writeRawData(
    OVERWRAP(hello, p),
    OVERWRAP(hello, p+1),
    OVERWRAP(hello, p+2),
    OVERWRAP(hello, p+3));

 mySseg.updateWithDelay(300);
}


SMD版基板とリード部品版基板で、一部ピン配置が異なります。
プログラム中の初期化パラメータを変更して下さい。


MacOSX版の場合、ライブラリは、書類 -> Arduino -> Librariesにコピーの上で利用下さい。

(Ssegライブラリは、8桁、2桁のLEDや異なるピン配置の設定をサポートしています。ライブラリの使い方の解説を追加する予定です。)

Arduino IDEのメニューでツール->マイコンボードから

「Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega328」

を選択して下さい。

5. ダウンロード

ライブラリ:SSeg-20111211.zip UPDATED on 2011/12/11

ボードレィアウト:7sedguino-brd.png

6. 応用例

応用のページを作成しました。

7segduino Application (1) 温度計

7segduino Application (2)  湿度計

7segduino Application (3) 気圧計

7segduino Application (4) 8桁化

7segduino Application (5) USB AmpMeter

7segduino Application (6) GPS Clock

7segduino Application (7) Combo sensor module

7. 参考

Spark Funにも似たモジュールがあるとtwitterで教えて頂きました。

7-Segment Serial Display – Red

http://www.sparkfun.com/products/9766

本来はシリアルまたはSPIからコマンドを受けて表示を制御するデバイスの様ですが、本機と同様にMega328PとLEDの組み合わせなので、Arduinoのブートローダを書き込めば同様のことが出来ると思います。未確認ですが、機会があれば試したいと思います。

7segduino

— Arduino with 7segment display–

7segduino-00

7セグメントLEDをユニットとして組み込んで利用できるように、専用基板を設計しました。Arduino互換にしてArduinoの開発環境をそのまま使えるようにしたので、「7segduino」と呼ぶことにしました。プロトタイプが完成しましたので紹介します。

1. 回路図

最低限のArduinoの構成としています。特徴的な部分だけを説明します。

7seguino-V2-schematic

【LEDドライバ】

外部にLED用のドライバを置かず、直接AVRからドライブする方式を採用し、部品数を削減しました。マトリックスになっているLEDへのピンの割り当ては、基板に配置した時に物理的に近くなるようにしています。

【クロック回路】

AVR内部のRC発振器を使いうことを推奨します。回路図の水晶発振子と負荷抵抗(22P)は実装は不要です。アプリケーションによって正確な周波数が必要な場合にだけ取り付けます。水晶発振器を利用する場合には、互換性の観点から16MHzが良いと思います。標準的なArduinoと互換になります。

なお、発振器と動作周波数によって、ブートローダとAVRのヒューズビットの設定が異なりますので、注意が必要です。

2. パーツ

組み立てに必要なパーツは次の通りです。

パーツ 数量 備考
7セグメント4桁LEDマトリックス 1 アノードコモン、色は好みで選んで下さい。
AVRチップ Mega328P 1
28PINソケット 1 省略可能
抵抗 100オーム 1/6W 8 利用する電圧とLEDの種類によって調整して下さい。
抵抗 10Kオーム 1/6W 1
積層セラミックコンデンサ 0.1uF 3
ピンヘッダ 6P一列 2
ピンヘッダ 4P一列 1
専用基板 1

【プログラムに必要な環境】

AVRチップの設定やプログラミング作業には以下の機材が必要になります。
・AVRライタ
ブートローダの書き込みに利用します。初回組み立て時のみ必要になります。
・USB-シリアルブリッジ( FTDIアダプタなど)
7segduinoが完成したあとのプログラム書き込みに利用します。

3. 組み立て方

(1)裏面の組み立て

基板の裏のシルク印刷部分に電流制限抵抗(100オーム)を8個とりつけます。 LEDのはんだづけを行うと、この面は修正が出来なくなるので、この時点でテスターで接続の確認をしておきます。

LED裏側の抵抗の取り付け

LED裏側の抵抗の取り付け

(2)表面の組み立て

基板の表面に抵抗(10Kオーム),セラミックコンデンサ(0.1uFが3個)、28PINソケットとピンヘッダ(3個)を取り付けます。

表面へICソケット、ピンヘッダ、コンデンサなどの取り付け

表面へICソケット、ピンヘッダ、コンデンサなどの取り付け

(3)ブートローダの確認

この時点で別環境でブートローダ書き込みます。その後、ブートローダ書き込み済みのMega328Pを7segduinoに取り付けて、USB-シリアル経由でArduino IDEから書き込みできることを確認します。

ISPのチェック

ISPのチェック

(4) LEDの取り付け

(オプション)裏面のリード線を切り揃えてLEDと干渉しないようにします。ピンヘッダも裏側に飛び出した部分を1.0mm以下に切ります。

LEDを基板の裏側に取り付けます。取り付け方向注意!LEDを正面から見て右側にFTDIコネクタが来るようにします。

LEDの取り付け

LEDの取り付け

(5)動作確認

Arduino IDEからプロムラムを書き込んで動作の確認を行います。動作検証には、Hello_7seg.pdeがお勧めです。

HELLO 7seg.

HELLO 7seg.

完成!

4. 使い方

専用のライブラリを用意しています。
Arduino IDEからSSegライブラリを使ってアプリケーションを記述して下さい。
Exampleにいくつか例を載せていますので参考になると思います。

/*** Hello 7seg 2digit

SEG-A(11)    PD4    4
SEG-B(7)     PB0    8
SEG-C(4)     PB3    11
SEG-D (2)    PB5    13
SEG-E(1)     PC0    14
SEG-F(10)    PD2    2  ** Change on V2
SEG-G(5)     PB2    10
SEG-DP(3)    PB4    12

DIG-1(12)    PD3    3
DIG-2(9)     PD6    6
DIG-3(8)     PD7    7
DIG-4(6)     PB1    9
*/

#include <Sseg.h>
Sseg mySseg = Sseg(4, 8, 11, 13, 14, 2, 10, 12, 3, 6, 7, 9);

uint8_t hello[] = {
0b00000000,
0b00000000,
0b00000000,
0b00000000,
0b01101110, // H
0b10011110, // E
0b00011100, // L
0b00011100, // L
0b00111010, // o
0b00000000, //
NUM_PAT_7,  // 7
0b10110110, // S
NUM_PAT_E,  // E
0b11110110, // G
0b00000001
};

int p = 0;
void setup() {
mySseg.begin();
}
#define OVERWRAP(a, x) (((x) < sizeof(a)) ? (a[(x)]) : a[((x) - sizeof(a))])

void loop() {
uint8_t i;
if ((++p) > sizeof(hello))
p = 0;

mySseg.writeRawData(
OVERWRAP(hello, p),
OVERWRAP(hello, p+1),
OVERWRAP(hello, p+2),
OVERWRAP(hello, p+3));

mySseg.updateWithDelay(300);
}


SMD版基板とリード部品版基板で、一部ピン配置が異なります。
プログラム中の初期化パラメータを変更して下さい。


MacOSX版の場合、ライブラリは、書類 -> Arduino -> Librariesにコピーの上で利用下さい。

(Ssegライブラリは、8桁、2桁のLEDや異なるピン配置の設定をサポートしています。ライブラリの使い方の解説を追加する予定です。)

5. ダウンロード

ライブラリ:SSeg-20110910.zip UPDATED on 2011/09/10

ボードレィアウト:7sedguino-brd.png

6. 応用例

応用のページを作成しました。

7segduino Application (1) 温度計

7segduino Application (2)  湿度計

7segduino Application (3) 気圧計

7. 参考

Spark Funにも似たモジュールがあるとtwitterで教えて頂きました。

7-Segment Serial Display – Red

http://www.sparkfun.com/products/9766

本来はシリアルまたはSPIからコマンドを受けて表示を制御するデバイスの様ですが、本機と同様にMega328PとLEDの組み合わせなので、Arduinoのブートローダを書き込めば同様のことが出来ると思います。未確認ですが、機会があれば試したいと思います。

  1. hkk
    2012 年 2 月 21 日 00:25 | #1

    キットを購入して楽しんでいます。手持ちにカソードコモンの7セグLEDがありますので、二台目は自作しようかと思案しておりますが、SSegライブラリに対応するサンプルはあるのでしょうか?

  2. 2012 年 2 月 21 日 22:15 | #2

    Ssegライブラリの中のexamplesというフォルダに例題がありますので、ご参照下さい。

  3. hkk
    2012 年 2 月 21 日 22:58 | #3

    ありがとうございました。拝見しまして、方法がわかりました。

  1. 2011 年 12 月 10 日 14:01 | #1
  2. 2013 年 7 月 31 日 14:56 | #2
  3. 2013 年 10 月 20 日 20:17 | #3
コメントは受け付けていません。