ArduinoISP

ブレッドボードでArduino(1)の続きともいえますが、kosakaさんの
ArduinoISPを使う
という記事の検証をしてみただけです。
この記事の素晴しいところはattiny45/85からatmega644p/1284pまでをArduino IDEで書けるところです。

使った環境は
・Arduino Duemilanove (ATmega328P)
・MacOSX (intel)
・CrossPack for AVR
・Arduino-0021 (0022では動かないようです)

まずはArduino本体にスケッチArduinoISPをアップロードしてISP化します。

最近秋月で1284Pが発売されたので、ここではATmega1284P(644P)の場合について書きます。

接続は
Arduino <-> atmega1284/644P
D10 <-> 9 (RESET)
D11 <-> 6 (MOSI)
D12 <-> 7 (MISO)
D13 <-> 8 (SCK)
とVCC,GNDをつなぐ。

これの動作検証はコマンドラインだと

avrdude -c avrisp -p atmega1284p -P /dev/cu.usb* -b 19200

などとすればOK。

kosakaさんのサイトから
http://www.geocities.co.jp/arduino_diecimila/use/source/hardware.zip
をダウンロードして、~/Documents/Arduinoに展開します。
Arduinoを再起動すると、Tools->BoardにATtinyやmega1284/644のメニューができます。
ブレッドボードでクリスタルなしの場合はATmega1284P Int. 8MHzを選択する。
これで準備ができたので、早速動作確認
Open->1.Basics->Blinkを読み込んで、Uploadボタンを押すと、
mega1284Pにアップロードされて無事動きました。

これだけでは面白くないので、他のコードも試してみます。
644P/1284Pのcore部分のソースはSanguino-0018由来のものと思われます。
やや古いため、現行のArduinoIDEに付属のexampleを動かそうとすると問題がありました。

1.BasicsのAnalogReadSerialをコンパイルするとエラーが出ます。
A0が定義されていないということなので、
atmega328用のcoreソースでA0をgrepすると、WProgram.hで定義されているのでそれに習って、
hardware/avr/cores/atmega644p_1284p/WProgram.h を

#if defined(__AVR_ATmega1284P__) || defined(__AVR_ATmega644P__)
const static uint8_t A0 = 31;
const static uint8_t A1 = 30;
const static uint8_t A2 = 29;
const static uint8_t A3 = 28;
const static uint8_t A4 = 27;
const static uint8_t A5 = 26;
const static uint8_t A6 = 25;
const static uint8_t A7 = 24;
#endif

のようにしました。

2.DigitalのtoneMelodyもコンパイルエラーが出るので、調べると
Tone.cpp
を使っているので、本体のcoreにあるTone.cppをコピーして、
同じく、WProgram.hに

void tone(uint8_t _pin, unsigned int frequency, unsigned long duration = 0);
void noTone(uint8_t _pin);

を追加すると、コンパイルできました。

8.Stringsを使うためには
WString.h,WString.cppをコピーし、
WProgram.hに

#include "WString.h"

を追加する。

Ethernetを使おうとすると、
SPIで必要なSCKなどが定義されていないので、
pins_arduino.hに

#if defined(__AVR_ATmega644P__) || defined(__AVR_ATmega1284P__)
const static uint8_t SS   = 4;
const static uint8_t MOSI = 5;
const static uint8_t MISO = 6;
const static uint8_t SCK  = 7;
#endif

を追加した。

というようにして、足りない部分をどう補えばよいか
だんだんとわかってきた。
ただし、これらの変更はデータシートおよびソースからのかくあるべしという推定で、
実際の動作検証はまだ行なっていません。

広告
カテゴリー: Arduino

コメントを残す

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

WordPress.com ロゴ

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

Twitter 画像

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

Facebook の写真

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

Google+ フォト

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

%s と連携中

カテゴリー
2011年3月
« 1月   5月 »
 123456
78910111213
14151617181920
21222324252627
28293031  
%d人のブロガーが「いいね」をつけました。