2026年1月17日土曜日

ATMega4809(40Pin)のArduino互換機化 2(シリアルポートの検証)

 ATMega4809をArduino互換機し、USBシリアル変換ケーブルで接続した回路について、検証しました。

 ATMega4809には、4つのUARTがあります。40PinDIPタイプは、3つが利用できます。

 右図、およびATMega4809のドキュメントを見ると、
  UART0 TxD: 33(PA0) RxD: 34(PA1)
  UART1 TxD: 1(PC0)  RxD:  2(PC1)
  UART2 TxD: 23(PF0) RxD: 24(PF1)
が、標準のUARTになっています。
(40PinDIPでは、4つ目のUART3はピン数の関係で外部に端子が出力されていません)


OptibootとのArduinoのプログラムの関連性

 Bootloaderの中で、Optibootの選択がいくつかあります。
  
 この違いは、シリアルポートとして、どのUARTを使うかということです。

 しかし、UART0以外の場合は、Arduinoのシリアルを使う場合に、注意する必要があることが分かりました。

 例えば、Bootloaderを「Optiboot(UART1 default pins)」を選択して、ブートローダの書込みをします。
 これにより、USBシリアル変換ケーブルの接続先は、UART1の「TxD:  1(PC0)  RxD:   2(PC1)」になります。

 簡単なシリアル通信のプログラムを書き込んで実行します。500msごとに数値を表示させ、カウントアップさせていくものです。
void setup() {
  Serial.begin(9600);
}
int count=0;
void loop() {
  Serial.printf("%4d\n",count);
  count++;
  delay(500);
}
 シリアルモニタを表示させても、何も起こりません。
 どこが違うのでしょうか。

 このプログラムの「Serial」を「Serial1」に変更(2カ所)して書き込みます。すると、シリアルモニタに数値が表示されるようになりました。
 Arduinoでは、「Serial1」はUART1の端子を利用した通信を意味します。このため、Optibootで設定したシリアルポートが「Serial」で通信できない場合があるということです。
 同様に、Bootladerの書き込み設定で、「Optiboot(UART2)」を選択した場合には、Arduinoプログラムでは、「Serial2」にしないとシリアルモニタに表示されません。

 このことから、Bootladerの書き込み設定では、Arduinoのスケッチ例などでシリアル通信を行うことを考慮すると「Optiboot(UART0 default pins)」にしておくのがよいと判断しました。

BootloaderのOptiBoot設定の追加検証

  Bootloaderの設定に「Optiboot(UART0 alternative pins)」の設定があります。ピン割当の図を見ると、
 UART0 TxD: 37(PA4) RxD: 38(PA5)
があります。
 ここを使う場合には、ATMega4809のドキュメントから Port Multiplexer(PORTMUX)という機能があり、ATMegaの内部レジスタ設定で、シリアルポートを他の端子に移動させるものです。
 そこで、Bootloaderの設定を「Optiboot(UART0 alternative pins)」にして、ブートローダを書き込みます。
 USBシリアル変換ケーブルで接続先をPA4、PA5にすると、問題なくプログラムを書き込むことができました。しかし、シリアルモニタを開いても、何も表示されません、
 これは、Bootloaderは、シリアルの接続先をPA4、PA5に設定してあるので、プログラムは書き込みができたことになります。しかし、Arduinoのプログラムの「Serial」は標準の接続先になっているため、何も表示されないことを意味します。


0 件のコメント:

コメントを投稿

LEDマトリックス表示装置の設計・製作 9(画像表示)

  LEDマトリックスに画像を表示させるには、いろいろな画像形式を知る必要があります。現在、よく使われるJPG形式やPNG形式は圧縮処理されて保存されています。これに対して、BMP形式やTIFF形式は非圧縮形式で、画像データがそのまま保存されています。このため、ファイルは大きくな...