クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

GPIOとPWMでピンを動かす

このレッスンのあとで: ピンを決まった周期で動かし、PWMのデューティ比を計算することができる。

55分のレッスンコマンド2件組み込みシステムラボ:シミュレートしたチップでレジスタ、ピン、PWM、割り込みを学ぶ

GPIOとPWMとは何ですか

GPIOとは、プログラムから入力にも出力にも使える、マイコンの汎用のピンです。PWMは、そのピンを速く入り切りして、ライトの明るさやモーターの速さを変える方法です。

このレッスンでは、ピンを出力にして動かし、決まった周期でPWMの信号を作ります。

このレッスンのゴール

メモ

ピンを決まった周期で動かし、PWMのデューティ比を計算することができる。

キーワード

ことばいみれい
GPIO入力にも出力にも使えるピン
出力チップがピンの高さを決める向き
周期同じ動きがくり返される1回分の長さ16ティック
ティッククロックの1歩
PWMピンを速く入り切りして、強さを変える方法
デューティ比1周期のうち、ピンが高い時間の割合

学生が入力するセルは、このプレビューでは空白です。

ピンは出力にしてから使う

ピンは、ビット1つで決まります。DDR のビットを1にすると、そのピンは出力になります。

PORT のビットを1にすると、出力ピンは高くなります。PIN を読むと、ピンの今の高さが分かります。出力ピンの PIN は、チップが出している値です。

画面の語は英語です

重要

ラボのチップは、実在しないマイコンのシミュレータです。スクリプトが出す語は英語です。最後の行は、8ティックのあいだの点滅で、# が点灯、. が消灯です。

ピン0を出力にして点滅させる

コマンド
docker exec jupyter python3 steps/pins.py

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

点滅は1ティックごとの反転

出力は、まず DDR が 0b00000001 です。ピン0が出力になりました。次に PORT と PIN が、どちらも 0b00000001 になります。

最後の行は #.#.#.#. です。スクリプトは、1ティックごとにビット0を反転しているので、点灯と消灯が交互に並びます。

PWMは高い時間の割合で強さを決める

ラボのタイマーは、0から15までを数えて、また0に戻ります。1周期は16ティックです。

TCNT が OCR より小さいあいだ、ピン5は高くなります。OCR が大きいほど、高い時間が長くなり、ライトは明るくなります。

比較値とデューティ比の表

OCR高いティック低いティックデューティ比
44124 ÷ 16 = 25パーセント
8888 ÷ 16 = 50パーセント
1212412 ÷ 16 = 75パーセント

学生が入力するセルは、このプレビューでは空白です。

比較値4、8、12のPWMを見る

コマンド
docker exec jupyter python3 steps/pwm.py

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

出力の1行は1周期分

各行は、compare、1周期分の16文字、on、off、duty の順です。compare 8 の行は、# が8個、. が8個で、デューティ比は50です。

行の中の % 記号は、パーセントのことです。周期は16のまま変わらず、高い割合だけが変わっています。

周期10のPWMを手元で作る

コード: python
period = 10          # 1周期のティック数
compare = 3          # 比較値
line = ""
for tick in range(period):
    if tick < compare:   # カウンタが比較値より小さいあいだ高い
        line = line + "#"
    else:
        line = line + "."
print(line)
print("デューティ比", compare * 100 // period, "パーセント")
# 練習: compare を 7 に変えて、もう一度実行しましょう。

よくある間違い

注意

「デューティ比を上げると、点滅が速くなる」と考える人が多くいます。周期は変わりません。変わるのは、1周期のうち高い時間の割合です。点滅の速さは、周期で決まります。

このラボとソースについて: 組み込みシステムラボ:シミュレートしたチップでレジスタ、ピン、PWM、割り込みを学ぶ

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。