Raspberry Pi Picoで4桁7セグLEDをダイナミック表示
Raspberry Pi PicoでのC++/C言語プログラミングの練習の継続..
タイマー割り込みの練習として、4桁7セグLEDの表示をやってみました。
動いている様子
以前、bluePill(Arduino環境)でやったプログラムを流用してやってみたのですが、意外とハマってしましました。
回路図
GP2~GP13ピンを使って、表示を行っています。
GP6~GP13は7セグLEDの点灯制御用で、1つのLEDあたり、4mAを流すようにR1~R8の抵抗を330Ωにしています。
GP2~GP5は表示する桁の表示制御用です。LED8個用の電流32mAを流すため、スイッチイング用にトランジスタを使っています。
この回路は、あまり良くないです。
GPIOピンをシンク(吸い込み)で駆動させるつもりでしたが、
後から、Raspberry Pi PicoではGPIOにオープンドレイン出力(オープンコレクタ)の指定で出来ないことが分かり、
変更も面倒なので、無理やり使っています。
とりあえず、タイマー割り込みの練習が目的のため、良しとします。
流用元のBlullPillでは出力ピンをシンク(吸い込み、オープンドレイン出力指定)にして、LEDの駆動電圧の変更(5V、3.3V)に
対応出来るようにしていたのですが(2年前はそのようにやっていたらしい)、
今回、安直に出力ピンの動作を 0V or ハイインピーダンス ⇒ 0V or 3.3V に置き換えたところ、
LEDの駆動電圧をHighと異なる電圧にするとまともに動きません。最初、5Vをかかていたため動かなくてハマりました。
GP6~GP13の出力をLow(0V)にした場合にLEDが点灯、High(3.3V)にした場合(本当はハイインピーダンスにしたかった)、
トランジスタのエミッタの電圧が3.3Vの場合と同じになって電位差無しでLEDが消灯します。
トランジスタのエミッタの電圧が5Vの場合は、3.3Vと5Vで電位差が生じてしまい、不可解な挙動になりました。
ハイインピーダンスに出来れば、3.3Vでも5Vでも電流が流れないです。
Arduinoのプログラムの移植自体は意外と楽ちんでした。
プログラムソース
タイマー割り込みを行うAPIは、高レベルAPIのpico_timeとhardware_timerの2種類が用意されているようですが、
今回はpico_timeを使っています。
Arduinoのような感じで、抽象化されていて簡単に使うことが出来ました。
ハードウェア的にはタイマーは1つしかないようですが、多重のタイマー割り込みについても、いずれ検証してみます。
« Raspberry Pi Picoのリセットボタンの実装 | トップページ | Pimoroni Pico VGA Demo Baseを入手しました »
「Raspberry Pi」カテゴリの記事
- 使い勝手の良いRP2040搭載「Seeed Studio XIAO RP2040」(2023.02.13)
- Raspberry Pi PicoにUSBキーボードを繋げてみる(2021.03.29)
- Pimoroni Pico VGA Demo Baseを入手しました(2021.03.25)
- Raspberry Pi Picoで4桁7セグLEDをダイナミック表示(2021.03.21)
- Raspberry Pi Picoのリセットボタンの実装(2021.03.15)
「Raspberry Pi pico」カテゴリの記事
- Zorin OSのVisual Studio Code利用でdebugprobeの利用がうまく行かない(2025.03.02)
- Raspberry Pi Pico MicroPython用 SKK日本語変換ライブラリpyskk(2024.09.23)
- Raspberry Pi Pico(MicroPython)でLEDドットマトリックスを使ってみる(2024.03.14)
- Raspberry Pi Pico MicroPython用美咲フォントライブラリの更新(2024.03.13)
- 使い勝手の良いRP2040搭載「Seeed Studio XIAO RP2040」(2023.02.13)
« Raspberry Pi Picoのリセットボタンの実装 | トップページ | Pimoroni Pico VGA Demo Baseを入手しました »
コメント