概要
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 Pin | SAMD Pin | Xpro Pin Name | Function |
|---|---|---|---|
| 1 | ID | ID | ID |
| 2 | GND | GND | GND |
| 3 | PA02 | ADC(+) | BUTTON2 |
| 4 | PA03 | ADC(-) | BUTTON3 |
| 5 | PB30 | GPIO1 | DATA_CMD_SEL |
| 6 | PA15 | GPIO2 | LED3 |
| 7 | PA12 | PWM(+) | LED1 |
| 8 | PA13 | PWM(-) | LED2 |
| 9 | PA28 | IRQ/GPIO | BUTTON1 |
| 10 | PA27 | SPI_SS_B/GPIO | DISPLAY_RESET |
| 11 | PA08 | I2C_SDA | NC |
| 12 | PA09 | I2C_SCL | NC |
| 13 | PB11 | UART_RX | NC |
| 14 | PB10 | UART_TX | NC |
| 15 | PB17 | SPI_SS_A | DISPLAY_SS |
| 16 | PB22 | SPI_MOSI | SPI MOSI |
| 17 | PB16 | SPI_MISO | NC |
| 18 | PB23 | SPI_SCK | SPI SCK |
| 19 | GND | GND | GND |
| 20 | VCC | VCC | VCC |
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のコードで使えるようにした。
参考文献
- SAM D21 Xplained Pro USER GUIDE https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-42220-SAMD21-Xplained-Pro_User-Guide.pdf
- SAM D21 Xplained Pro Design Documentation (ZIP) https://ww1.microchip.com/downloads/aemDocuments/documents/OTH/ProductDocuments/BoardDesignFiles/SAMD21-Xplained-Pro_Design-Documentation.zip
- OLED1 Xplained Pro User’s Guide https://ww1.microchip.com/downloads/aemDocuments/documents/OTH/ProductDocuments/UserGuides/40002176A.pdf
- OLED1 Xplained Pro Design Documentation (ZIP) https://ww1.microchip.com/downloads/aemDocuments/documents/OTH/ProductDocuments/BoardDesignFiles/OLED1-Xplained-Pro_Design-Documentation.zip


コメント