ラベル microbit の投稿を表示しています。 すべての投稿を表示
ラベル microbit の投稿を表示しています。 すべての投稿を表示

2016年5月11日水曜日

BBC micro:bitのMicroPythonをnRF51822で使う (オフライン編)

*** 注意:メモリ不足によりBLEは使えません ***
https://microbit-micropython.readthedocs.io/en/latest/ble.html

nRF51822にmbedインターフェイス(ドラッグアンドドロップ)でフラッシュメモリに書き込めるようにします。
例えばTG-LPC11U25-501を使う場合は次のように接続します。
TG-LPC11U35-501nRF51822
p6(P0_8)SWDIO
p8(P0_7)SWCLK
p10(P0_18)TGT_TX(P0.24)
p9(P0_19)TGT_RX(P0.25)
p1(GND)GND

Code With Mu
http://codewith.mu/
からMuエディタ(mu.exe)をダウンロードして実行します。

コーディングしてFlashボタンを押します。


micro:bitの場合は自動でMICROBITドライブを探しますが、見つからないのでMBEDドライブを再指定します。

書込みに成功すると、プログラムが自動で実行されます。

対話モードにするにはReplボタンを押します。
CTRL-Dでプログラムを再実行するので実行時のエラーがわかります。


参考

BBC micro:bit Python Pixel Project
https://www.youtube.com/watch?v=CTol1mtXm0I

mbed HRM1017 互換機を安価に作成する方法
http://qiita.com/EsseiK/items/debaff7c2f2e4f6ae668

(2016/5/11)
---


2016年5月9日月曜日

BBC micro:bitのMicroPythonをnRF51822で使う(オンライン編)

*** 注意:メモリ不足によりBLEは使えません ***
https://microbit-micropython.readthedocs.io/en/latest/ble.html

実行したいプログラムをBBC micro:bitのMicroPython new projectで入力します。
Hello,World表示、LEDチカチカなら次のようなプログラムになります。


Downloadボタンを押すとバイナリファイル(拡張子HEX)をダウンロードしますのでnRF51822に書込みます。
mbed HRM1017のようなマイコンならドラッグアンドドロップで簡単に書込みが出来るでしょう。

USBシリアル変換をP0.24(送信),P0.25(受信)に繋ぎます。ボーレートは115200bpsに設定します。
例えば、トラ技ライタの場合は次のようになります。
TG-LPC11U35-501nRF51822
p10(P0_18)TGT_TX(P0.24)
p9(P0_19)TGT_RX(P0.25)

nRF51822をリセットするとプログラミングが実行されます。
終了するプログラムなら対話モードに移行します。
無限ループに入っていても、CTRL-Cでプログラムを強制停止させて対話モードに移行できます。
CTRL-Dでプログラムを再実行できます。

micro:bitのようにLEDマトリックスを持っているのであればmicrobit.displayモジュールが使えます。

ドキュメント
https://microbit-micropython.readthedocs.org

ドキュメントに載っているpin0,pin1,pin2等はmicro:bitでの端子名P0,P1,P2等であって、nRF51822のピン名称ではないのに注意。
対応は次のようになります。
MicroPython(micro:bit)nRF51822
pin0 PAD1P0.3
pin1 PAD2P0.2
pin2 PAD3P0.1
pin3 COL1P0.4
pin4 BTN_AP0.17
pin5 COL2P0.5
pin6 ROW2P0.14
pin7 ROW1P0.13
pin8 PIN18P0.18
pin9 ROW3P0.15
pin10 COL3P0.6
pin11 BTN_BP0.26
pin12 PIN20P0.20
pin13 SCKP0.23
pin14 MISOP0.22
pin15 MOSIP0.21
pin16 PIN16P0.16
pin19 SCLP0.0
pin20 SDAP0.30
microbit-dal/inc/core/MicroBitComponent.h
bbcmicrobit/micropython
https://github.com/bbcmicrobit/micropython

(2016/5/9)
---


2016年5月8日日曜日

BBC micro:bitの加速度センサMMA8653をFRDM-KL46Zで作る

BBC micro:bitに搭載されている加速度センサMMA8653FCは次のようにnRF51882に接続されています。

//ACCEL INTERRUPT PINS (MMA8653FC)
ACCEL_INT2 = p27,
ACCEL_INT1 = p28,
//SDA (SERIAL DATA LINE)
I2C_SDA0 = p30,
//SCL (SERIAL CLOCK LINE)
I2C_SCL0 = p0
mbed/libraries/mbed/targets/hal/TARGET_NORDIC/TARGET_MCU_NRF51822/TARGET_NRF51_MICROBIT/PinNames.h

32.768kHzクリスタル搭載タイプではINT2 P0_27(p27)がクリスタル接続ピンと衝突するが、
ドライバのソースコードを見ると、現在は使われているのはINT1のみでINT2は使われていません。

ドライバ
microbit-dal/source/drivers/MicroBitAccelerometer.cpp
microbit-dal/inc/drivers/MicroBitAccelerometer.h
http://lancaster-university.github.io/microbit-docs/ubit/accelerometer/

MMA8653のブレイクアウトボードは無さそうなので、FRDM-KL46Zに搭載されている加速度センサMMA8451QとI2Cスレーブ機能を使ってMMA8653FCを模擬します。
データシートで比較する限り、MMA8451はMMA8653の上位互換になっているようで、I2Cアドレスを一致させれば同じように動きそうです。
I2Cスレーブでは反応速度が要求されるので、ドライバから送られてくるI2Cデータを前提にして動作させます。

作成したFRDM-KL46Z用のプログラムは次のようになります。
MMA8653 emulator for BBC micro:bit
https://developer.mbed.org/users/va009039/code/emuMMA8653/

ブロックエディタでX,Y,Zの加速度センサを表示するプログラムを作って実行します。


I2Cのデータは次のように流れます。(>>はMMA8643への書込み、<<は読み込みを表します)
最初の6個は設定で、次から加速度データを読み込んでいます。


データシート

MMA8653FC 3-Axis, 10-bit Digital Accelerometer
http://cache.nxp.com/files/sensors/doc/data_sheet/MMA8653FC.pdf

MMA8451Q: ±2g/±4g/±8g, Low g, 14-bit Digital Accelerometer
http://cache.nxp.com/files/sensors/doc/data_sheet/MMA8451Q.pdf

おそらく、MMA8452でも動きそうだが未確認です。

MMA8452Q: ±2g/±4g/±8g, Low g, 12-bit Digital Accelerometer

データシート
http://cache.nxp.com/files/sensors/doc/data_sheet/MMA8452Q.pdf

(2016/5/8)
---



2016年5月7日土曜日

BBC micro:bitのLEDマトリックスは光センサーとしても使っている



ブロックエディタのInputメニューのlight levelは、
てっきり、P0端子あたりに光センサを外付けして使うのかと思っていたが、

https://twitter.com/microbitruntime/status/697081906026954752
https://twitter.com/microbitruntime/status/697082230028574721

のツイートを見ていたらLEDマトリックスを光センサと使った時の値でした。
青色LEDではlight levelが0で光センサとしては使えなかった。

LEDマトリックスは起電力の大きい赤色LEDを使うのが望ましいようです。

参考
LEDエネルギー変換実験器 LT(赤)

(2016/5/7)
---

2016年4月24日日曜日

BBC micro:bit互換のLEDマトリックスを作ってみる

@va009039が投稿した動画 -



BBC micro:bitは5行5列のLEDマトリックスを持っているが、内部的には9行3列でダイナミック表示をしているようです。

回路図を見つけれなかったのでソースコードから調べて配線してみました。

mbedライブラリでのピン名称
mbed/libraries/mbed/targets/hal/TARGET_NORDIC/TARGET_MCU_NRF51822/TARGET_NRF51_MICROBIT/PinNames.h
と、
ランライムのLEDマトリックスドライバの変換配列(MICROBITMICROBIT_DISPLAY_TYPE == MICROBIT_SB2)
microbit-dal/inc/drivers/MicroBitMatrixMaps.h
を参考にしてLEDへ接続するピン番号を割り当てると次のようになります。
LED(X,Y)X=0X=1X=2X=3X=4
Y=0p13,p4p14,p7p13,p5p14,p8p13,p6
Y=1p15,p7p15,p8p15,p9p15,p10p15,p11
Y=2p14,p5p13,p12p14,p6p15,p12p14,p4
Y=3p13,p11p13,p10p13,p9p13,p8p13,p7
Y=4p15,p6p14,p10p15,p4p14,p9p15,p5

ピン番号からLED位置への変換
Pin to LED(X,Y)COL1(p4)COL2(p5)COL3(p6)COL4(p7)COL5(p8)COL6(p9)COL7(p10)COL8(p11)COL9(p12)
ROW1(p13)(0,0)(2,0)(4,0)(4,3)(3,3)(2,3)(1,3)(0,3)(1,2)
ROW2(p14)(4,2)(0,2)(2,2)(1,0)(3,0)(3,4)(1,4)NCNC
ROW3(p15)(2,4)(4,4)(0,4)(0,1)(1,1)(2,1)(3,1)(4,1)(3,2)

適当なnRF51822なマイコンに、このLEDマトリックスを接続して、mbedインターフェイスからドラッグアンドドロップ書き込めるようにしました。

ブロックエディタを使ってプログラミングしてLEDマトリックスに表示できるようになります。

@va009039が投稿した動画 -



参考

mbed HRM1017 互換機を安価に作成する方法
http://qiita.com/EsseiK/items/debaff7c2f2e4f6ae668

(2016/4/24)

補足

Micro:bitは16MHzクリスタル搭載、32.768kHzクリスタル非搭載です。
32.768kHzクリスタル搭載ではP0_26が使われてしまうので、ボタンB(BUTTON_B P0_26)は使えなくなります。

Block Editor等で使うピン名称とnRF51822でのピン名称とは違います。
microbit-dal/inc/drivers/MicroBitPin.h
で定義されています。まとめると次のようになります。
Block EditorP0P1P2P8P12P16AB
nRF51822
mbed
P0_3
PAD1
P0_2
PAD2
P0_1
PAD3
P0_18P0_20P0_16P0_17
BUTTON_A
P0_26
BUTTON_B
※32.768kHzクリスタル非搭載のみ使用可

(2016/4/26追加)
---