久しぶりにブログ更新だ。
ArduinoやATmega328PなどのAVRマイコンのプログラミングを再開した。
これらのプログラミングに関してはワテは約二年ほど前に熱中していた時期があり、その当時はLEDチカチカから始めて、リモコン送受信、ステッピングモーターやサーボモーターの制御などに成功した。
今回、久しぶりにこれらのプログラミングを再開した理由は、マイコンを使った幾つかの電子工作のアイデアがあるので、まずはマイコンプログラミングを復習することから始めたのだ。
では本題に入ろう。
AVRやPICマイコンのプログラミング環境
Arduino UNOにはATmega328Pと言う型番のAVRマイコンが使われている。
AVRマイコンとは旧Atmel社(Microchip社に買収された)が販売していたワンチップマイコンの総称だ。現在はMicrochip社から販売されていてATmega、ATtiny、その他幾つかのシリーズがある。
それらのプログラム開発にはAtmel Studioと言う無料の開発環境が提供されていた。
Atmel社がMicrochip社に買収されてからは、それらはMicrochip Studioと言う名前に変わっている。
一方、Microchip社はPICマイコンを以前から製造販売している。PICも有名なマイコンだがワテは使ったことが無い。今後使ってみたいと思っている。
PICマイコンの開発にはMicrochip社が無料で提供している開発環境MPLAB X IDEを使うのが一般的だろう。このMPLAB X IDEはPICだけでなくAVRマイコンの開発も可能だ。
ワテもMPLAB X IDEを以前にダウンロードしてWindows10パソコンにインストールしている。前述のMicrochip StudioとMPLAB X IDEを必要に応じて使い分けている(と言うか今のところ両者を使いながら試行錯誤しているのだが)。
これらのマイコンのプログラム開発を行う場合にはライターが必要になる。
ワテが知っているライターは以下の通り。
AVRマイコンのプログラミングを行うならMicrochip StudioとATMEL-ICEの組み合わせが良いと思う。この組み合わせが従来からの標準的な手法だからだ(とワテは思う)。ただしAtmel社がMicrochip社に買収されてからは、Microchip StudioよりもMPLAB X IDEが今後の開発環境の主流になるように思う。
なぜならMicrochip StudioはATMEL-ICEはサポートしているが最新のPICKIT5はサポートしていないし、Microchip Studioは既に保守モードに入っているようなのでいずれ廃止される運命だろう。
なので今後Microchip社から販売される新しいデバイスのプログラム開発をするならMPLAB X IDEを使うのが良さそうだ。MPLAB X IDEはATMEL-ICEもPICKIT5もどちらもサポートしているし。
ワテの場合は従来はMicrochip StudioとATMEL-ICEを使ってATmega328Pのプログラミングをやっていた。今後もこの組み合わせで使う予定だが、PICKIT5も持っているのでMPLAB X IDEとPICKIT5に移行しようかなあとも考えている。
まあ、当分はこれら二種類の開発環境を使ってどちらも勉強するつもりだ。
Arduino IDE 2ではデバッガーが使えるらしい
一方、Arduinoの開発にはこれらの専用ライターが無くてもパソコンとArduinoとをUSBケーブルで接続するだけで良い。
そう言う点ではとても手軽ではあるが、欠点としてはArduinoのプログラム開発環境であるArduino IDE 1.8は非常に簡素な機能しかなくて、プログラムのコンパイルと書き込みしか出来ない。デバッガーが使えないのだ。
ところが最新のArduino IDE 2.3.2ではデバッガーが使えるらしい。
と言うことでArduino IDE 2.3.2をインストールして試してみたのだが、「デバッグは’Arduino UNO’ではサポートされていません。」と言うメッセージが表示される。
あかんがなw
ではどんなArduinoならIDE2でデバッグ出来るのか?
Arduinoの公式サイトにその情報を見つけた。
https://docs.arduino.cc/software/ide-v2/tutorials/ide-v2-debugger/
The debugger is compatible with all SAMD boards. Boards using the SAMD architecture are the following: MKR Zero MKR WiFi 1010 MKR FOX 1200 MKR WAN 1300 MKR WAN 1310 MKR GSM 1400 MKR NB 1500 MKR VIDOR 4000 Nano 33 IoT Zero
SAMDアーキテクチャと言うのを採用しているArduinoならIDE2でデバッグ出来るらしい。
例えばアマゾンでArduino MKR Zeroが販売されている。
ちょっと高いので手軽には買えないが、もう少し安くなったら一台買って試してみたい。
Arduino UNO R3でLEDチカチカを復習する
さてワテのArduinoプログラミングは約二年間のブランクがあるので、まずはLEDチカチカを再度やってみる。
下写真がArduino UNO R3だ。
写真 Arduino UNO R3
引用元 https://www.arduino.cc/
上写真のArduino UNO R3の場合、Digital 13(D13)と言う出力端子にはGNDとの間に発光ダイオードが付いている。「L」と言う白色のシルク文字が書いてあるやつだ。
もう少し具体的に言うと下図のD13(PB5)端子の左にあるLED_BUILTINという表面実装されている小型の発光ダイオードだ。
図 Arduino UNO R3基板の入出力端子や発光ダイオードの位置や名称
引用元 https://www.arduino.cc/
下図はこのArduino UNO R3の全回路図だ。
図 Arduino UNO R3の全回路図
引用元 https://store-usa.arduino.cc/products/arduino-uno-rev3/?selectedStore=us
この回路図からATmega328Pマイコン付近の回路図を拡大したものが下図だ。
図 ATmega328Pマイコン付近の回路図を拡大したもの
上図においてATmega328Pマイコン(28ピン)の19番ピンがDigital 13(D13)であり、SCKあるいはPB5と言う名称も付いている。
なぜ一つのピンにD13、SCK、PB5などの複数の名称が付いているのかな?
混乱の元だと思うのだが。
Arduino UNO R3はあまり良い設計では無いのかな?
まあ、どうでも良いが。
で、下図はそのD13(=SCK=PB5=19番ピン)端子の左にあるLED_BUILTINという表面実装されている小型発光ダイオード周りの回路図だ。
図 D13(=SCK=PB5=19番ピン)端子の左にあるLED_BUILTINという表面実装されている小型発光ダイオード周りの回路図
上図のようにD13(=SCK)端子とGNDとの間にに1KΩ抵抗を通して発光ダイオードが入っているので、このD13端子をHighにすれば点灯し、Lowにすれば消灯する。
あるいは自分でブレッドボード、抵抗、発光ダイオードを用意して、D13端子から配線を引っ張って、抵抗と発光ダイオードを直列接続してGNDに接続すれば、その発光ダイオードもチカチカさせる事が出来る。
ちなみに上に示したArduino UNO R3の回路図と、下図に示す基板レイアウトはArduino公式サイトからの引用だが、両者は回路図設計ソフトのように連動機能が動くぞ。
例えば上の回路図でLED_BUILTINという表面実装発光ダイオードのシンボルをクリックすると、下図のように基板上にあるその発光ダイオードが赤色でハイライトされるのだ。KiCadなどの電気系CADなら標準で備わっている機能だが、WEBサイトでそのような機能をどう言う手法で実現しているのかは興味あるので、今後調査してみたい。
図 Arduino UNO R3の基板レイアウト
引用元 https://store-usa.arduino.cc/products/arduino-uno-rev3/?selectedStore=us
Arduino IDE 1.8.19でLEDチカチカ成功
まずはArduino IDE 1.8.19でLEDチカチカ実験をやってみる。
自分用のメモだが、今回のプログラム(Arduino Sketch)は以下のフォルダに保管した。
"E:\Desktop\Arduino\2024\2024-05-31-1-ArduinoUNOで内蔵LEDをチカチカ\Arduino1.8.19_LED_blink\Arduino1.8.19_LED_blink.ino"
下図のようにツールメニューを使ってボードの設定、シリアルポートの割り当てなどを行った。
図 ボード設定はArduino UNO、シリアルポートはCOM8を使う
なお、シリアルポートは使うパソコンによって自動で番号が割り当てられるようなので、必ずしも毎回COM8になるとは限らないようだ。
下図はLEDチカチカのスケッチだ。
13番ピンに出力する。これがD13(Digital 13)であり、SCK=PB5=物理的な19番ピンでもある。
図 Arduino IDE 1.8.19を使ってArduino UNO R3にLEDチカチカのスケッチ書き込み成功
上図のように⇒アイコンをクリックして、スケッチをフラッシュメモリーに書き込み成功した。
そのスケッチのコード(Arduino1.8.19_LED_blink.ino)を以下に示す。
int outPin = 13; void setup() { // put your setup code here, to run once: pinMode(outPin, OUTPUT); } //pinはピン番号 void loop(){ digitalWrite(outPin, HIGH); delay(200); digitalWrite(outPin, LOW); delay(100); }
コード Arduino UNO R3用のLEDチカチカのスケッチ(Arduino1.8.19_LED_blink.ino)
スケッチ書き込みに成功すると、下図のようにD13端子の隣にある発光ダイオードがチカチカ点滅した。この場合、HIGH(点灯)で200ms、LOW(消灯)で100msの周期で点滅を繰り返す。
写真 D13端子に接続されている表面実装LEDが無事に点滅した
まあ、これくらいは簡単なので誰でも出来るだろう。
Arduino IDE 2.3.2でもLEDチカチカ成功
次に、Arduino IDE 2.3.2の環境で同じスケッチを実行してみた。
下図がArduino IDE 2.3.2の画面キャプチャーだが、IDE1.8.19と殆ど変わらない。
図 Arduino IDE 2.3.2のツールメニューでボードはArduino UNO、ポートはCOM8に設定
下図に示すスケッチも先程のやつと同じだ。
図 Arduino IDE 2.3.2を使ってArduino UNO R3にLEDチカチカのスケッチ書き込み成功
先ほどと同じスケッチだが、以下に再度掲載しておく。
int outPin = 13; void setup() { // put your setup code here, to run once: pinMode(outPin, OUTPUT); } //pinはピン番号 void loop(){ digitalWrite(outPin, HIGH); delay(1200); digitalWrite(outPin, LOW); delay(1100); }
コード Arduino UNO R3用のLEDチカチカのスケッチ(Arduino2.3.2_LED_blink.ino)
このコードでは、HIGH(点灯)で1200ms、LOW(消灯)で1100msの周期で点滅を繰り返す。
と言う事で、二年ぶりにArduino UNOを使ってLEDチカチカに成功した。
まとめ
光陰矢の如しと言うが、その通りだ。
当記事ではArduinoのプログラム開発環境であるIDE1とIDE2を使って、Arduino UNO R3の基板上にあるLEDを点滅させるプログラムやその作業手順を紹介した。
LEDチカチカはどんなマイコンを使う場合でもまず最初に行われる実験なので、取り敢えずそれに成功すればプログラム開発の環境が整ったことになる。
今後の予定としては、以下の作業を予定している。
- Microchip StudioとATMEL-ICEを使ってATmega328PにICSP(6ピン)接続でプログラミング
- MPLAB X IDEとATMEL-ICEを使ってATmega328PにICSP(6ピン)接続でプログラミング
- MPLAB X IDEとPICKIT5を使ってATmega328PにICSP(6ピン)接続でプログラミング
- MPLAB X IDEとPICKIT5を使ってPICプログラミング
一ヶ月以内くらいで完了したいと思っている。
それと並行して、ATmega328Pを使ってリモコン送受信の実験も復習する予定だ。
ATmega328Pを使ってリモコン送受信をする実験も二年前に成功したが、それらのプログラムはすっかり忘れてしまっている。
なので、とりあえずMicrochip StudioとATMEL-ICEを使ってATmega328PにICSP(6ピン)接続で接続して、赤外線リモコンを使った送受信のプログラムが動くようにしたい。
(続く)
コメント