= Arduino Mega = [http://arduino.cc/en/Main/ArduinoBoardMega 原文はこちら] == 概要 == Arduino Megaは、Atmel社のATmega1280([http://www.atmel.com/dyn/resources/prod_documents/doc2549.pdf データシート])を搭載したマイクロコントローラ・ボードです。 デジタルI/Oピン54本(このうち14本はPWM出力が可能)、アナログ入力16本、UART(シリアルポート)4組、16MHzの水晶発振子、USB接続(デバイス側)、電源コネクタ、ICSPヘッダ(ISPコネクタ)、リセットボタンを持っています。 マイクロコントローラを動かすのに必要な物を全て備えています。 単純にUSBケーブルでパソコンに接続するか、ACアダプタまたは電池を接続すれば動きます。 Arduino Megaでは、Arduino DuemilanoveまたはDiecimila向けに設計されたほとんどのシールドがそのまま使えます。 == 回路図およびリファレンス設計 == EAGLEファイル:近日掲載 回路図:[http://arduino.cc/en/uploads/Main/arduino-mega-schematic.pdf arduino-mega-schematic.pdf] == 仕様 == || マイクロコントローラ || ATmega1280 || || 動作電圧 || 5V || || 入力電圧(推奨) || 7~12V || || 入力電圧(定格) || 6~20V || || デジタルI/Oピン || 54本(うち14本はPWM出力も可能) || || アナログ入力ピン || 16本 || || デジタル出力の負荷電流 || 最大40mA || || 3.3Vピン(`3V3`)の負荷電流 || 最大50mA || || フラッシュメモリ || 128KB(うち4KBはブートローだで使用) || || スタティックRAM || 8KB || || EEPROM || 4KB || || クロック速度 || 16 MHz || == 電源供給 == 電源の供給は、USBバスパワーまたは外部電源から行います。これらの供給源は、自動的に選択されます。 外部電源(USBでは無い場合)は、いわゆるACアダプタまたは電池です。ACアダプタは、中心電極の太さが2.1mmで中心電極がプラス(センター・プラス)のプラグを、ボードの左端の電源ジャックに差し込みます。電池を使用する場合は、下の段の左のピンヘッダの「`Gnd`」および「`Vin`」の場所に電池からの配線を差し込みます。 外部電源の電圧の定格は6~20ボルトです。しかし、7ボルト以下の場合には、内部の5V電源が5Vに満たないことがあり、動作が不安定になる可能性があります。また、12ボルト以上の場合には、ボードに搭載する電源レギュレータが過熱しボードが破損する可能性があります。したがって、外部電源の推奨範囲は7~12ボルトです。 電源関係のピンは以下のとおりです。 '''Vin''' (USBコネクタやその他の安定化電源からの5Vではない)外部電源の入力です。 外部電源は、このピンに供給してください。 また、電源ジャックから供給している場合は、供給されているそのままの電圧がここに出力されています。 '''5V''' ボード上のマイクロコントローラやその他の部品に供給されている安定化された5V電源の導線です。 この導線の電圧は、電源ジャックまたはVinからの電圧をボード上の電源レギュレータによって安定化したもの、またはUSBコネクタからの5V電圧です。 また、外部の安定化電源からの5V電圧を、このピンに供給することもできます。 電源ジャック、Vin、5Vピンから供給された電圧がUSBコネクタに逆流することはありません。 '''3V3''' ボード上のFTDIチップが生成した3.3V電源です。このピンの最大負荷は50mAです。 '''GND''' グラウンドです。 == メモリ == ATmega1280には、プログラムコードの格納用として128KBのフラッシュメモリがあります(このうち4KBはブートローダ用に使用されています)。 さらに、8KBのスタティックRAM、4KBのEEPROMがあります。 EEPROMは、[http://www.arduino.cc/en/Reference/EEPROM EEPROMライブラリ]を用いてプログラム中から読み書きすることができます。 == 入出力 == 54本あるデジタルI/Oピンは、入力または出力に切り替えて使用することができます。 切り替えには[http://arduino.cc/en/Reference/PinMode pinMode()]関数、出力には[http://arduino.cc/en/Reference/DigitalWrite digitalWrite()]関数、入力には[http://arduino.cc/en/Reference/DigitalRead digitalRead()]関数を使用します。 入出力の動作電圧は5Vです。 出力として使用する場合の最大負荷は40mAです。 入力として使用する場合、20~50KΩのプルアップ抵抗が接続されます。 一部のピンには、特有の役割があります。 '''シリアル:0番(RX)1番(TX)、シリアル1:19番(RX)18番(TX)、シリアル2:17番(RX)16番(TX)、シリアル3:15番(RX)14番(TX)''' シリアル通信の送受信(RX=受信、TX=送信)に使います。 0番および1番のピンは、FTDI USB~TTLレベルシリアル通信変換チップの対応するピンにも接続されています。 '''外部割り込み:2番(割り込み0)、3番(割り込み1)、18番(割り込み5)、19番(割り込み4)、20番(割り込み3)、21番(割り込み2)''' 設定により、これらのピンの値LOW、LOW→HIGHのエッジ、HIGH→LOWのエッジ、いずれかの方向の値の変化によって割り込みをかけることができます。 詳細については[http://arduino.cc/en/Reference/AttachInterrupt attachInterrupt()関数のページ]を参照してください。 '''PWM:0番~13番''' [http://arduino.cc/en/Reference/AnalogWrite analogWrite()]関数により、8ビットのPWMでアナログ電圧を出力することができます。 '''SPI:50番(MISO)、51番(MOSI)、52番(SCK)、53番(SS)''' SPIによる通信に使用することができます。 SPIはハードウェア的にはサポートされていますが、現時点ではArduino言語ではサポートしていません。 SPIのピンは、ICSPヘッダ(ISPヘッダ)にも接続されています。これらは、DuemilanoveやDiecimilaと同じ配列です。 '''LED:13番''' 13番ピンは、ボード上に搭載したLEDにも接続されています。 値がHIGHの時に点灯し、LOWの時に消灯します。 '''I^2^C:20番(SDA)、21番(SCL)''' [http://wiring.org.co/reference/libraries/Wire/index.html 「Wire」ライブラリ](解説はWiringのウェブサイトにあります)を使用すると、I^2^C(TWI)による通信を行うことができます。 これらの配置は、DuemilanoveやDiecimilaと異なります。 アナログ入力は16本あり、それぞれ分解能は10ビットです(つまり、1024段階の値を取ることができます)。 デフォルトでは0~5Vの範囲を計測しますが、AREFピンに電圧を与え、[http://arduino.cc/en/Reference/AnalogReference analogReference()関数]で設定することにより、範囲の上限を変更することができます。 この他、ボード上には以下のピンがあります。 '''AREFピン''' アナログ入力ピンで入力を行う際の参照電圧を印加します。 このピンに印加された電圧を参照電圧として使用するかどうかは、[http://arduino.cc/en/Reference/AnalogReference analogReference()]で設定します。 '''Reset(リセット)ピン''' このピンへの入力電圧をLOWにすると、搭載しているマイクロコントローラをリセットすることができます。 シールドを搭載するとDuemilanove上のリセットボタンを覆い隠してしまうため、このピンを使ってシールド上にリセットボタンを装備するのが普通です。 == 通信 == Arduino Megaには、コンピュータ、他のArduino、あるいは他のマイクロコントローラと通信を行う機能があります。 ATmega1280は、TTLレベル(5Vレベル)のUARTが4個内蔵しています。 このうちの1個は、FTDI FT232RLによってUSB上の通信に変換され、[http://www.ftdichip.com/Drivers/VCP.htm FTDIドライバ](Arduinoソフトウェアの配布物に同梱してあります)によって、パソコン上では仮想COMポートとして認識されます。 Arduinoソフトウェアにはシリアルモニタ機能があり、これを使うとArduinoボードが送信するデータを表示し、またArduinoボードに対してデータを送信することができます。 ボード上のLED(RXおよびTX)は、FTDIのチップおよびUSB接続を経由してデータが送受信されると点滅します(ただし、デジタルI/Oピン0番および1番によるシリアル通信だけでは点滅しません)。 [http://www.arduino.cc/en/Reference/SoftwareSerial ソフトウェアシリアル通信ライブラリ]を使用すれば、シリアル送受信ピン以外の任意のデジタル入出力ピンでもシリアル通信を行うことができます。 ATmega1280は、I^2^C(TWI)およびSPIによる通信の機能をも持っています。 Arduinoソフトウェアには、I^2^Cによる通信を簡単にするWireライブラリが含まれています。 このライブラリの詳細については、[http://wiring.org.co/reference/libraries/Wire/index.html Wiringのウェブサイト]を参照して下さい。 SPIによる通信の機能は、現状のライブラリでは提供していません。 SPIの使用方法については、ATmega1280のデータシートを参照してください。 == プログラミング == Arduino Megaにプログラムを書き込むには、Arduinoソフトウェア([http://arduino.cc/en/Main/Software ダウンロード])を使用します。 詳細については、[http://arduino.cc/en/Reference/HomePage リファレンスマニュアル]および[http://arduino.cc/en/Tutorial/HomePage チュートリアル]を参照して下さい。 Arduino Mega上のATmega1280には、あらかじめブートローダを書き込んであります。 このブートローダにより、外部の書き込み装置を使わずにプログラムを書き込むことが可能になっています。 書き込みの際の通信は、アトメル社が開発したSTK500プロトコル([http://www.atmel.com/dyn/resources/prod_documents/doc2525.pdf リファレンス]、[http://www.atmel.com/dyn/resources/prod_documents/avr061.zip Cのヘッダファイル])です。 ブートローダを使用せず、ICSPヘッダ(In-Circuit Serial Programming、ISPとも呼ぶ)を使用してプログラムを書き込むこともできます。 [http://arduino.cc/en/Hacking/Programmer 書き込み方法については、このページを参照して下さい。] == 自動リセット(ソフトウェアリセット) == プログラムを書き込むにはリセットする必要があります。 Arduino Megaは、ボード上のリセットボタンを物理的に押さなくても、パソコン上のソフトウェアからリセットすることができます。 FT232RLチップが備えるハードウェアフロー制御信号線のうちの1本(DTR)を、0.1μFのコンデンサを介してATmega1280のリセット信号線に接続してあります。 DTR信号を有効にすると(LOWレベルにすると)、一定時間の間リセット信号線がLOWレベルに維持され、これによってATmega1280がリセットされます。 この機能により、Arduinoソフトウェアのウィンドウ上のアップロードボタンを押すだけでプログラムを書き込むことが可能になっています。 プログラムの書き込みの直前にDTRをLOWレベルにするだけでいいので、ブートローダのタイムアウト(リセット直後にプログラムの書き込みを待つ時間)を短く構成できています。 こういった構成にしてあることにより、さらに注意すべき点があります。 Arduino Mega がMac OS XまたはLinuxが動作しているコンピュータに接続されている場合、コンピュータ上のソフトウェアが(USB経由の)シリアル接続を開くたびに、Arduino Megaはリセットされます。 そのため、その直後の0.5秒程度の間、Arduino Mega上ではブートローダが動作します。 ブートローダはプログラムを書き込むための通信データ以外のデータを無視するように作ってあるため、シリアル接続が開かれた直後に到着したデータは捨てられてしまいます。 Arduino Mega上のスケッチ(プログラム)がコンピュータ上のソフトウェアから何らかのデータを受け取って動作するようにする場合には、コンピュータ上のソフトウェアはシリアル接続を開いてから1秒以上待ってからデータを送信するようにしてください。 Arduino Megaのボード上の「RESET-EN」とマークしてある部分のパターンをカッター等で切断すると、この自動リセット機能を無効化できます。 切断場所の左右にはパッドを近接して配置してあるので、切断した場所をまたぐようにハンダを盛り上げてハンダ付けを行えば、再び自動リセット機能を有効にできます。 パターンを切らなくても、リセットピンと5Vピンの間に110Ωの抵抗器を接続することによっても、自動リセット機能を無効にすることができます。 == USBの過電流保護 == 誤使用にでショートまたは過電流が流れた場合にコンピュータのUSBポートを壊してしまうのを防ぐため、Arduino Megaにはリセッタブルヒューズを搭載してあります。 たいていのコンピュータのUSBポートには過電流保護機能がありますが、リセッタブルヒューズはそれとは異なる保護を行います。 USBポートのパスパワーからArduino Megaに500mA以上の過電流が流れると、過電流の状態が解消されるまで、リセッタブルヒューズにより電源が切断されます。 == 物理的形状およびシールドの互換性 == Arduino Megaのボードの大きさは、USBコネクタおよび電源ジャックをのぞいて、横4インチ×縦2.1インチです。 ボードをケース等にネジ止めするための穴が3個あります。 デジタル入出力ピンの7番と8番の間の距離は、160mil(0.16インチ)であり、他のピン間の100mil単位とは異なることに注意して下さい。 Arduino Megaは、Diecimila およびDuemilanove のために設計されたほとんどのシールドをそのまま使用できるように設計してあります。 デジタルI/Oピンの0番~13番(および隣のAREFおよびGNDピン)、アナログ入力ピンの0番~5番、電源用ピンヘッダ、ICSPヘッダ(ISPヘッダ)は、全て同じ位置にあります。UART(シリアル通信)のメインのピン(0番と1番)、外部割り込みの0と1(2番ピンおよび3番ピン)も同じ位置にあります。SPIについては、ICSPヘッダ(ISPヘッダ)を使用すれば、Duemilanove およびDiecimila との互換性が保たれます。 ''I^2^Cについては、Arduino Mega(20番ピンおよび21番ピン)と、Duemilanove およびDiecimila (アナログ入力ピンの4番と5番)とで異なることに注意して下さい。'' ''このページに掲載したArduino Megaの写真は、!SpikenzieLabsが撮影しました。''