今回は、Arduinoに関するお話です。
Arduinoというと【マイコンボード】ですが、
このマイコンボードのマイコン単体に
ArduinoIDEでプログラムを書き込むのが今回の記事の趣旨です。
ATmega4809というと、結構新しめのマイコンで、
搭載されているArduinoの代表としては、
ArduinoNanoEveryが有名ですね。
そんなArduinoNanoEveryに搭載されているATmega4809を
単体で購入して、ArduinoIDEでブートローダーを書き込み、
さらにはテストプログラムを書いてみました。
テストプログラムまでできて一件落着かと思いきや….
実は指定するピン番号にクセがあることがわかりました。
ATmega4809単体かつArduinoIDEでプログラミングするときは
非常に重要な情報になると思います。
是非最後まで読んでいってくださいね。
ATmega4809にArduinoIDEで書き込み出来るようになって、
指定するピン番号のクセについても理解できる。
Youtubeチャンネルにさまざまな動画を上げています。
↓↓↓こちらからYoutubeチャンネルにアクセス!! ↓↓↓
本ブログはアフィリエイトを用いた広告を掲載しています。
ATmega4809を使えるようにするために用意するもの
ATmega4809をArduinoとして使うためには、
以下のアイテムが必要になります。
ATmega4809
おそらくこの記事を読んでいるあなたは、
手元にATmega4809を持っているでしょう。
なので心配いらないと思いますが、
もしも持っていない場合はこちらで購入可能です。
実物はこんな感じ。
40pinタイプで、ブレッドボードのピッチに合っているので、
細かい作業が苦手でも扱いやすいですね。
Arduinoシリーズのどれか
今回Arduinoを書き込みとして使います。
Arduinoはいくつも種類がありますが、基本的にはなんでもできます。
本記事ではArduino UNOの互換機を使用します。
ほかにもネット上の記事ではArduino nanoで同じことを
やっている方もいるので、お好きなArduinoを選んでください。
もし本記事と同じようにArduinoUNOでやりたい場合は、
こちらから購入可能です。↓↓↓
ATmega4809を挿すようのブレッドボード
ブレッドボードは、ケチってはいけません。
これは長年電子工作をやってきた結論です。
わたしも安いブレッドボードを探していろいろ試していましたが、
なんといっても反っている粗悪品が多い!
反っていると、単体でいろいろ挿す分には良いのですが、
マイコンボードをその反ったブレッドボードに挿してはんだ付けすると….
具体的にどんなことが発生するのかはこちらをご覧いただくのが早いです。↓↓
ブレッドボードで安心感のある品質といえばやっぱりサンハヤトです。
こちらからサンハヤト製のブレッドボードが購入可能です。↓↓
ArduinoとATmega4809を接続するためのジャンパーワイヤー
今回、ArduinoをATmega4809の書き込み機として使用するわけですが、
ArduinoとATmega4809は物理的に接続してあげる必要があります。
そんなとき必要なのが配線。つまりジャンパーワイヤーです。
ジャンパーワイヤーは電子工作を始めるときにキットに付属されていることが多いです。
こんなキットですね。もしお持ちでないなら持っておいたほうが良いです。
ちなみに、買ったほうが安く上がりますが、
オリジナルのジャンパーワイヤーも工具や部品があれば自作可能です。
これは自作したときの記事です。お時間があるときにご覧ください。
LEDと抵抗(テスト用)
これは、最後にATmega4809で動作確認するために使います。
もしとりあえず制御できるか確認するだけで、
手元にオシロスコープなんかがすぐ出るならこれらは不要です。
もしLEDと抵抗を持っていないなら、
こちらから購入可能です。
ArduinoIDEで使うものを用意する
ArduinoIDEとArduinoUNOを使ってATmega4809をArduinoのように使うわけですが、
ArduinoIDEで書き込むファイルを入手する必要があります。
それがこの2つです。
それぞれ入手先から、適用方法まで解説します。
もしArduinoIDEってなに?まだもってないよ?という場合は、
こちらのリンクからArduinoIDEをダウンロードしてインストールしておいてください。
Jtag2updiの入手先と適用方法
まずはJtag2updiというファイルです。
こちらは、Arduinoのupdiという端子を使って、
Arduinoを書き込み機にしてしまうという有志の方が作成したツールです。
Jtag2updiの入手先
Githubにとびます。その後、緑色のCodeというボタンを押して、
表示される一番下のDownload ZIPというボタンを押しましょう。
すると勝手にダウンロードが始まります。
Jtag2updiの適用方法
Jtag2updiですが、ダウンロードした状態ではいけません。
少し手を加える必要があります。
ダウンロードしたjtag2updiに少し手を加える
それでは、ダウンロードできたJtag2updi.zipを解凍しましょう。
すると、このようなファイルが入っているはずです。
実はここでポイントですが、sourceというフォルダを
jtag2updiというフォルダ名にリネームしておきましょう。
リネームする理由ですが、
通常、Arduinoというのは、フォルダ名と実行するファイル名が一致していないと
プログラムが通らない(書き込めない)という仕様になっています。
これから、sourceフォルダ内のjtag2updi.inoというファイルを使うので、
source⇒jtag2updiにフォルダ名を変更する必要があるというわけですね。
フォルダ名まで変更が終わったら、jtag2updiフォルダ内にある、
jtag2updi.inoをダブルクリックして起動しましょう。
ArduinoIDEが正しくインストールされていればArduinoIDEで起動するはずです。
もしArduinoIDEで起動せず、他のプログラムで起動されてしまうようだったら、
jtag2updi.inoを右クリックしてプログラムを選択で、
ArduinoIDEを選択してArduinoIDEから起動しましょう。
MegaCoreXの入手先と適用方法
MegaCoreXとは、ATmega4809に書き込みを行うためのツールです。
MegaCoreが対応しているマイコンは、ATmega4809だけでなく、
ほかにもATgega3208、ATmega3209、ATmega1609、ATmega1608、ATmega809、ATmega808
に対応しています。つまりmegaAVR-0シリーズの書き込みに必要ということですね。
こちらも有志の方が作成しているもので、Github上に公開されています。
MegaCoreXの入手先
MegaCoreXの場合は、ArduinoIDE上から入手可能です。
具体的には、ArduinoIDEのこの設定画面を開きます。
開き方は、ArduinoIDEのファイルタブから、
基本設定を選ぶと表示されます。
他の開き方としては、Ctrlキーを押しながらカンマキーを押しても表示可能です。
次に、表示されている基本設定の画面の、
追加のボードマネージャのURL:
という項目があるので、そちらに、
https://mcudude.github.io/MegaCoreX/package_MCUdude_MegaCoreX_index.json
と打ち込んでOKを押しましょう。
MegaCoreXの適用方法
MegaCoreXが入手できたので、
ArduinoIDEで使えるように適用していきましょう。
ボードマネージャからATmega4809を選択する
まず、ツールタブを選択して、ボードマネージャーを選択してください。
その後、ボードマネージャーの検索窓でMegaCoreXと打ち込んで検索しましょう。
するとこのようにHITするので、インストールボタンを押しましょう。
自動でインストールが始まります。
次に、今回MegaCoreXを使ってATmega4809に書き込みを行うので、
このようにATmegaを選択します。
書き込み装置はjtag2updiを選択
最後に、書き込み装置の項目を設定しておきましょう。
今回使用するのは、jtag2updiですので、このように設定しておきましょう。
いったんここまでで前準備は終了です。
この後はPCと書き込み機のArduino、ATmega4809を配線してから行います。
ArduinoとATmega4809の配線図
ArduinoUNOとATmega4809を配線しましょう。
ATmega4809をブレッドボードに挿して、
ArduinoUNOと配線します。このようにしてください。
すでにテスト用のLEDと抵抗が付いていますが、
配線作業は一気にやってしまったほうがラクなので一緒にやってしまいましょう。
ArduinoUNOから出している線はDC5V、GND、D6の3本です。
なぜD6なのかは、jtag2updiのところに記載があります。
どのArduinoであってもD6=updiピンとして機能することを覚えておくといいですね。
Arduinoを書き込み機にする
Arduinoを書き込み機にするための手順は以下の通りです。
ArduinoIDEの初期設定と、配線はここまでで完了している前提ですので、
読み飛ばしてしまった場合は少し戻って作業しましょうね。
書き込み機にするArduinoをPCと接続する
これは通常通り、ArduinoとPCをUSBケーブルでつないでください。
いつもお使いのUSBケーブルで大丈夫です。
jtag2updiを書き込み機(今回はarduino UNO)に書き込む
先ほど開いたjtag2updiはまだ開いていますか?こちらを一度書き込み機に書き込んであげます。
書き込み方法は通常のスケッチを書き込むの全く一緒で、画面左上に出ている右三角をクリックしてあげるだけです。これで準備完了です。
この作業を忘れてしまうと、次の工程からエラーで進めなくなってしまうので忘れずに必ず実施しておきましょう。
ブートローダーをATmega4809に書き込む
いよいよ、ATmega4809にブートローダーを書き込みます。
ブートローダーとは、いわゆるArduinoとして使うための初期設定のようなものです。
このブートローダーを書き込むことで
ATmega4809にArduinoIDEで書き込みができるようになります。
ブートローダーの書き込み方は、
先ほど開いたjtag2updi.inoのツールタブを選択して、
「ブートローダーを書き込む」ボタンを押せばOKです。
このように表示されれば完了です。
ATmega4809にArduinoUNO経由でプログラミング
さて、ここまででATmega4809のArduino化が完了したわけですが、
せっかくならATmega4809を使ってプログラミングしてみたいですよね。
ATmega4809を使う場合の約束事はこちら。
ひとつづつ説明していきますが、
ひとまず今回試す配線図とスケッチを出しておきます。
テスト用の配線図
前の章で配線図は記載していますが、
何のため再度掲載しておきます。
テスト用にLEDをつなげています。
LEDと抵抗がつながっているのは、ATmega4809の10番ピンです。
テスト用のスケッチ
先ほど使ったjtag2updi.inoが開いていると思いますが、
新規でスケッチを作成してください。
jtag2updi.inoが開いているのでそのままそこに書きたくなりますが、
必ず新規のスケッチを開きましょうね。
void setup() {
// put your setup code here, to run once:
pinMode(15, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(15, HIGH);
delay(1000);
digitalWrite(15, LOW);
delay(1000);
}
今回はテスト用としてわかりやすくLEDを光らせる”Lチカ”にしました。
さて、ここで問題なのですが、
digitalWrite(15,HIGH);
としていますが、なぜATmega4809の10番pinが光るかわかりますか?
これは結構法則をみつけるのに苦労しました…
Pinoutは正しいものを選ぶこと
ここすごい重要です。
40pinのATmega4809をArduino化している場合は、
必ずここは40pinを選択してください。
選択肢として48ピンも選べますが、
必ず正しいピン数を選んでください。
この重要性は後ほど詳しく解説します。
ATmega4809にスケッチを書き込む場合は、先ほど使ったArduinoを通さないと×
いくらATmega4809をArduino化できたと言っても、
スケッチを書き込むのには、書き込み機であるArduinoが必要になります。
また、Arduinoのように通常の書き込み方法では
スケッチは書き込めません。
スケッチを書き込むときは、
「書き込み装置を使って書き込む」を選択する必要があります。
通常の右矢印ではATmega4809には書き込みできないので注意しましょう。
ArduinoIDEで指定するピン番号はArduino Nano Everyとは違う!
Arduino化したATmega4809を使う場合引っかかるのがピン番号。
Arduino化しているわけなので、Arduino Nano Everyのピン配置と
互換性があるのかな?なんて思いますよね?でも違います。
普通に考えたら引っかかる…
まず、ピン番号3を指定すると、
D3が点灯するというのはイメージがつきますね。
D3とは、Arduino Nano Everyでは、PF5に接続されていることがわかります。
つまり、PF5のピン番号に対応したATmega4809のピンが光るだろうと。
ATmega4809のPF5ピンは、28番ピンだとわかります。
これで、よし、28番ピンが光るんだな。
と思ったら大間違いです。
実際には、36番ピンのPA3が光ります。
意味わからないですよね笑
でも安心してください。法則があります。
その法則とは…
0番ピンがPA0に対応している。
これです。つまり、digitalWrite(0,HIGH);とすると、
PA0である33番ピンがHIGHになります。
同様に、例えばdigitalWrite(5,HIGH);とすると、
PA5である38番ピンがHIGHになります。
でここから厄介なのが、7を超えた場合です。
7を超えると、PB0がHIGHになると思いますよね?
ただ、今回使用している40pinのATmega4809にはPBはありません。
ArduinoNanoEveryに搭載されているATmega4809は48ピンで、
PB0~PB7が付いています。
Atmelのデータシートにも、このように記載があります。
Microchip社ATmega4809データシートより
- The 40-pin version of the ATmega4809 is using the die of the 48-pin ATmega4809 but offers fewer connected
pads. For this reason, the pins PB[5:0] and PC[7:6] must be disabled (INPUT_DISABLE) or enable pull-ups
(PULLUPEN).
簡単に言ってしまうと、40pinVer.は、ピンが少ないから
PB0~5とPC6,PC7は使うなよ。という話。
先ほど重要だとお話したPinoutがココで効いてきます!
40pinを選択してあれば、PB0~5とPC6,PC7は飛ばしてくれます。
簡単に対応表を作るとこんな感じです。
ピン番号 | ATmega4809の対応ピン名 |
---|---|
0 | PA0 |
1 | PA1 |
2 | PA2 |
3 | PA3 |
4 | PA4 |
5 | PA5 |
6 | PA6 |
7 | PA7 |
8 | PC0 |
9 | PC1 |
10 | PC2 |
11 | PC3 |
12 | PC4 |
13 | PC5 |
14 | PD0 |
15 | PD1 |
実際、テスト用の配線と
テスト用のスケッチはピン番号15でPD1が光っていることがわかっていただけると思います。
実は、40pinはこれで大丈夫ですが、
もし先ほどのPinoutの設定を48にしてしまうと、使用できないピンを飛ばしてくれないので、
例えば9とかを選んでしまうと、どこも光らない…なんてことになります。
PB1をHIGHにしようとしますからね…
今回のまとめ:ATmega4809をArduinoIDEで書き込み
今回は、ATmega4809をArduino化してみました。
Arduinoを書き込み機にしてATmega4809に書き込む方法については、
既に先人の方々が記事にしてくれていたので、スムーズに書き込みまでできました。
ただ、ピン番号に関しては結構引っかかりましたね…
ピン番号まで詳しく解説してくれいているところはなかったので、
この記事を参考にしてモノづくりしてもらえると良いかと思います。
コメント