Netduino の SPI を使って7セグメントLEDを光らせてみた。
スイッチサイエンスのサイトを眺めていると、SPI 通信で制御できる7セグメント LED を発見したので、
Netduino を使って光らせてみました。
SPI 通信とは
SPI は、「Serial Peripheral Interface」のことで同期式シリアル通信で1対多の通信が可能。
通信に使用する信号の本数は、送信だけならば2本、1対1の送受信は3本、
1対多の送受信ならば4本以上と状況に応じて使用する本数が変わります。
マスター側の信号(制御する側)
- MOSI:マスター出力・スレーブ入力
- MISO:マスター入力・スレーブ出力
- SPCK:シリアルクロック
- SS:スレーブ選択
スレーブ側の信号(制御される側)
- SDI:シリアルデータ入力
- SDO:シリアルデータ出力
- SCK:シリアルクロック
7セグメントLED表示テスト
Netduino のプログラム
SPIの設定、コマンドは、SPI Communication@sparkfun/Serial7SegmentDisplay のページなどを参考に設定する。
動作内容
現在時刻を7セグメントLEDに表示するプログラム。表示形式は「分:秒」。
ちなみに Netduino 起動時に時刻は「0時0分0秒」にセットされる。
500[ms]間隔で表示の更新を行い、そのときに中央のコロンを点滅させる。
ソースコード
using System; using System.Threading; using Microsoft.SPOT.Hardware; using SecretLabs.NETMF.Hardware.NetduinoPlus; namespace Spi7seg { public class Program { public static void Main() { SPI.Configuration dev1 = new SPI.Configuration(Pins.GPIO_PIN_D10, false, 0, 0, false, false, 250, SPI_Devices.SPI1); SPI bus = new SPI(dev1); var colon = new byte[] { 0x77, 0x10 }; var isColon = true; while (true) { var date = DateTime.Now; var h = date.Minute; var m = date.Second; var data = new byte[4]; data[0] = (byte)(h / 10); data[1] = (byte)(h % 10); data[2] = (byte)(m / 10); data[3] = (byte)(m % 10); bus.Write(new byte[] { 0x76 }); //表示クリア bus.Write(data); //時間をセット if (isColon) bus.Write(colon); //コロンを表示 isColon = !isColon; Thread.Sleep(500); } } } }
動作状況
さいごに
SPI 通信ができるようになると、手軽に Netduino に何かいろいろ接続できるようになる気がする。
SPI 関係の情報はいろいろありますが、Netduino に限定するとあまり無かったので、
今回は備忘録的な感じで書いてみました。
あと、黄色の7セグメントLEDってキレイに光りますね。