Arduino UNO R4 MINIMAで一風変わったLチカ 

 

 今回は、前回言ったレジスタ直接制御の利点の二つ目、「Arduino IDEで定義されていないポートを制御できる」について紹介したいと思う。

 

 Arduino UNO R4 MINIMAボードには、D13ポートに直結しているLEDがある。 D13ポートの出力をONにすればLEDが点灯し、OFFにすれば消灯する。 誰もが最初にお世話になるLEDだ。 基板上には"L"の印刷がされている。

そのLEDの隣には、もう二つのLEDが存在する。 基板には"TX"と"RX"と印刷されている。

なんかこのLED達って光らないのよね。 プログラムを書き込むときにチラチラ光らんのよ。 UNO R4 WiFiでは光るんだけど、MINIMAでは光らない。 ブートローダーのバグかな?

何にせよ「光らないのなら光らせてしまえ」というのが今回の趣旨。

どうやってやるかと言うと、ポートレジスタ直接制御の出番ってわけ。

 

 実験

下記のプログラムをArduino UNO R4 MINIMAボードに書き込んで実行すれば"TX"と"RX"のLEDを点灯させることができる。 UNO R4 WiFiでは動作しない。 その理由は次回。

void setup() {
  pinMode(13, OUTPUT);
  R_PORT0->PDR_b.PDR12 = 1;
  R_PORT0->PDR_b.PDR13 = 1;

  R_PORT0->PODR_b.PODR12 = 1;
  R_PORT0->PODR_b.PODR13 = 1;
}

void loop() {
  digitalWrite(13, HIGH);
  delay(100);
  digitalWrite(13, LOW);
  R_PORT0->PODR_b.PODR12 = 0;
  delay(100);
  R_PORT0->PODR_b.PODR12 = 1;
  R_PORT0->PODR_b.PODR13 = 0;
  delay(100);
  R_PORT0->PODR_b.PODR13 = 1;
}

※ "L"LEDのアノードはD13ポートと繋がっていて、カソードは抵抗を介してグランドと繋がっているのでD13ポートをHIGHで点灯。 "TX"LEDと"RX"LEDのアノードは5V電源と繋がっていて、カソードは抵抗を介してマイコンの端子に繋がっているのでマイコン端子をHIGHで消灯する。 つまりプルアップされているのと同じ。