PR

マイコンって何?初心者が最初に知るべき3つの役割

組み込みやりたいと思って、評価ボード買ってみました!
けど何がなんだか?

こうした悩みを解決します。

姫野秀徳

組み込みエンジニアとしてメーカー勤務10年。
第二種電工事士、基本情報技術者、Code.org認定教師。
microbitを用いた電子工作&プログラミング教室を開校。
組み込み開発の実際を発信するyoutube活動も行う。

姫野秀徳をフォローする
組み込みオンライン学習システム"クミタテ"を作っています クミタテを見る

マイコンとは何か

組み込みプログラミングというと、なんだか難しそうに聞こえますよね。
でも実は「マイコン」という小さなコンピュータをどう使うか、というだけの話なんです。

マイコンには大きく分けて3つの役割があります。

  • 通信:外のセンサーやPCと情報をやり取りする
  • 演算:受け取った情報を計算・処理する
  • 制御:LEDやモーターを動かすなど、外に働きかける

評価ボードを買ってサンプルプログラムを動かすと、「光った!動いた!」と感動しますよね。
ただ、「なぜ動いたのか?」まではよく分からない…。
これは多くの初心者がつまずくポイントです。

そこでまずは、「マイコンは通信・演算・制御を組み合わせて世界とつながっている」というイメージを持つと理解がグッと進みます。
サンプルを動かす楽しさから一歩進んで、「自分で仕組みを作れる!」という感覚が味わえるようになりますよ。

マイコンの中身

マイコンのデータシートに、何の機能が含まれているか、どのように取り扱うか記載されています。

これらのうち、ESP32S3を例に、最低限覚えておきたいものは以下の通りです。

  • 通信:SPI, I2C, UART
  • 演算:ADC
  • 制御:GPIO

各機能について、理論から入らず、まずはサンプルプログラムを動かしてみます。

そして、サンプルプログラムをいじったり、調べて理解を深めていくとよいです。

組み込みは文字で勉強するよりも、動かして学んだ方が理解が早いと思います。

現実は「動かねー!」の連続であることも心しておきましょう。

たとえばGPIOの使い方をArduinoサンプルプログラムで学ぶ

Arduinoでよく見るLチカのサンプルプログラムを以下に示します。

void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);  // turn the LED on (HIGH is the voltage level)
  delay(1000);                      // wait for a second
  digitalWrite(LED_BUILTIN, LOW);   // turn the LED off by making the voltage LOW
  delay(1000);                      // wait for a second
}

GPIO(電圧の入出力)は

・pinMode関数で入力/出力を設定
・(出力設定の場合)digitalWrite関数で実際に出力させるか設定

のように、2つの設定があるのだとわかります。

Arduinoが便利な関数を用意してくれているから簡単に使える

pinModeやdigitalWrite関数はArduino側が用意してくれています。
これらの関数の中身はどうなっているのでしょう?

ArduinoCore-sam/cores/arduino/wiring_digital.c at master · arduino/ArduinoCore-sam
Contribute to arduino/ArduinoCore-sam development by creating an account on GitHub.

結局はレジスタを設定している

マイコンには「メモリマップ」と呼ばれる仕組みがあり、各機能(GPIO、UART、タイマー、ADCなど)の状態や動作を表すための「レジスタ」が、決められたアドレスに並んでいます。

以下の例では、GPIO_PINn_REGレジスタの中身について記載されており、どのビットが何に関係し、設定方法に関する記述がされています。

プログラムから見ると、このレジスタは「特別な変数」のような存在です。
たとえば、あるレジスタのビットを 1 にすれば該当するピンから電圧出力し接続先の LED が点灯し、0 にすれば消灯する。別のレジスタに数値を書き込めば UART がデータを送信する。

つまり、私たちがコードの多くは、このレジスタに値を書いたり読んだりして、ハードウェアを思い通りに動かす処理なのです。

「GPIOを制御する」「通信を行う」「タイマーを動かす」といった機能も、すべて裏側ではレジスタを設定しているだけ。
これを理解すると、「組み込みプログラミングはレジスタ操作の積み重ね」だということが見えてきます。

まとめ

組み込みプログラミングというと難しく聞こえますが、突き詰めれば「マイコンという小さなコンピュータに命令を送り、外の世界とやり取りさせる」ことです。

マイコンは 通信・演算・制御 の3つの役割を持ち、それぞれが「レジスタ」という特別な変数によって管理されています。
サンプルプログラムで使う便利な関数も、内部では結局このレジスタに値を書き込んだり読み取ったりして動いているのです。

LED を点けるのも、センサーの値を読むのも、モーターを回すのも、すべてはレジスタ設定の積み重ね。
これを理解すると、「ただサンプルが動いた!」から一歩進んで、「マイコンの仕組みが分かって自分の思い通りに動かせる!」という感覚を得られるはずです。

組み込みは最初こそ「動かねー!」の連続ですが、動作の裏側にある仕組みを少しずつ理解することで、必ず面白さが増していきます。

この内容が良いと思ったら、いいね💖を押して教えてください!

組み込みオンライン学習システム"クミタテ"を作っています クミタテを見る
組み込み機器
シェアしていただけると嬉しいです!

コメント

error: コンテンツ保護のため右クリック使用禁止
タイトルとURLをコピーしました