ブレッドボードでArduino(1)

Software Designの連載にあるらしいのですが、まだ見てないのでswitch scienceのキットの説明を頼りに再現?してみようと思います。はっきり言ってアイデアはパクリです。本を買わなくても、キットを買わなくてもできるというところだけオリジナルです。(営業妨害?)
ブートローダ書き込み済のチップではつまらないので、秋月で売っている空のAVRで始めます。

■必要なもの
1)ArduinoまたはISP書き込みツール(pocket programmer or Atmel AVRISPmkIIなど)
2)ATmega328P x1 \250
3)積セラコンデンサ 0.1uF x2 \30
4)抵抗 1kOhm x1 (LED用) \5
5)抵抗 10kOhm x1 (リセット用) \5
6)LED x1 \10
7)ブレッドボード x1 \250
8)USB シリアルアダプタ(sparkfun\1495 or 秋月\950) x1

秋月のシリアルアダプタを使えば、高々\1500におさまります。抵抗やコンデンサ、LEDはまとめ買いで手持ちがあれば、タダ同然なので、ATmegaさえあればどんどん増殖できます。
ただし、ArduinoかISPツールを持っているという前提です。(USBシリアルアダプタを使ったBit Bangという方法もありますが、今回は触れません)
まず準備として、ArduinoをISPとして使い、ブートローダを書き込むところまでです。

以前書いた記事ではDuemilanove互換のため、クリスタル外付けで16MHz動作していました。
今回は内蔵クロック8MHzを使って部品を最小限に抑えたArduino Pro互換機になります。
したがって、使うブートローダは
hardware/arduino/bootloaders/atmega/ATmegaBOOT_168_atmega328_pro_8MHz.hex
が該当します。

ちょっと脱線すると、自分でこれをコンパイルしようとすると、ちょっとトラブリました。

make atmega328_pro8

でコンパイルできるはずですが、linuxやmacのCrossPackのavr-gccを使うと、
EEWE undeclaredとエラーが出ます。これはEEPROMに関するレジスタのようで、
#define EEWE 1
としておけば問題ないのですが、avr-libcのバージョンによる(MacのArduino.app付属のavr-gccでは問題なし)ようです。
(追記)この箇所はmega(1280|1281)のみに該当するので、mega328pには影響はないのですが、
正しくはEECRというレジスタをデータシートで調べればよく、古いCPUではEEWEだったものが128xではEEPE(EEPROM Write Enable)がこれに該当するので、
#if defined(EEPE)
while(bit_is_set(EECR,EEPE));
#else
while(bit_is_set(EECR,EEWE));
#endif
とするのが正しいようです。コンパイラに依存するところは依然として謎です。

ArduinoをISPとして使う話は
http://arduino.cc/en/Tutorial/ArduinoToBreadboardに出ています。
(注)Arduino Unoは2010年12月24日に出た0022の時点ではArduinoISPには対応していません。optibootが対応していないとのこと。

■配線
図は上リンクを見てもらうとして、
基本はISPなので、
Arduino d11 -> AVR 17 (MOSI)
Arduino d12 -> AVR 18 (MISO)
Arduino d13 -> AVR 19 (SCK)
と5V,GNDにリセット
Arduino d10 -> AVR 1 (RESET)
の6本を接続する。

■書き込み
Arduino IDEのメニューでOpen->Arduino ISPというスケッチを開いて、アップロードしておきます。
これでArduinoがISPプログラマになります。
http://arduino.cc/en/uploads/Tutorial/breadboard.zip
をダウンロードします。
ユーザーのスケッチフォルダにhardwareというフォルダを作り、その中にzipを展開します。
Arduino IDEを再起動すると、
Tools->Boardに”ATmega328 on a breadboard (8 MHz internal clock)”
というメニューができるのでこれを選択します。
Tools->Burn Bootloader-> w/ Arduino as ISP
でブートローダがブレッドボード上のavrチップに書き込まれる。

なお、Arduinoではなく他のISPツールを使う場合はavrdudeのprogrammer設定(ISPTOOL=…)だけすれば、

make atmega328_pro8_isp

とすればおしまいで圧倒的に簡単で、個人的にはこちらがお勧めですが。

これでブートローダの書き込みができたので、後は他の部品を実装すればおしまいですが、
次回に続きます。

広告
カテゴリー: Arduino, AVR

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

カテゴリー
2010年11月
« 10月   12月 »
1234567
891011121314
15161718192021
22232425262728
2930  
%d人のブロガーが「いいね」をつけました。