- 対象はArduboy v1.0
- 接続パーツ以外はatmega32u4のchip内蔵機能やCPUによるEmulationで実装するので、CPUに関する事の方が多いかも。
- CPU: atmega32u4
- Memory: 2.5KB(on chip)
- Flash: 32KB(on chip)
- EEPROM: 1KB(on chip)
- Display: OLED1306(SPI)
-
PB0 -> SS(SPI)(RX LED) - OUTPUT
-
PB1 -> SCK(SPI) - OUTPUT
-
PB2 -> MOSI(SPI) - OUTPUT
-
PB3 -> MISO(SPI) - INPUT(Auto Config by Chip)
-
PB4 -> A Button(left) - INPUT PULLUP
-
PB5 -> BLUE LED - OUTPUT(Analog)
-
PB6 -> RED LED - OUTPUT(Analog)
-
PB7 -> GREEN LED - OUTPUT(Analog)
-
PC6 -> Speaker1 - OUTPUT
-
PC7 -> Speaker2 - OUTPUT
-
PD0
-
PD1
-
PD2
-
PD3
-
PD4 -> D/C#(OLED1306) - OUTPUT
-
PD5 -> (TX LED) - OUTPUT
-
PD6 -> CS#(OLED1306) - OUTPUT
-
PD7 -> RES#(OLED1306) - OUTPUT
-
PE2 -> (HWB HardWareBoot) - INPUT
-
PE6 -> B Button(right) - INPUT PULLUP
-
PF0
-
PF1
-
PF4 -> Down - INPUT PULLUP
-
PF5 -> Left - INPUT PULLUP
-
PF6 -> Right - INPUT PULLUP
-
PF7 -> Up - INPUT PULLUP
-
注意
- 未接続に見える部分も何かに使われているかもしれない
- OLED1306のvsyncに使われるFRはピンに接続されていない模様(そもそもmoduleから足が出てない?)
- ButtonのInputは押されたらLOW、離されたらHIGHを示す
- MISOのINPUT設定はSPI関連レジスタを弄った際に自動設定される
Default Layout
- 0 -> PD2
- 1 -> PD3
- 2 -> PD1
- 3 -> PD0
- 4 -> PD4
- 5 -> PC6
- 6 -> PD7
- 7 -> PE6
- 8 -> PB4
- 9 -> PB5
- 10 -> PB6
- 11 -> PB7
- 12 -> PD6
- 13 -> PC7
- A0 -> PF7
- A1 -> PF6
- A2 -> PF5
- A3 -> PF4
- A4 -> PF1
- A5 -> PF0
- SS -> PB0
- SCK -> PB1
- MOSI -> PB2
- MISO -> PB3
- RX -> PD5
- TX -> PB0
ArduboyではHardware SPIを使用
- 3.3V -> 3V
- CS -> PD6 -> 12
- A0 -> PD4 -> 4
- SDA -> MOSI
- SCK -> SCK
- RES -> PD7 -> 6
- GND -> GND(⏚)
- Arduino Leonardo(標準)のものを使用
- USB 2.0(要確認)でソフトウェアの書き込み等(avr109のself programming機能相当)を担当する
-
Speaker, LED, OLED, Buttonを扱うClassがArduinoのLibraryに入っている
-
Library Managerがあるので、それを使ってArduboyを探してInstallすればOK
-
サンプルスケッチの中にHello World等があるので、それをベースに開発を進めると楽
-
Flash/Memoryが少ないのでリソースに気を付けながらプログラミングを行う(最悪Bootloader領域に書き込むと別途AVRプログラマが必要)
-
HelloWorldの時点で使用リソースが多い問題
- Arduboy Classに起因する部分は有志の人が容量削減・効率化に励んでいるのでversion上がる毎に改善されそう(githubを見た感じ活発)
- Arduino標準機能であるUSB SerialやHID、Bootloaderの切り替えを担当する機能が入っているので、コードサイズがデフォルトで大きい
- 専用のhex loaderとbootloader作れば容量削減出来るかも
- elfファイルをobj-dumpを使いsファイルを作成し、以下のコマンドでどの命令が多いか調査可能
$ cat hogehoge.s | egrep '^[ \t]+[a-f0-9]+:' | cut -b24- | awk '{print $1}' | egrep '^[a-z]{2,}' | sort | uniq -c | sort -n
- 参考としてhelloworldプログラムは以下の結果となった
1 mulsu
1 nop
1 sbic
1 sbis
1 sei
1 sleep
2 bst
2 ijmp
2 inc
2 wdr
3 cbi
4 brtc
4 neg
5 reti
5 sbi
7 asr
7 brge
7 brpl
7 icall
8 brcc
9 lsr
10 brcs
10 rcall
11 ror
12 brlt
13 mul
14 sbrc
15 cli
16 dec
23 sbrs
26 cpse
29 cp
30 sbiw
32 or
33 eor
33 sub
36 com
39 adiw
39 sbc
44 and
52 out
53 andi
60 ori
61 lpm
61 st
63 breq
63 cpc
64 brne
64 jmp
66 sbci
66 subi
68 cpi
69 in
73 adc
78 ld
79 add
81 std
84 ret
111 call
119 ldd
123 mov
180 lds
201 movw
201 sts
214 rjmp
269 push
293 pop
429 ldi
- V-Syncは出来る?
- 出来ない。
- 参考: UNSOLVABLE: Vsync issues and screen "tearing" - Community
- スレッドでは頑張ってタイミングを合わせよう(環境によってFreq変わるけど)、次のArduboyに期待しようねという話に
- Devkitって何?
- 試作機(prototype)で、Speakerは1つ、KEY接続ピンやLED個数が異なる