Atmega328PBをArduinoで使うためのブートローダの書き込み、Mozziの修正

<!-- markdown-mode-on --> # **概要** <b>Atmega328PB</b>はAtmega328PAの後継だが、Arduino IDEからブートローダを書き込んで使おうとしても、 "avrdude: Expected signature for ATmega328P is 1E 95 0F" といったエラーが出て書き込めない。 <b>miniCore</b>というボードマネジャをIDEにインストールして、miniCore のボードを選んで書き込むという手順が必要である。 <b>MozziはAtmega328PBを知らない</b>ようで、スケッチの書き込みでコンパイルエラーとなる。その対応策も書いておく。 <a name="more"></a> # **本文** ## MiniCore Boards Manager のインストール <figure class="blogcard b-link"><a aria-label="記事詳細へ(別窓で開く)" href="https://github.com/MCUdude/MiniCore" rel="noopener noreferrer" target="_blank"><div class="blogcard-content"><div class="blogcard-image bi-link"><div class="blogcard-image-wrapper biw-link"><img alt="GitHub - MCUdude/MiniCore: Arduino hardware package for ATmega8, ATmega48, ATmega88, ATmega168, ATmega328 and ATmega328PB" height="100" loading="lazy" src="https://opengraph.githubassets.com/095e00c95ecc9963a7c6e335befaaf482f721dd7900a592ee4b8db1a0b5b4793/MCUdude/MiniCore" width="100"/></div></div><div class="blogcard-text"><p class="blogcard-title bt-link">GitHub - MCUdude/MiniCore: Arduino hardware package for ATmega8, ATmega48, ATmega88, ATmega168, ATmega328 and ATmega328PB</p><p class="blogcard-description bd-link">Arduino hardware package for ATmega8, ATmega48, ATmega88, ATmega168, ATmega328 and ATmega328PB - MCUdude/MiniCore</p></div></div><div class="blogcard-footer bf-link">  <img alt="ファビコン" height="16" loading="lazy" src="https://www.google.com/s2/favicons?domain=https://github.com/MCUdude/MiniCore" width="16"/>github.com</div></a></figure> このインストール方法には、Arduino IDEバージョン1.8.0以降が必要です。 1. Arduino IDEを開きます。 2. [ファイル] > [環境設定] メニュー項目を開きます。 3. [追加の Boards Manager URL] に次の URL を入力します。 https://mcudude.github.io/MiniCore/package_MCUdude_MiniCore_index.json 4. [ボード > ツール] > [ボード マネージャー] メニュー項目を開きます。 5. プラットフォームインデックスのダウンロードが完了するのを待ちます。 6. MiniCoreエントリが表示されるまで下にスクロールしてクリックします。 7. 「インストール」をクリックします。 8. インストールが完了したら、[ボード マネージャー] ウィンドウを閉じます。 9. Arduino IDEにMiniCoreを設定 ## ブートローダの書き込みとスケッチの書き込み <figure class="blogcard b-link"><a aria-label="記事詳細へ(別窓で開く)" href="https://asukiaaa.blogspot.com/2020/07/atmega328pb-minicore-bootloader-for-uart-uploading.html" rel="noopener noreferrer" target="_blank"><div class="blogcard-content"><div class="blogcard-image bi-link"><div class="blogcard-image-wrapper biw-link"><img alt="ATMega328PBにMiniCoreのブートローダーを書き込み、UART経由でプログラムを書き込んでみた" height="100" loading="lazy" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJYSM5AiOv2wPUYvjwDLdA8zLfOajRxAvijwyloqIWugmPQhOt1tbkmmnxXEUYbJ9b58XGuy5akRLf6pprn06na-OloAYrkViYGmx3VCAAYXPd0LMu4vQV6hmFX-De9JPGYYrZx3Kv4-A/w1200-h630-p-k-no-nu/IMG_20200719_222403.jpg" width="100"/></div></div><div class="blogcard-text"><p class="blogcard-title bt-link">ATMega328PBにMiniCoreのブートローダーを書き込み、UART経由でプログラムを書き込んでみた</p><p class="blogcard-description bd-link">背景 ATmega328PBとは、Arduino Unoなどに使われているATmega328Pというマイコンの後継機です。 ATmega328PBをArduinoフレームワークで開発できるようにしてくれるMiniCoreというプラットフォームでブートローダーを提供してくれています...</p></div></div><div class="blogcard-footer bf-link">  <img alt="ファビコン" height="16" loading="lazy" src="https://www.google.com/s2/favicons?domain=https://asukiaaa.blogspot.com/2020/07/atmega328pb-minicore-bootloader-for-uart-uploading.html" width="16"/>asukiaaa.blogspot.com</div></a></figure> Arduino as ISPを書き込んだProMicroをPCに接続した状態で、Arduino IDEを下記のような設定にします。 - ボード: (MiniCoreの)ATmega328 - Clock: Extarnal 16MHz (Externalを選ぶ場合は、発振子がD20に繋がっていることを確認してください。) - Variant: 328PB - Bootloader: Yes UART0 - シリアルポート: Arduino as ISPを書き込んだProMicroのポート - 書き込み装置: Arduino as ISP(ATmega32U4) ProMicroで使われているマイコンがAtmega32U4なので、マイコンが言及されている方を選びます。 ## MozziにAtmega328PB を認識させる <a href="https://forum.arduino.cc/t/compilation-error-between-328p-and-328pb-with-mozzi-library/1230299" target="_blank">ライブラリは 328PB について何も知らないようです。</a> 回避策としては、ライブラリ設定ファイルのPIN定義にAVR_ATmega328PBを追加することが考えられます。<b>Mozzi/config/known_16bit_timers.h</b> ``` // Arduino Uno, Duemilanove, LilyPad, etc // #elif defined (__AVR_ATmega168__) || defined (__AVR_ATmega328P__) #define TIMER1_A_PIN 9 #define TIMER1_B_PIN 10 #define TIMER1_ICP_PIN 8 #define TIMER1_CLK_PIN 5 ``` 上から3行目を次に変える ``` #elif defined (__AVR_ATmega168__) || defined (__AVR_ATmega328P__) || defined (__AVR_ATmega328PB__) ``` ## 関連リンク
Next Post Previous Post