MicroPythonでOLED1 Xplained Proボードを動かす

MicroPythonでOLED Xplained boardを動かしてみた Embedded
MicroPythonでOLED Xplained boardを動かしてみた

概要

OLED1 Xplained Pro(以下OLED1)ボードをSAMD21 Xplained Pro(以下Xpro)に接続し、MicroPythonでコントロールしてみた。OLED1ボード内のLEDの点灯、ボタンの状態の読み取りを行った。Xproの基板上の設定を少し変更する必要があった。

OLED1 Xplained Proとは

前回MicroPythonをインストールしたSAMD21 Xplained ProなどXplainedシリーズと組み合わせて使用できるコンパニオンボードである。詳細はユーザーガイドを見ていただくとして、下記の機能が実装されている。

  • 128×32ピクセル・SPIアクセスのモノクロOLEDディスプレイ
  • 3つのLED
  • 3つのプッシュボタン
  • (ハードウェアIDチップ)

IDについてはEDBG側MCUに接続されるので我々がMicroPythonを動かすTarget MCUからはアクセスできないようだ。

制御ピン

ユーザーガイドにはピンナンバーが記載されているが、今回はXproと接続して使用する。したがって制御するのはSAMD21なので、SAMD21マイコンのポート名に変換していく。

OLED1 PinSAMD PinXpro Pin NameFunction
1IDIDID
2GNDGNDGND
3PA02ADC(+)BUTTON2
4PA03ADC(-)BUTTON3
5PB30GPIO1DATA_CMD_SEL
6PA15GPIO2LED3
7PA12PWM(+)LED1
8PA13PWM(-)LED2
9PA28IRQ/GPIOBUTTON1
10PA27SPI_SS_B/GPIODISPLAY_RESET
11PA08I2C_SDANC
12PA09I2C_SCLNC
13PB11UART_RXNC
14PB10UART_TXNC
15PB17SPI_SS_ADISPLAY_SS
16PB22SPI_MOSISPI MOSI
17PB16SPI_MISONC
18PB23SPI_SCKSPI SCK
19GNDGNDGND
20VCCVCCVCC

PB30がLED0とDATA_CMD_SELでかぶっているのでOLEDのSPIアクセスの際には注意しなければならないようだ。

機能テスト

それでは簡単なところからOLED1ボードを動かしてみよう。

LED0,1,2,3 Lチカ

XproについているLED0とOLED1についているLED1-3をそれぞれ点灯させるテストをしよう。まずは回路図の確認。OLED1 Xplained Pro Design DocumentationのZIPの中に回路図が入っている。

LEDのアノード側に電源がついているので、カソード側に接続されたマイコンのGPIOをLOWにしてやればLEDが点灯することがわかった。そこで、次のようなコードを書いてみた。

from machine import Pin
import time
led0 = Pin("PB30", Pin.OUT, value=1)
led1 = Pin("PA12", Pin.OUT, value=1)
led2 = Pin("PA13", Pin.OUT, value=1)
led3 = Pin("PA15", Pin.OUT, value=1)
​
slp = 0.2
while(True):
    led0.value(0)
    time.sleep(slp)
    led0.value(1)
    led1.value(0)
    time.sleep(slp)
    led1.value(1)
    led2.value(0)
    time.sleep(slp)
    led2.value(1)
    led3.value(0)
    time.sleep(slp)
    led3.value(1)

コンストラクタのvalueは初期レベルを指定することができる。LOWで点灯なので非点灯はHIGHの1。

これを転送して実行してみると、LED2が点灯しない。調べてみたところ、答えはSAM D21 Xplained Pro USER GUIDEのp.13にあった。

2. PA13 is by default connected to the Serial Flash SS line and is disconnected from the EXT3 PIN8.
  This can be changed by moving the 0Ω resistor R314 to R313.

回路図でいうとこちら。SPIのCSに接続されている。

XproボードのUSBコネクタを上にして「SAMD21J18A」の文字があるところの左下。PA13のシルク文字が書かれている2つのうち左側がR314、右がR313。初期状態ではDF_SS側のR314に0Ωが実装されている。それを外してEXT3側R313に実装してあげると無事にLED2も点灯することができた。

BUTTON 1,2,3 テスト

XproについているSW0とOLED1についているBUTTON 1-3をそれぞれ押したら対応するLEDが点灯するテストをしよう、と思って準備をしているとSW0が接続されているPA15はLED3とも接続されていた。試しに上記のコードを動作させながらSW0を押してみるとLED3が点灯しっぱなしになった。なのでSW0はなかったことにして、BUTTON 1-3のテストだけを行う。まずは回路図を確認。

ボタンを押すとGNDに接続されるのでGPIOがLOWになる。つまり、GPIOを入力ポートに設定し、LOWになったらボタンが押されたと判断すればよい。また、そこにコメントが記載されているように、内部プルアップをONにする必要がある。これらをふまえて、次のようなコードを書いてみた。

from machine import Pin
led0 = Pin("PB30", Pin.OUT, value=1)
led1 = Pin("PA12", Pin.OUT, value=1)
led2 = Pin("PA13", Pin.OUT, value=1)
led3 = Pin("PA15", Pin.OUT, value=1)
button1 = Pin("PA28", Pin.IN, Pin.PULL_UP)
button2 = Pin("PA02", Pin.IN, Pin.PULL_UP)
button3 = Pin("PA03", Pin.IN, Pin.PULL_UP)
while(True):
   led1.value(button1.value())
   led2.value(button2.value())
   led3.value(button3.value())

チャタリングも何も関係ないのでごくごく簡単なコードになった。ボタンを押すと接続されたGPIOがLOWレベルになるのでvalueを取ると0が返る。LEDはGPIOをLOWレベルにすれば点灯する。なのでボタンのvalueをLEDのvalueにそのまま渡すだけでよい。

しかし問題が発生。今度はBUTTON 3を押してもLED3が点灯しない。同じくSAM D21 Xplained Pro USER GUIDEのp.13に答えがあった。

1. PA03 can be used by USB ID or EXT3 PIN4 by changing the position of the jumper JS300 on J307

XproのPA03 SELECTのピンヘッダーをチェック。USB ID-PA03間にジャンパーがついていたのでEXT3-PA03間に付け替えるとLED3が点灯できるようになった。

モノクロOLEDディスプレイ

次回、モノクロLEDディスプレイのアクセスをしてみよう。今日はここまで。

まとめ

SAMD21 Xplained ProボードにインストールしたMicroPythonから、接続したOLED Xplained Proボード内のボタンやLEDを制御することを考えた。ボタンやLEDがどのようにマイコンに接続されているかをUSER GUIDEと回路図で確認し、それぞれをMicroPythonのコードで使えるようにした。

参考文献

コメント

タイトルとURLをコピーしました