まごころせいじつ堂

浜町庄金 研究開発  マイコンで遊んでばっかりで

86Duino

86Duino+SainSmartの1.8"TFT

 前回調べた86DuinoのICSP端子(と呼ぶのは正確ではないと思うが)、Digital I/Oとして使うには以下の番号を指定するとよい。
86DuinoICSP
 さて、ここを使ってAdafruit 1.8" TFT Shieldと同じTFT、ST7735Rを使っているSainSmartのモジュールを使ってみる。Amazonで買えて1590円と安価。キャラクタ液晶の代わりとしてどうだろうか。

SainSmart 1.8 ST7735R TFT LCD Module with MicroSD LED Backlight For Arduino Raspberry Pi

Adafruit/SainSmart 1.8" TFT LCD display for Raspberry Pi

 このモジュールはmicroSDカードとTFT部分のインターフェースが独立しているので別々のSPIで使用可能。

201486duinoTFT1 
 さて、 TFTのCSをENC0_A(42)、RS/DCをENC0_B(43)、SDAをSPIDOに接続、あとはVcc/GND/SCLK/RESETを対応する場所に接続してハードウェアSPI制御にする。
スケッチは以下のとおり。
https://gist.github.com/houmei/3c4cf9613f20c755b911

SPIクロックの指定は、86Duinoだと100MHz÷(2×設定値)となっている。実力ではn=2(25MHz)まで動作した。もし動かなければ以下の部分を書き換えて大きな数値にする。
SPI.setClockDivider(2);
 
201486duinoTFT2 
 動作状態でICSP端子のVcc-GND間を測定したら4.46Vだった。


サインスマート(SainSmart) 1.8サインスマート(SainSmart) 1.8" TFT カラー LCD ディスプレイ モジュール SPI インタフェース & MicroSD 付き for Arduino UNO MEGA R3

サインスマート(SainSmart)
売り上げランキング : 18506

Amazonで詳しく見る
by G-Tools

86Duinoのその他の端子を使ってみる

 ArduinoのICSP端子に相当する86Duinoの端子は拡張されて10ピンになっている。
http://www.86duino.com/wp-content/uploads/2014/03/86Duino-ZERO_Pinout_M.jpg

86duino_icsp

   こんな具合に従来のSPI関連以外にSPICS,EMC0_A,ENC0_B,ENC0_Zが追加されている。これらを使えばSPIで接続するTFT液晶がこの端子だけを使って動かせるのではないかと思ったのだがピン番号はどう割り当ててあるんだろうか?

 86Duino ZeroはArduino UNO、86Duino ONEはArduino Due相当とピン割り当てが合わせてあるのでより大きな86Duino ONEの回路図で調べてみた。
Circuits Schematics for DM-222 (Daughter Board)[PDF]

86duino_pindefine
 
 うーんこれだけではわからんのでソースに当たる。
hardware/86duino/x86/cores/arduino/parduino.hを見てみると:
#define PINS    (45) static int pinMap[PINS] = {11, 10, 39, 23, 37, 20, 19, 35, 33, 17,
                                                                          28, 27, 32, 25, 12, 13, 14, 15, 24, 26,
                                                                          29, 47, 46, 45, 44, 43, 42, 41, 40,  1,
                                                                            3,  4, 31,  0,  2,  5, 22, 30,  6, 38,
                                                                          36, 34, 16, 18, 21};  
 ここでArduino IDE相当のピン番号を86Duino内の番号に置き換えているらしい。その割当ルールだけど、0,1,2,3,...が GP00,GP01,...,GP07,GP10,GP11,...,GP17,GP20,... に対応しているようだ。

確認してみた。
https://gist.github.com/houmei/5def00298417a19cb5f3

ENC0_A,ENC0_Z端子にLEDをつないでチカチカさせてみた。

201486duino_icsp



 OK。これで86Duinoで拡張した端子も利用することができた。
 

86DuinoのGPIO速度

 Intel GalileoのGPIOスイッチング速度は約200Hzと遅かった。86Duinoはどうか。
GalileoのGPIOは遅い

 pin0〜pin19の出力を10101010..と変化させるスケッチを書き、86Duinoの動作周波数200MHz,300MHz,400MHzで観測した。

2014GPIO86Duino

 このようにおおよそ5μsで変化している。200KHzくらい。 結果は以下のとおり。

pin 200MHz 300MHz 400MHz
#1 6.124us 5.708us 6.758us
#2 5.542us 5.082us 6.082us
#3 6.124us 5.708us 6.758us
#4 5.542us 5.082us 6.082us
#5 6.124us 5.708us 6.758us
#6 6.124us 5.708us 6.758us
#7 5.542us 5.082us 6.082us
#8 5.542us 5.082us 6.082us
#9 6.124us 5.708us 6.758us
#10 6.124us 5.708us 6.758us
#11 6.124us 5.708us 6.758us
#12 5.542us 5.082us 6.082us
#13 6.124us 5.708us 6.758us
#14 6.124us 5.708us 6.758us
#15 6.124us 5.708us 6.758us
#16 6.124us 5.708us 6.758us
#17 6.124us 5.708us 6.758us
#18 6.124us 5.708us 6.758us
#19 6.124us 5.708us 6.758us

 pin2,4,7,8,12が他のピンよりも速い。回路図を確認したら、これらはP4 GPIO40〜47に接続されている。400MHzでの速度が300,200MHzよりも遅いのは不明。

http://www.86duino.com/wp-content/uploads/2013/08/DM222_SCH.pdf 


 86Duinoの400MHz設定は今のところ「裏ワザ」だけど、モジュールSOM-128-EX自体は400MHz動作を保証している。

http://blog.livedoor.jp/hardyboy/archives/7227219.html#comments 

 

86Duino BIOS/Bootloaderのアップデートと動作クロックの切り替え

 作業メモなので以下に書いてある通りのことです。

 SysImageを書き込むmicroSDカードを用意。これはアップデートと動作クロックの切り替えの時だけ使うのでとっとかなくてもいい。書き込みはMacOSXで行った。
86Duino SysImage Installation (Mac OS X) 

今回ダウンロードしたのは86Duino_SysImage_20140409_macosx.zip 。これを展開して86duino.imgを得る。

 取り付けたSDカードを確認。/dev/disk1s1 。
mbp15-2:~ takesita$ df
Filesystem    512-blocks       Used Available Capacity   iused    ifree %iused  Mounted on
/dev/disk0s2  1463469952 1106607296 356350656    76% 138389910 44543832   76%   /
devfs                379        379         0   100%       656        0  100%   /dev
map -hosts             0          0         0   100%         0        0  100%   /net
map auto_home          0          0         0   100%         0        0  100%   /home
/dev/disk1s1    15507456       2880  15504576     1%         0        0  100%   /Volumes/NO NAME

 ディスクユーティリティーでアンマウント。
mbp15-2:~ takesita$ diskutil umount /dev/disk1s1

Volume NO NAME on disk1s1 unmounted

 ddでコピー。sudoが必要。書き込み先を間違うとMacOSXをぶっ壊す。10分くらい待つ。
mbp15-2:~ takesita$ ls Downloads/86duino.img

Downloads/86duino.img
mbp15-2:~ takesita$ dd of=/dev/disk1 if=Downloads/86duino.img bs=1m
dd: /dev/disk1: Permission denied
mbp15-2:~ takesita$ sudo dd of=/dev/disk1 if=Downloads/86duino.img bs=1m
Password:
972+0 records in
972+0 records out
1019215872 bytes transferred in 670.180675 secs (1520808 bytes/sec)

 確認。
mbp15-2:~ takesita$ df

Filesystem    512-blocks       Used Available Capacity   iused    ifree %iused  Mounted on
/dev/disk0s2  1463469952 1106825280 356132672    76% 138417158 44516584   76%   /
devfs                379        379         0   100%       656        0  100%   /dev
map -hosts             0          0         0   100%         0        0  100%   /net
map auto_home          0          0         0   100%         0        0  100%   /home
/dev/disk1s1     1941544     218256   1723288    12%         0        0  100%   /Volumes/FREEDOS2012

 アンマウントして取り外す。
mbp15-2:~ takesita$ umount /dev/disk1s1

umount: unmount(/Volumes/FREEDOS2012): Operation not permitted
mbp15-2:~ takesita$ diskutil umount /dev/disk1s1
Volume FREEDOS2012 on disk1s1 unmounted
mbp15-2:~ takesita$ 

 書き込んだイメージの中身。FreeDOSみたいですね。(一部MacOSXが勝手に書き込むファイルあり)
mbp15-2:FREEDOS2012 takesita$ ls -al
total 35432
drwxrwxrwx@ 1 takesita  staff    16384  4 26 01:51 .
drwxrwxrwt@ 8 root      admin      272  4 26 01:51 ..
drwxrwxrwx  1 takesita  staff     4096  4  9 11:32 .Spotlight-V100
drwxrwxrwx@ 1 takesita  staff     4096  4  9 11:32 .Trashes
-rwxrwxrwx  1 takesita  staff     4096  4  9 11:32 ._.Trashes
drwxrwxrwx  1 takesita  staff     4096  4 26 01:51 .fseventsd
-rwxrwxrwx  1 takesita  staff    61922  9 11  2013 ANYBIOS.EXE
-rwxrwxrwx  1 takesita  staff      266 12 24 23:18 AUTOEXEC.BAT
-rwxrwxrwx  1 takesita  staff      512 12 23 13:44 BOOTSECT.BIN
-rwxrwxrwx  1 takesita  staff    66945  8 28  2006 COMMAND.COM
-rwxrwxrwx  1 takesita  staff    87132 12  3 18:09 EERESET.exe
-rwxrwxrwx  1 takesita  staff      293 12 24 18:29 FDCONFIG.SYS
drwxrwxrwx  1 takesita  staff     4096 12 23 13:32 FDOS
-rwxrwxrwx  1 takesita  staff    45344  6 21  2011 KERNEL.SYS
drwxrwxrwx  1 takesita  staff     4096 12 23 00:25 Recycled
drwxrwxrwx  1 takesita  staff     4096 12 23 15:43 System Volume Information
-rwxrwxrwx  1 takesita  staff  8388608  8  7  2008 _86DUINO.BIN
-rwxrwxrwx  1 takesita  staff   108708  4  9 11:24 _86duino.exe
-rwxrwxrwx  1 takesita  staff  8388608  8  7  2008 _EduCake.BIN
-rwxrwxrwx  1 takesita  staff      293 12 24 18:31 _afdcon.sys
-rwxrwxrwx  1 takesita  staff      266 12 24 23:18 _autoexe.bat
-rwxrwxrwx  1 takesita  staff        9 12 18 17:40 _b86ver.v86
-rwxrwxrwx  1 takesita  staff       13 12 24 18:57 _beduver.v86
-rwxrwxrwx  1 takesita  staff       10 12 16 18:33 _blver.v86
-rwxrwxrwx  1 takesita  staff   262144 12 16 20:06 _core86.rom
-rwxrwxrwx  1 takesita  staff   262144 12 16 20:06 _coreedu.rom
-rwxrwxrwx  1 takesita  staff   351588 12 23 23:39 _v86boot.exe
-rwxrwxrwx  1 takesita  staff    13504 10 22  2000 cwsdpmi.exe
drwxrwxrwx  1 takesita  staff     4096 12 27 01:32 dpmi
drwxrwxrwx  1 takesita  staff     4096 12 27 01:32 net
mbp15-2:FREEDOS2012 takesita$ 
 これをmicroSDカードスロットに挿入し、microUSBケーブルを接続して電源を入れるとオレンジ色のLEDが・・・ー ーと点滅する。まずはこれでOK。
201486duinoSD


 次にファームウェアアップデートや動作クロックの変更方法。86Duino IDEでシリアルコンソールを開く。すでに86Duino Coding 103が出ていた。MacOSX Mavericks以降の対応だが、10.8.5でも起動した(保証はないよ)。

https://github.com/roboard/86Duino

86Duino SysImage User Guide

+---------------------------------+
 |    86Duino Flash Update Tool    |
 +---------------------------------+

[MAIN MENU]
    1. Show main menu. Please send 'L'
    2. Update 86Duino bootloader. Please send 'B'
    3. Reboot 86Duino. Please send 'R'
    4. **Danger: update 86Duino BIOS. Please send 'D'
    5. **Danger: update 86Duino system. Please send 'S'
    6. Set 86Duino CPU clock. Please send 'A'
 今回、BootloaderのバージョンはHehuan 1.0、BIOSはGuava 0.9と変わらなかったのでアップデートしなかった。

 動作クロックの変更はAを押す。200MHzか300MHzに切り替えられる。

[SELECT CPU CLOCK]
    1. 300MHz. Please send '1'
    2. 200MHz. Please send '2'


[SET CPU CLOCK]
The tool will set 86Duino CPU from 300MHz to 300MHz, continue? (y/n) y
Send 'y' to start. (y/n) y
Setting complete.
Now, please close "Serial Monitor" window and then press RESET button to reboot 86Duino.
 リセットボタンを押せば設定が反映される。

 

86Duino ZEROの味見

86Duino ZERO

 Galileoとは別のx86によるArduino互換機、86Duino。スイッチサイエンスで扱っている。86Duino ZEROを買った。

86Duino ZERO(スイッチサイエンス)

 86Duino IDEはWindows/Linux/MacOSX用がある。最新版 Coding102 をWindows7(64bit)で使ってみた。シリアル通信用のドライバのインストールなどは省略。

 Vortex86EXのモジュール。温度は測っていないが割と熱くなる。
201486DUINO1

 
 RTCのバッテリバックアップが見える。
201486DUINO2
 

 LチカではなんなのでFizzBuzzやってみた。
ソースは以下から Galileo向けの初期化をコメントアウトしてください(手抜き)。
https://gist.github.com/houmei/8505883

このようなボードが出たときいつも気にするのは5Vが扱えるかどうかだけど、Vortex86EXはI/Oは5Vトレラント。
http://www.86duino.com/wp-content/uploads/2013/11/Vortex86EX_A9123_V14_86duino.pdf

201486Duino4



 LCDの表示とアナログ入力を確認。I/Oが直接出ているのでGalileoの様に極端に遅いということはない。

 これは取り付けたシールドと86Duino ZERO本体の隙間を撮影したもの。接近しているのでシールドによってはショートしてしまうかもしれない。

201486DUINO3



 まず、本体のファームウェアアップデートなどせずにArduino互換として使ってみた。Galileoと違いシールドの互換性は高そう。また、PCに接続して転送するときも認識したかどうか確認する必要もなく、開発時のストレスを感じない。


記事検索
プロフィール

hardyboy

カテゴリ別アーカイブ
月別アーカイブ
QRコード
QRコード
  • ライブドアブログ