アルドゥイーノ・アーデュイーノ (Arduino) †
電子工作は素人。だけど、Arduino を使ってみたいと思います。
以下、Arduino を使うまでの道筋を記録します。
同じような素人さん向けに参考になるように。
いくつかの基礎知識 †
素人ですので、不正確、場合によっては誤りの情報があるかと思います。
どうぞご指摘下さい。
- ATmega168P
Atmel 社の「ワンチップマイコン」です。
一つのチップの中に、CPU(中央演算処理装置)、メモリ、AD変換(アナログデジタル変換)機能などを詰め込んだものです。
仕様の一部を下に示します。(私たちが普通入手するPDIP パッケージ--2列に足が並んで出ているもの--について)
項目 | |
| |
EEPROM (電気的に消したりプログラムしたりでき、電源を落としても内容が保持されるメモリ) | 512 バイト |
SRAM (メインメモリ) | 1K バイト |
AD変換 (アナログデータをデジタルデータに変換する機能) | 6 チャンネル(6つデータをとれる), 10bit(0-1023 までの値として取得できる) |
IO (入出力に使えるピンの数) | 23 本 |
駆動電圧 | 2.7-5.5 V (ただし電圧が低いとクロックを下げる必要あり) |
周波数(クロック。1秒間に何回計算するか) | 20MHz まで |
- ブートローダ
AVRマイコンのプログラム用フラッシュメモリの一部に、プログラムを書き込んだり読み込んだりする機能を仕込むことができるようです。
そのプログラムをブートローダというようです。
- ヒューズ(Fuse : 発音はフューズのはずだけど、ヒューズと書くのが習わしらしい。)
※ ヒューズビットという表現もありますが、マニュアルにはヒューズバイトとなっています。
8bit(=1byte)をセットで設定する必要があるからでしょうか。
AVR マイコンの機能を変化させるためのスイッチとして使われます。
(多くの人には通じないでしょうけど、昔の EPSON のパソコンのディップスイッチのようなもののようです。)
ブートローダとは別に書き込む必要があります。
失敗すると、元に戻すのに苦労する場合があるので、慎重にセットする必要があります。
Arduino でどのようなヒューズがセットされているかは、arduino-0017/hardware/board.txt の中に書いてあります。
以下の情報は ATmega168P に基づいています。
- 上位ヒューズ(High Fuse)
リセットに際してのEEPROMの扱いや、外部デバイスとの電位差(?)に対する対応など。
0xdd(11011101)でいいようです。
- 下位ヒューズ(Low Fuse)
分周(?)や、ATmega168Pを駆動する周波数をどこからとるかによって変えます。
外部から水晶発振の 16MHz をとる場合には、0xFF(2進数で11111111)でいいようです。
- 7bit : CKDIV 分周(?)するか
- 6bit : CKOUT 外部に出すか
- 5〜4bit : SUT start-up の時間
- 3〜0bit : CKSEL クロックをどこからとるか
- 拡張ヒューズ(Extended Fuse) ATmega168P の場合、00(八進数。0x00 と書きます。二進数で00000000) にします。
- 7-3 ビット目
意味がありません。
- 2,1 ビット目
ブートローダ領域の大きさを指定しています。BOOTSZ
2ビット目 | 1ビット目 | 168Pの場合のブートローダ領域の大きさ |
| | |
1 | 1 | 0.25 Kbyte ( 128 ワード ) |
1 | 0 | 0.5 Kbyte ( 256 ワード ) |
0 | 1 | 1 Kbyte ( 512 ワード ) |
0 | 0 | 2 Kbyte ( 1024 ワード ) |
- 0ビット目
リセットベクタ BOOTRST (おそらく、リセット信号が来たときに、ブートローダ領域に飛ぶか、応用プログラム領域に飛ぶかということ?)
1ビット目 | 行き先 |
| |
0 | ブートローダ領域 |
1 | 応用プログラム領域 |
- ロックビット
応用プログラム領域の書き込みをできなくしたり(BLB0)、
ブートローダ領域の書き込みをできなくしたり(BLB1)、
場合によってはヒューズの書き込みも含めて禁止(LB)
します。
board.txt によると、Arduino で設定しているのは、次の2通りのようです。
0x0F(ブートローダ領域への書き込みを禁止)
0x3F(一切禁止しない)