· 

AVR128DB28(Arduino DxCore)のUART出力

 

Arduino化したAVR128DB28のUARTポートを替えたい 
なんとなくうまくいったので少し中途半端。もっと掘らなくていいのか?って思うことって最近多い。全部掘ってたら時間が足りないのも現実。
でどうしたいのかっていうと、
Arduino化したAVR128DB28のUARTってTX/RX=PA4/PA5ってなっている。これをTX/RX=PF0/PF1に変更したい。自作ボード的には↓こういうこと。
どうするのか、まずは、Arduino IDEで設定を変えて
その状態でUPDI使ってbootloaderを書き込む。そして、UPDIとUARTを切り替えるジャンパピンを元に戻すと、UARTからソフトを書き込めるっちゃー書き込める。
  1. void setup() {
  2.   Serial.begin(115200);
  3.   while (!Serial && millis() < 5000);
  4.   pinMode(LED_BUILTIN,OUTPUT);
  5.   digitalWrite(LED_BUILTIN,LOW);
  6. }
  7. void loop() {
  8.   digitalWrite(LED_BUILTIN,HIGH);
  9.   Serial.println("No engineering, no life!!");
  10.   delay(250);
  11.   digitalWrite(LED_BUILTIN,LOW);
  12.   delay(250);
  13. }
で、このコードだと、PCのターミナルには何も送られてこない、、、はて、、、書き込めるんだから配線は問題ないはず、、、で、調べまくると、、、Serial.pins()とかSerial.swap()とか関数がある的な説明があって、何となくいじくり倒したけど、うまくいかなかった。で、そういえば昔Arduino M0でUARTポート帰るときSerial1とかあったなーって思い、データシートを参照するとTX/RX=PF0/PF1はきっとSerial2だよと思ってやったらほんとにそう。
  1. void setup() {
  2.   //Serial2.swap(0);
  3.   Serial2.begin(115200);
  4.   while (!Serial2 && millis() < 5000);
  5.   pinMode(LED_BUILTIN,OUTPUT);
  6.   digitalWrite(LED_BUILTIN,LOW);
  7. }
  8. void loop() {
  9.   digitalWrite(LED_BUILTIN,HIGH);
  10.   Serial2.println("Monday Tuesday Wednesday Thursday Friday Saturday Sunday Engineer!!");
  11.   delay(250);
  12.   digitalWrite(LED_BUILTIN,LOW);
  13.   delay(250);
  14. }
こんなかんじで、ちゃんとでます。
なんとなく勘でうまくいった。仕事じゃないので良いのです。仕事ならちゃんとライブラリとかbootloaderとかのコードをほじくり返したうえで正しいって確信してリリース。すべき、、、いや、そうできたらいいな、、、いや、最近の世の中はブラックボックスを推奨している(?)から見らんでいいのか、、、かなしいことです( •̥ࡇ•̥ )