Maruduino 拡張部品 7セグメントLEDと24KEYの実装について [組み立て]
サンプルのスケッチを掲載します。
ただ、実行したArduinoのバージョンが古い(0018)ので、Arduinoの現在のバージョンとの違いが影響を及ぼすかもしれません。
仕組みとしては追加した3個のICはIO Expanderと呼ばれるもので、I2Cバスに接続されてパラレルの入出力機能を拡張するものです。
設定によって入力にしたり、出力とする事が出来ますが、7SEG LEDをドライブする場合は3つ共に出力とします。
回路図の7SEG LEDのシートの上側にトランジスタが8個並んでいる訳ですが、この8個のトランジスタがそれぞれの桁の7SEG LEDに対して電源を供給する事となります。
シート名EXTENTION IOのIO ExpanderのIC5に接続され、IO ExpanderからLOWを出力したトランジスタがONとなり、7SEG LEDに電気を供給します。
※この時注意が必要なのが、8個のトランジスタのうち、一度にONするのは必ず一つに限ります。他のトランジスタにはHIGHを出力する様にIO Expanderの出力を決めます。
トランジスタを駆動するIO ExpanderのI2Cバス上のアドレスは0x40となります。
残り2つのIO Expanderがそれぞれの行の7SEG LEDのセグメント(光る部分)をコントロールします。
7SEG LEDのそれぞれのセグメントにはアルファベットが割り付けられており、一番上をaとして時計回りにb、c、d、e、fと回り、真中のセグメントがgになります。
つまり数字で7を表示したい時はa、b、cを光らせれば7になります。
IO Expanderの出力をLOWとすれば、そのbitに接続されたセグメントが光ります。
上の行のコントロールをするIO ExpanderのI2Cバス上のアドレスは0x42、下が0x44です。
さて充分に早い時間間隔でONするトランジスタを切り替えていきます。トランジスタの位置がそのまま桁となっている点に注意してください。
通常人間は30Hz以上のフリッカーには反応できず点灯しっ放しに見えます。つまり最初の桁から最後の桁までの切り替えを30Hz以上で回さないといけないので、切り替えの周期はその8倍で240Hz以上は必要でしょう。
※IO Expanderを入力として使う時は、Writeモードで入力したいbitに1を書き込んで、Readモードで読み込んでください。
以下のスケッチはMsTimer2を使って1msでカウントアップを行っています。
---------------------------------------------
以下、昔の書き込み
---------------------------------------------
まだマルツさんからは部品セットとして販売していませんが、7セグメントLEDと24KEYは同時に実装する事ができません。
機能的にはI2C エキスパンドIOが入力モードか出力モードの何れかしか選択できないので、7セグメントLEDでは出力、24KEYでは入力と同時設定はできないものです。
ただ物理的に実装は可能なので、7セグメントLEDと24KEYの両方を実装してしまうこともあり得るのですが、いまの回路ではこれに対応できません。最悪ではLEDかトランジスタの故障と言う事になります。
実装はかならずどちらかを選んでください。
どうしても一つの基板で7セグメントLEDと24KEYを実装したい場合は、トランジスタを3pinのソケットヘッダーを使って実装(差し込む)事をお勧めします。24KEYを使う場合はトランジスタを外してしまいます。
私も手持ちのMaruduinoではそうしています。
ただ、実行したArduinoのバージョンが古い(0018)ので、Arduinoの現在のバージョンとの違いが影響を及ぼすかもしれません。
仕組みとしては追加した3個のICはIO Expanderと呼ばれるもので、I2Cバスに接続されてパラレルの入出力機能を拡張するものです。
設定によって入力にしたり、出力とする事が出来ますが、7SEG LEDをドライブする場合は3つ共に出力とします。
回路図の7SEG LEDのシートの上側にトランジスタが8個並んでいる訳ですが、この8個のトランジスタがそれぞれの桁の7SEG LEDに対して電源を供給する事となります。
シート名EXTENTION IOのIO ExpanderのIC5に接続され、IO ExpanderからLOWを出力したトランジスタがONとなり、7SEG LEDに電気を供給します。
※この時注意が必要なのが、8個のトランジスタのうち、一度にONするのは必ず一つに限ります。他のトランジスタにはHIGHを出力する様にIO Expanderの出力を決めます。
トランジスタを駆動するIO ExpanderのI2Cバス上のアドレスは0x40となります。
残り2つのIO Expanderがそれぞれの行の7SEG LEDのセグメント(光る部分)をコントロールします。
7SEG LEDのそれぞれのセグメントにはアルファベットが割り付けられており、一番上をaとして時計回りにb、c、d、e、fと回り、真中のセグメントがgになります。
つまり数字で7を表示したい時はa、b、cを光らせれば7になります。
IO Expanderの出力をLOWとすれば、そのbitに接続されたセグメントが光ります。
上の行のコントロールをするIO ExpanderのI2Cバス上のアドレスは0x42、下が0x44です。
さて充分に早い時間間隔でONするトランジスタを切り替えていきます。トランジスタの位置がそのまま桁となっている点に注意してください。
通常人間は30Hz以上のフリッカーには反応できず点灯しっ放しに見えます。つまり最初の桁から最後の桁までの切り替えを30Hz以上で回さないといけないので、切り替えの周期はその8倍で240Hz以上は必要でしょう。
※IO Expanderを入力として使う時は、Writeモードで入力したいbitに1を書き込んで、Readモードで読み込んでください。
以下のスケッチはMsTimer2を使って1msでカウントアップを行っています。
---------------------------------------------
#include <MsTimer2.h> #include <Wire.h> //const int I2C_SEL_ADR = 0x70 >> 1; //_ONSEMI_ //const int I2C_SEG1_ADR = 0x72 >> 1; //_ONSEMI_ //const int I2C_SEG2_ADR = 0x74 >> 1; //_ONSEMI_ const int I2C_SEL_ADR = 0x40 >> 1; //_NXP const int I2C_SEG1_ADR = 0x42 >> 1; //_NXP const int I2C_SEG2_ADR = 0x44 >> 1; //_NXP unsigned long systim; unsigned long nxttim = 50UL; #define SEG_A 0b10000000 #define SEG_B 0b00100000 #define SEG_C 0b00001000 #define SEG_D 0b00000010 #define SEG_E 0b00000100 #define SEG_F 0b00010000 #define SEG_G 0b01000000 #define SEG_DP 0b00000001 const unsigned char seg[] = { ~(SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F), //0:abcdef ~(SEG_B | SEG_C), //1:bc ~(SEG_A | SEG_B | SEG_D | SEG_E | SEG_G), //2:abdeg ~(SEG_A | SEG_B | SEG_C | SEG_D | SEG_G), //3:abcdg ~(SEG_B | SEG_C | SEG_F | SEG_G), //4:bcfg ~(SEG_A | SEG_C | SEG_D | SEG_F | SEG_G), //5:acdfg ~(SEG_A | SEG_C | SEG_D | SEG_E | SEG_F | SEG_G), //6:acdefg ~(SEG_A | SEG_B | SEG_C), //7:abc ~(SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F | SEG_G), //8:abcdefg ~(SEG_A | SEG_B | SEG_C | SEG_D | SEG_F | SEG_G), //9:abcdfg 0b11111111, //blank 0b11111111, //blank 0b11111111, //blank 0b11111111, //blank 0b11111111, //blank 0b11111111, //blank }; void I2C_Write( unsigned char adr, unsigned char data ) { Wire.beginTransmission( adr ); Wire.send( data ); Wire.endTransmission(); } static void drive_seg( void ) { static int keta; unsigned char sel,seg1,seg2; switch( keta ) { case 0 : /*LSB*/ sel = 0x7f; seg1 = seg[systim % 10]; // seg2 = seg[systim % 10]; break; case 1 : sel = 0xbf; seg1 = seg[(systim / 10) % 10]; // seg2 = seg[(sec / 10) % 10]; break; case 2 : sel = 0xdf; seg1 = seg[(systim / 100UL) % 10]; // seg2 = seg[(sec / 100UL) % 10]; break; case 3 : sel = 0xef; seg1 = seg[(systim / 1000UL) % 10]; // seg2 = seg[(sec / 1000UL) % 10]; break; case 4 : sel = 0xf7; seg1 = seg[(systim / 10000UL) % 10]; // seg2 = seg[(sec / 10000UL) % 10]; break; case 5 : sel = 0xfb; seg1 = seg[(systim / 100000UL) % 10]; // seg2 = seg[(sec / 100000UL) % 10]; break; case 6 : sel = 0xfd; seg1 = seg[(systim / 1000000UL) % 10]; // seg2 = seg[(sec / 1000000UL) % 10]; break; case 7 : /*MSB*/ sel = 0xfe; seg1 = seg[(systim / 10000000UL) % 10]; // seg2 = seg[(sec / 10000000UL) % 10]; break; } I2C_Write( I2C_SEL_ADR, 0xff ); I2C_Write( I2C_SEG1_ADR, seg1 ); I2C_Write( I2C_SEG2_ADR, seg1 ); I2C_Write( I2C_SEL_ADR, sel ); if( ++keta > 7 ) keta = 0; } static void systim_hdr( void ) { systim++; } void setup() { Wire.begin(); I2C_Write( I2C_SEL_ADR, 0xff ); I2C_Write( I2C_SEG1_ADR, 0xff ); I2C_Write( I2C_SEG2_ADR, 0xff ); MsTimer2::set( 1, systim_hdr ); MsTimer2::start(); } void loop() { drive_seg(); }
以下、昔の書き込み
---------------------------------------------
まだマルツさんからは部品セットとして販売していませんが、7セグメントLEDと24KEYは同時に実装する事ができません。
機能的にはI2C エキスパンドIOが入力モードか出力モードの何れかしか選択できないので、7セグメントLEDでは出力、24KEYでは入力と同時設定はできないものです。
ただ物理的に実装は可能なので、7セグメントLEDと24KEYの両方を実装してしまうこともあり得るのですが、いまの回路ではこれに対応できません。最悪ではLEDかトランジスタの故障と言う事になります。
実装はかならずどちらかを選んでください。
どうしても一つの基板で7セグメントLEDと24KEYを実装したい場合は、トランジスタを3pinのソケットヘッダーを使って実装(差し込む)事をお勧めします。24KEYを使う場合はトランジスタを外してしまいます。
私も手持ちのMaruduinoではそうしています。
Maruduinoにシールド基板を搭載する。 [組み立て]
Maruduinoもシールド基板を搭載する事ができます。
何故かここの実装について今まで書いていなかったので、今回、書いておきます。
シングルラインのソケットヘッダー(6ピン2個と8ピン2個)を実装しますが、やはり一旦シールド基板側にソケットヘッダーを挿してしまって、その上でMaruduinoと合体させると、ヘッダーを気持ちよく実装できます。
ひっくり返して四隅を半田付け後、問題が無い事を確認したら全部半田付けして完了です。
何故かここの実装について今まで書いていなかったので、今回、書いておきます。
シングルラインのソケットヘッダー(6ピン2個と8ピン2個)を実装しますが、やはり一旦シールド基板側にソケットヘッダーを挿してしまって、その上でMaruduinoと合体させると、ヘッダーを気持ちよく実装できます。
ひっくり返して四隅を半田付け後、問題が無い事を確認したら全部半田付けして完了です。
Prototyping Lab ―「作りながら考える」ためのArduino実践レシピ
- 作者: 小林 茂
- 出版社/メーカー: オライリージャパン
- 発売日: 2010/05/27
- メディア: 大型本
Maruduinoの時計機能(リアルタイムクロック)追加パーツの組み立て [組み立て]
※このリアルタイムクロック部品セットはMaruduinoの拡張機能です。実装位置がブレッドボードの位置と重なっていますので、ブレッドボードを外すか、位置をずらす必要があります。
近日中にマルツ電波さんから時計機能モジュールMRX-8564が発売となりますので、RTC(Real Time Clock)周りの実装について解説します。
まず背の低い部品と言う事で2つのダイオードを実装します。極性方向に注意してください。
左のD7はショットキーバリアダイオード(RB441Q-40)。右のD6は一般的なシリコンダイオード(1N4148)です。
どちらも代替品は沢山有ると思います。但しD6にショットキーバリアダイオードは実装しないでくださいね。バックアップ電池があっという間に無くなってしまいますから。
MRX-8564を実装します。写真ではICソケットを使用していますが、実際のパーツセットにはICソケットは含まれていません。
ArduinoとI2CデバイスであるMRX-8564間の通信では信号線にプルアップ抵抗を必要とします。
プルアップを行う方法は2つありまして、MRX-8564上のジャンパーJ1とJ2の半田を盛ってショートするか、Maruduinoの基板上のR62~R64を実装するかです。
どちらかを使って信号線のプルアップを行います。
なおMRX-8564上のジャンパーJ3をショートすると、割込みに合わせてLEDがチカチカしますが、これはお好みで。
R62~R64のカラーコードですが、2KΩの抵抗は赤黒赤金、4.7KΩの抵抗は黄紫赤金です。
基本パーツセットの中の6ピンソケットヘッダーをCN15に実装します。ちょっとやり難い位置にありますので、注意してください。
半田面にコイン電池ホルダーを実装します。この電池でMRX-8564のバックアップを行い、電源が切れても時刻の更新、アラーム時刻の保持が出来るようになります。
※注意!電池を搭載するのは組み立てが完了してからです。
裏から搭載しますので、表から半田付けを行いますが、写真手前の半田付けが結構半田が乗り難いので、しっかり温めて半田付けを行ってください。もう少しサーマルを大きく取ればよかったですね。
必要な配線を行います。基板上の白い文字を参考にして以下を読んでください。
まずMRX-8564への配線です。
AN5(CN2)とSCL(CN15)
AN4(CN2)とSDA(CN15)
DI2(CN5)とINT(CN15)
これでArduinoからMRX-8564にアクセスできるようになります。
LCDへの配線です。
DI8(CN5)とRS(CN14)
DI9(CN5)とE(CN14)
DI4(CN5)とD4(CN14)
DI5(CN5)とD5(CN14)
DI6(CN5)とD6(CN14)
DI7(CN5)とD7(CN14)
スピーカー出力及びスイッチとの接続です。
DI13(CN5)とAUX1(CN11)
DI17(CN3)とSW1(CN11)
DI16(CN3)とSW2(CN11)
DI15(CN3)とSW3(CN11)
DI14(CN3)とSW4(CN11)
近日中にマルツ電波さんから時計機能モジュールMRX-8564が発売となりますので、RTC(Real Time Clock)周りの実装について解説します。
まず背の低い部品と言う事で2つのダイオードを実装します。極性方向に注意してください。
左のD7はショットキーバリアダイオード(RB441Q-40)。右のD6は一般的なシリコンダイオード(1N4148)です。
どちらも代替品は沢山有ると思います。但しD6にショットキーバリアダイオードは実装しないでくださいね。バックアップ電池があっという間に無くなってしまいますから。
MRX-8564を実装します。写真ではICソケットを使用していますが、実際のパーツセットにはICソケットは含まれていません。
ArduinoとI2CデバイスであるMRX-8564間の通信では信号線にプルアップ抵抗を必要とします。
プルアップを行う方法は2つありまして、MRX-8564上のジャンパーJ1とJ2の半田を盛ってショートするか、Maruduinoの基板上のR62~R64を実装するかです。
どちらかを使って信号線のプルアップを行います。
なおMRX-8564上のジャンパーJ3をショートすると、割込みに合わせてLEDがチカチカしますが、これはお好みで。
R62~R64のカラーコードですが、2KΩの抵抗は赤黒赤金、4.7KΩの抵抗は黄紫赤金です。
基本パーツセットの中の6ピンソケットヘッダーをCN15に実装します。ちょっとやり難い位置にありますので、注意してください。
半田面にコイン電池ホルダーを実装します。この電池でMRX-8564のバックアップを行い、電源が切れても時刻の更新、アラーム時刻の保持が出来るようになります。
※注意!電池を搭載するのは組み立てが完了してからです。
裏から搭載しますので、表から半田付けを行いますが、写真手前の半田付けが結構半田が乗り難いので、しっかり温めて半田付けを行ってください。もう少しサーマルを大きく取ればよかったですね。
必要な配線を行います。基板上の白い文字を参考にして以下を読んでください。
まずMRX-8564への配線です。
AN5(CN2)とSCL(CN15)
AN4(CN2)とSDA(CN15)
DI2(CN5)とINT(CN15)
これでArduinoからMRX-8564にアクセスできるようになります。
LCDへの配線です。
DI8(CN5)とRS(CN14)
DI9(CN5)とE(CN14)
DI4(CN5)とD4(CN14)
DI5(CN5)とD5(CN14)
DI6(CN5)とD6(CN14)
DI7(CN5)とD7(CN14)
スピーカー出力及びスイッチとの接続です。
DI13(CN5)とAUX1(CN11)
DI17(CN3)とSW1(CN11)
DI16(CN3)とSW2(CN11)
DI15(CN3)とSW3(CN11)
DI14(CN3)とSW4(CN11)
ITRONプログラミング入門―H8マイコンとHOSで始める組み込み開発
- 作者: 濱原 和明
- 出版社/メーカー: オーム社
- 発売日: 2005/04/25
- メディア: 単行本
Maruduino(Arduinoベースボード)基本パーツセット実装。おまけ編 [組み立て]
このタクトスイッチです。リセットスイッチとなっています。
MaruduinoをArduino化するキットには付属していたのですが、どうしても基本パーツセットにも欲しいので、マルツさんに付属すようにお願いしておきました。
安心してバンバンリセット掛けてください。
MaruduinoをArduino化するキットには付属していたのですが、どうしても基本パーツセットにも欲しいので、マルツさんに付属すようにお願いしておきました。
安心してバンバンリセット掛けてください。
ITRONプログラミング入門―H8マイコンとHOSで始める組み込み開発
- 作者: 濱原 和明
- 出版社/メーカー: オーム社
- 発売日: 2005/04/25
- メディア: 単行本
Prototyping Lab ―「作りながら考える」ためのArduino実践レシピ
- 作者: 小林 茂
- 出版社/メーカー: オライリージャパン
- 発売日: 2010/05/27
- メディア: 大型本
Maruduinoの基本パーツの組み立て4 [組み立て]
外部電源入力を実装します。これで基本パーツセットの組み立ては最後です。
ITRONプログラミング入門―H8マイコンとHOSで始める組み込み開発
- 作者: 濱原 和明
- 出版社/メーカー: オーム社
- 発売日: 2005/04/25
- メディア: 単行本
大人の科学マガジン Vol.27(8ビットマイコン) (Gakken Mook)
- 作者: 大人の科学マガジン編集部
- 出版社/メーカー: 学習研究社
- 発売日: 2010/05/12
- メディア: ムック
Prototyping Lab ―「作りながら考える」ためのArduino実践レシピ
- 作者: 小林 茂
- 出版社/メーカー: オライリージャパン
- 発売日: 2010/05/27
- メディア: 大型本
Maruduinoの基本パーツの組み立て3 [組み立て]
残りのスイッチ、LED、それにオーディオ出力の実装を行います。
残っていたスイッチ、LEDの取り付けを終わらせてしまいます。手順は前々回の取り付けを参考に行ってください。 | |
実装位置は基板中央、上側、ちょうどLCDの真下になりますので、一旦LCDを外しておいてください。 | |
セオリー通りちっさい方の抵抗から実装します。 0Ωの抵抗は黒い帯が一本です。 10Ωの抵抗は茶黒黒金です。 300KΩの抵抗は橙黒黄金です。 |
|
おっきい方の抵抗を実装します。 | |
ICを実装しますが、新品のICは大概が足が広がった状態ですので、事前に平らなところで広がりを修正しておきます。 | |
かならずこの方向で実装してください。 | |
C16(1000pF、102と表記)とC15(0.047μF、473と表記)を実装します。頭の黒いのがC16です。 | |
オーディオ出力用のジャックを取り付けます。 | |
電解コンデンサを実装しますが、電解コンデンサには極性(プラスとマイナス)があります。これを間違えると、最悪は破裂とかしてしまいます。写真の様に白い帯が縦に入っている方がマイナスとなります。基板上には白い円の中で一部白く塗りつぶされているところがありますが、これがマイナスを示しています。 | |
立てて実装するとLCDとぶつかってしまいますので、写真の様に寝かせて実装します。本体から大体2mmくらいの位置を、ピンセットで折り曲げ加工してください。 ちょっと太いほうが220μF(C14)、細い方が100μF(C13)です。 |
|
最後に音量調整用の可変抵抗器を実装します。 | |
ちょっと何か鳴らしてみましょうか。写真は100均で買った、勿論100円のステレオスピーカーです。まともに部品屋さんでスピーカーを購入すると意外と高かったり、ほとんどがリードタイプで基板実装タイプが見つからなかったりと苦労します。3.5mmのジャックなのでこの様にダイレクトにスピーカーユニットを接続できると言う訳です。 | |
ArduinoのexampleのdigitalのtoneMelodyを開いて、DI8とAUX1を接続し、スケッチをArduinoに転送してみてください。なんだか力が抜けるメロディが流れてくるかと思われます。 音量が小さくて聞き取れないときは、VR2のVOLUMEで調整します。 |
ITRONプログラミング入門―H8マイコンとHOSで始める組み込み開発
- 作者: 濱原 和明
- 出版社/メーカー: オーム社
- 発売日: 2005/04/25
- メディア: 単行本
Prototyping Lab ―「作りながら考える」ためのArduino実践レシピ
- 作者: 小林 茂
- 出版社/メーカー: オライリージャパン
- 発売日: 2010/05/27
- メディア: 大型本
Maruduinoの基本パーツの組み立て2 [組み立て]
今度はLiquidCrystalのHello Worldを動かします。
ITRONプログラミング入門―H8マイコンとHOSで始める組み込み開発
- 作者: 濱原 和明
- 出版社/メーカー: オーム社
- 発売日: 2005/04/25
- メディア: 単行本
Prototyping Lab ―「作りながら考える」ためのArduino実践レシピ
- 作者: 小林 茂
- 出版社/メーカー: オライリージャパン
- 発売日: 2010/05/27
- メディア: 大型本
武蔵野電波のブレッドボーダーズ―誰でも作れる!遊べる電子工作
- 作者: スタパ齋藤
- 出版社/メーカー: オーム社
- 発売日: 2009/11
- メディア: 単行本
Maruduinoの基本パーツの組み立て1 [組み立て]
組み立てを行います。
と、その前に、、、Maruduinoのパーツリストとかご覧いただければ判りますが、やたら部品が多い。フル実装だと私でも半日位は掛かってしまいます。
これはしんどいので、できれば必要な時に必要なだけ実装する事をお勧めします。
では、第一目標としてお約束のDIGITAL13のLEDチカチカから。
と、その前に、、、Maruduinoのパーツリストとかご覧いただければ判りますが、やたら部品が多い。フル実装だと私でも半日位は掛かってしまいます。
これはしんどいので、できれば必要な時に必要なだけ実装する事をお勧めします。
では、第一目標としてお約束のDIGITAL13のLEDチカチカから。
ITRONプログラミング入門―H8マイコンとHOSで始める組み込み開発
- 作者: 濱原 和明
- 出版社/メーカー: オーム社
- 発売日: 2005/04/25
- メディア: 単行本
Prototyping Lab ―「作りながら考える」ためのArduino実践レシピ
- 作者: 小林 茂
- 出版社/メーカー: オライリージャパン
- 発売日: 2010/05/27
- メディア: 大型本