フォト
2021年6月
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30      
無料ブログはココログ

« Raspberry Pi Picoのリセットボタンの実装 | トップページ | Pimoroni Pico VGA Demo Baseを入手しました »

2021年3月21日 (日)

Raspberry Pi Picoで4桁7セグLEDをダイナミック表示

Raspberry Pi PicoでのC++/C言語プログラミングの練習の継続..
タイマー割り込みの練習として、4桁7セグLEDの表示をやってみました。

01_20210321080701

動いている様子


以前、bluePill(Arduino環境)でやったプログラムを流用してやってみたのですが、意外とハマってしましました。

回路図

02_20210321083201

GP2
GP13ピンを使って、表示を行っています。
GP6GP137セグLEDの点灯制御用で、1つのLEDあたり、4mAを流すようにR1R8の抵抗を330Ωにしています。
GP2GP5は表示する桁の表示制御用です。LED8個用の電流32mAを流すため、スイッチイング用にトランジスタを使っています。

この回路は、あまり良くないです。
GPIO
ピンをシンク(吸い込み)で駆動させるつもりでしたが、
後から、Raspberry Pi PicoではGPIOオープンドレイン出力(オープンコレクタ)の指定で出来ないことが分かり、
変更も面倒なので、無理やり使っています。
とりあえず、タイマー割り込みの練習が目的のため、良しとします。

流用元のBlullPillでは出力ピンをシンク(吸い込み、オープンドレイン出力指定)にして、LEDの駆動電圧の変更(5V3.3V)に
対応出来るようにしていたのですが(2年前はそのようにやっていたらしい)、
今回、安直に出力ピンの動作を 0V or ハイインピーダンス0V or 3.3V に置き換えたところ、
LEDの駆動電圧をHighと異なる電圧にするとまともに動きません。最初、5Vをかかていたため動かなくてハマりました。

GP6
GP13の出力をLow(0V)にした場合にLEDが点灯、High(3.3V)にした場合(本当はハイインピーダンスにしたかった)、
トランジスタのエミッタの電圧が3.3Vの場合と同じになって電位差無しでLEDが消灯します。
トランジスタのエミッタの電圧が5Vの場合は、3.3V5Vで電位差が生じてしまい、不可解な挙動になりました。
ハイインピーダンスに出来れば、3.3Vでも5Vでも電流が流れないです。

Arduinoのプログラムの移植自体は意外と楽ちんでした。

プログラムソース


タイマー割り込みを行うAPIは、高レベルAPIのpico_timehardware_timerの2種類が用意されているようですが、
今回はpico_timeを使っています。
Arduinoのような感じで、抽象化されていて簡単に使うことが出来ました。
ハードウェア的にはタイマーは1つしかないようですが、多重のタイマー割り込みについても、いずれ検証してみます。



« Raspberry Pi Picoのリセットボタンの実装 | トップページ | Pimoroni Pico VGA Demo Baseを入手しました »

Raspberry Pi」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

« Raspberry Pi Picoのリセットボタンの実装 | トップページ | Pimoroni Pico VGA Demo Baseを入手しました »