2014年6月25日水曜日

STM32F1で7セグLED



内部リソース

7セグの表示に使っているのはTIM2とDMAです
DMAの転送タイミングをTIM2で作成し、RAMにある配列から点灯パターンを送り出しています
こうすることによりCPUは完全にノータッチでダイナミック点灯を実現できます
そのためCPUをスリープにしても点灯を継続できます
7セグLEDを使っている場合CPUの消費電力程度削減してもあまり効果はありませんが、CPUがノータッチで良いということは他の処理に負担をかけないということでもあります

今回はタイムソースにTIM2を使いましたが、TIM2のDMAはSPI1_RX等と競合するので、STM32F103VE等であればTIM5を使うなど、工夫したほうがいいと思います

今回のサンプルはとりあえず7セグを表示するのが目的だったので、表示文字の変更以外はWFIでスリープに入れて、USART1割り込みで起床するようにしています

スリープから抜けたら、USART行受信関数を呼び、もし改行文字まで受信していればその文字列を表示関数に渡した後にスリープする という感じです
表示関数の中では文字列をwhileで処理し、その中ではswitchで表示RAMに当該文字の点灯パターンを代入する という処理をしています


7セグLEDは結構簡単に扱える表示デバイスですが、表示桁数に比例して扱いづらくなっていきます
昔1個モノの機材を作った時には8ケタの表示モジュールを作りましたが、それだけでかなり時間がかかりました(メインの基板はあまり複雑じゃないのですぐに作れた気がします)

最近は7セグLED表示モジュール等があり、SPIやUSARTで制御できるようになっていますが、欲しい色がなかったりだとか、8ケタの表示のためにUSARTモジュールが1個必要だったりとか、あまり使いやすいとは言えないような気がします


汎用ポートがゴッソリと余っている場合は7セグLEDは表示デバイスとしては有用だと思います
ただし一般的な16x2のキャラ液晶は最小構成で6本のポートがあれば使えるので、どうしても という場合でない限りはキャラ液晶のほうが使いやすいのも事実です

0 件のコメント:

コメントを投稿