どこかで見たものを再現 興味を持ったものなんでもつくってみる その覚え書とアイテム置き場

ATmega328Pにoptibootをブートローダーに使えばArduino Uno互換

Arduino Duemilanove 回路図 (PDF: Arduino-Duemilanove-schematic)
必要パーツ
 電源周りの回路はAE-UM232Rを使い、赤い部分のパーツを準備する。
  • 秋月AE-UM232R × 1
   TTL(CMOS)レベル変換タイプ[K-01977]
  • ATmega328P-PU × 1
  • セラミックコンデンサー
   0.1μF × 3(2)
   22 pF × 2
  • 水晶発振16MHz × 1
  • タクトスイッチ × 1
  • オプション
   LED周りの破線部分
    LEDと電流制限抵抗(抵抗値はLEDに合わせ好みの明るさに調節)

   リセット回路にダイオード追加
    1N4148 × 1

Arduino Duemilanove 328 互換機 回路図 (PDF)

ブレッドボードに挿してみた。

Arduino IDE のインストール
 http://arduino.cc/en/Main/Software
 Arduino 1.0.5を使用した。(2014/01/08に Arduino 1.0.5-r2がリリースされた)
ブートローダーのアップロード
   AE-UM232R   ATmega328P-PU
  CTS (10ピン)MISO (18ピン d12)
  DCD ( 9ピン)MOSI (17ピン d11)
  DSR ( 8ピン)SCK  (19ピン d13)
  RI   ( 6ピン)RESET ( 1ピン rst)

  • C13(0.1μF)外す。(DTRピンとRESETピン切り離す)
  ATmega328Pの19ピンにLEDを接続した場合はLEDを外す。

  • AE-UM232Rのジャンパーピン J1:2−3間ショート、J2:ショート

  • AE-UM232RとPCをUSBケーブルで接続する。
  • Avrdude-GUI起動しProgrammerは 'diecimila: FT232R Synchronous BB' を選択する。
  • Fuseの設定とブートローダー選択して書き込む
  [デフォルトブートローダーの場合]
   Fuse Bit:
   Lo = 0xFF, Hi = 0xDA, Ext = 0xFD(05)
   Flash Hexファイル:
   [Arduino IDEフォルダー]\hardware\arduino\bootloaders\atmega\ATmegaBOOT_168_atmega328.hex

  [optibootの場合]
   Fuse Bit:
   Lo = 0xFF, Hi = 0xDE, Ext = 0xFD(05)
   Flash Hexファイル:
   [Arduino IDEフォルダー]\hardware\arduino\bootloaders\optiboot\optiboot_atmega328.hex
  • アップロードが完了したらLock Bitを0x0Fにセットし(実際の設定値は未使用のビットが立つので0xCFになる)Avrdude-GUIを終了する。
  • USBケーブルを外して C13(0.1μF)を挿す。(19ピンLEDが必要ならば挿す)
  • USBケーブルを接続して Arduino IDEを起動
  シリアルポートを設定
  マイコンボードの設定は
   デフォルトブートローダーは「Arduino Duemilanove w/ ATmega328」を選択する。
   optibootは「Arduino Uno」を選択する。

  Arduino UnoはUSBシリアル変換にATmega16U2/8U2を使っているが
  optibootだとFT232RLでもArduino Unoで認識する。
  ArduinoのUno化と言われている。

以上でスケッチを書き込めて、動作するはずなのだが。。。ここでつまづく

スケッチを書き込もうとするとエラーが発生して書き込めない。
TXDとRXDはクロスしてATmega328Pにつないであるのに通信できていない。
avrdude: stk500_getsync(): not in sync: resp=0x00


どうやらオリジナルArduinoでも起きている現象みたい。
リセット回路でC13の電圧+電源電圧が加わることが原因らしい。

エラーがでたらタクトスイッチを数秒間ながめに押しつづけて
コンデンサーをしっかり放電してから離しリセットする。
それから書き込み開始、これでエラーなく動作した。

RESETピンは内部プルアップされているはずだが、回路図どおり10kでプルアップするべき?
Arduino Uno Rev3のリセットは、プルアップ抵抗と電源より高い電圧をVCCへ逃がすために
ダイオードが追加されているので、1N4148あたりを追加すると改善策するかも?
手元に適当なダイオードがないので後日追加してみよう。(1N4148追加してみました)

Arduino Uno Rev3 回路図 (PDF: Arduino_Uno_Rev3-schematic)


2台目からは1台目にArduinoISPを書き込みブートローダーライターにできる。

Arduino IDEのマイコンボード設定項目は変更可能
  [Arduino IDEフォルダー]\Arduino\hardware\arduino\boards.txtを編集する。

  ex. [Optiboot] Arduino Duemilanove w/ ATmega328 の追加は
  以下を挿入する。
##############################################################
atmega328o.name=[Optiboot] Arduino Duemilanove w/ ATmega328
atmega328o.upload.protocol=arduino
atmega328o.upload.maximum_size=32256
atmega328o.upload.speed=115200
atmega328o.bootloader.low_fuses=0xFF
atmega328o.bootloader.high_fuses=0xDE
atmega328o.bootloader.extended_fuses=0x05
atmega328o.bootloader.path=optiboot
atmega328o.bootloader.file=optiboot_atmega328.hex
atmega328o.bootloader.unlock_bits=0x3F
atmega328o.bootloader.lock_bits=0x0F
atmega328o.build.mcu=atmega328p
atmega328o.build.f_cpu=16000000L
atmega328o.build.core=arduino
atmega328o.build.variant=standard
##############################################################

  

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

管理人/副管理人のみ編集できます