雨ときどき晴れ

最近は C# や Blazor やってます。Raspberry Pi で Node-RED も活用できるようになりました。

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:シリアルクロック

SPI の接続例

送信だけ(左)、1対1の送受信(右)


1対多の通信

7セグメントLED表示テスト

7セグメントLEDとの接続

今回は SS も試したかったので接続している。
SS の端子は SPI に使用するピン以外であればどれでも可。

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ってキレイに光りますね。