「
ATmarquinoファーストインプレッション」の続きになります。
hamayanさんにいただいた
ATmarquinoで遊んでみます。
とりあえず、ピンフレームをつけました。
![](https://blogimg.goo.ne.jp/user_image/3f/cd/f33b0aec414875a7aba6844914443808.jpg)
左側がアナログ入力の6ピン、右側がデジタル出力の14ピンです。電流制限抵抗をつけない一番手間のかからない(手抜きな)実装法です。この先、電流制限抵抗をつけることもできます(なんて優柔不断な><)。せっかくのhamayanさんの教育的配慮もだいなしです。
CN2にも6ピンのヘッダをつけました。
![](https://blogimg.goo.ne.jp/user_image/3c/ef/0b9bf74836448a8071122a1f422ebc18.jpg)
左から、GND、VBUS、GND、V5R0、GND、VCCです。
次はブートローダです。
Arduino本家の
ダウンロードページから最新版Arduino014をダウンロードします。リリースノートを見ると3/7の出来立てのほやほやです。zipを解凍したフォルダのhardware/bootloaders/atmega168にブートローダのソース一式が入っています。
お正月に
マイクロファンさんの安売りで買ったATMega328Pを20MHzで動作させるブートローダを作ることにします。ブートローダはAVRの種類と動作周波数の2種類に対応して作り直してやる必要があります。ATMega168の16MHzやATMega328Pの16MHzといった代表的な組み合わせについてはコンパイル済みのhexファイルが既に用意されているので、再コンパイルは不要です。
(1) Makefileの修正(周波数の修正)
テキストエディタを使って
atmega328: AVR_FREQ = 16000000L
という行を
atmega328: AVR_FREQ = 20000000L
にします。2の後の0は7個あります。
(2) 再コンパイル
コマンドプロンプトで
make clean
としてから
make atmega328
とします。
結果としてATmegaBOOT_168_atmega328.hexができます。make cleanをしないとhexファイルが更新されません。もっといっぱい修正して新しいターゲットを作る方がいいのですが、手を抜いています。
(3) ブートローダの書き込み
MakefileのISPPORT = usbを自分の書き込み器にあわせて修正します。私のはCOM3につながっているので、MakefileのISPPORT = COM3としました。
コマンドプロンプトで
make atmega328_isp
とすることでavrdudeが起動してブートローダを書き込んでくれます。
以上でブートローダの作成と書き込みが終了しました。
いつもの
でんし研さん作成の
78K0基板を使った書き込み器を使いました。
![](https://blogimg.goo.ne.jp/user_image/5f/0c/ea672ed74d213cadae8457ba5ec08f61.jpg)
考えてみたら、ATmarquinoにはISPコネクタがあるので、そちらを使えばよかったです。
いかにも、すんなりいったように書いていますが、いくつか失敗をしています。
- avrdudeにATMega328Pなんて知らないと怒られました。
winavrを最新のものに変えました。ちなみにwinavrの最新版は3/13のものです。こちらも、できたてのほやほやです。
- AVRは動作周波数の1/4以下のクロックでプログラムしないといけません。ATmega328Pの出荷時の動作周波数は1MHzなので、250kbps以下にしないといけません。
- フューズビットを書き換えてAVRを外部クロック動作に切り替えると、外部クロックなしではISPできなくなってしまいます。
Arduino IDEに入っているサンプルプログラムを動かしてみました。サンプルの動かし方はArduinoのサイトの
Learningに載っています。
メニューのFile→Sketchbook→Examples→Digitalの下にデジタルI/Oを使うサンプルが入っています。
BlinkがLEDチカチカです。デジタル出力の13ピン(一番右端)につながっているLEDをチカチカします。Duemilanoveだと、最初から13ピンに基板上のLEDつながっているので、そのままチカチカを見ることができます。BLINKはdelayというソフトウェアタイマーを使っています。次にあるBlinkWithoutDelayがdelay関数のかわりにmillisという関数を使って時間で制御しています。
写真はLoopというサンプルを実行している様子です。
![](https://blogimg.goo.ne.jp/user_image/0e/c4/8ea4cd80fd93b26b69cce77d531405b1.jpg)
Loopはいわゆるナイトライダーというやつで、光るLEDが左右します。オリジナルは6個のLEDを使うようになっていますが、10個に増やしています。Loopの最初の3行で、光る時間、どのピンを使うか、LEDの数(ピンの数)を変更できるようになっています。
int timer = 100; // The higher the number, the slower the timing.
int pins[] = { 2, 3, 4, 5, 6, 7 }; // an array of pin numbers
int num_pins = 6; // the number of pins (i.e. the length of the array)
10連のLEDは
サトー電気さんで買ったものです。秋月のは3色(緑黄赤)ですが、全部赤です。ブレッドボードにそのまま刺さります。また、電流制限抵抗は11ピンの集合抵抗(470Ω)を使うことで楽をしています。写真では、10連LEDを2つ並べて20連にしていますが、左側は挿してあるだけです。ATmarquinoのデジタル出力は14本あるので、14連ナイトライダーも可能です。色も赤以外に緑黄青があります。結構便利なアイテムです。
ATmarquinoは圧電スピーカを基板上に実装できるようになっています。これは他にはないATmarquinoならではの機能です。サンプルのMelodyでATmarquinoが演奏するキラキラ星を聞くことができます。Melodyではデジタル出力の9ピンにスピーカがつながっていることを想定しているので、int speakerPin = 9;をint speakerPin = 3;に書き換えてやります。ATmarquinoの圧電スピーカはデジタル出力の3ピンにつながっています。
たしかDuemilanoveとBoarduino kitは去年のMTM02のときに買ったまま、ほったらかしにしてありました。Boarduinoなんて組み立てすらしてない始末です。ATmarquinoのおかげで、Arduinoデビューしてしまいました。いい機会を作ってくださってありがとうございます。