【ATtiny13】4桁7セグLEDタイマー作成_プログラム編

ATtiny13

はじめに

前回に引き続きATtiny13でタイマーを作成していこうと思うのですが、意外と情報量が多そうで、申し訳ないのですがソフトとハードで記事を分けたいと思います。

今回はソフト編について書こうと思います。実装する機能については前回の構想編を参照いただければと思います。タイマーカウントとタクトスイッチでの機能切り替えのみの単純な構成です。

【ATtiny13】4桁7セグLEDタイマー作成_構想編
ATtiny13を使用して4桁7セグLEDを使用したタイマーを作っていきたいと思います。本記事ではその構想をまとめたものです、実際にモノを作っていくのは次回にまとめたいと思います。

では、早速どうぞ。

 

 

 

 

 

プログラム

早速ですが、今回使用するプログラムのコードです。

ATtiny13のちっこい容量を有効活用するためにArduino関数は一切使用していません。また、ダラダラ関数を描いているので見にくいコードになっていますがご容赦ください。

心配だったプログラム容量は736バイトでそこそこ余裕ありました。空きピンに関しても1ピン(+reset)あるので何かしら追加で機能を実装できそうです。

コード解説(LED制御)

LED制御は中華ICのTM1630を使用しています。このICはデータとクロック、チップセレクトの3線で通信を行ないます。通信方式はチップセレクトをセットした後にデータを送信しクロックで確認を行ないます。Arduino標準関数である【shiftOut】を使用すれば簡単に通信できますが、容量削減のために【shiftLSB】関数を作ってshiftOutを再現しています。shiftLSBの機能は標準関数のshiftOutの下位ビットからの送信のみに機能を限定して書いてあります。

コード解説(タクトスイッチ機能切り替え)

このコードではタクトスイッチの機能として【タイマーの一時停止】【タイマーリセット】を設けています。タクトスイッチは一個しか実装しない予定なので、押下時間によって機能を切り替えるようにしています。具体的には外部割込み(論理変化)を使用して個別フラグを2個立てます。このフラグに対してスイッチ状態変化関数【update_sw1】【update_sw2】を作って、この中のチャタリング防止のカウンタの時間を変えております。なお、一時停止については後述するタイマー割り込みを一旦禁止しています。再度、タクトスイッチを押されたときにタイマー割り込みを許可する感じです。

コード解説(秒数カウント制御)

タイマーの本質の秒数カウントは正確に行ないたいので、タイマー割り込みで秒数をカウントします。

タイマー割り込みは自分でタイマーのTOPを指定できるCTC(Clear Timer on Compare Match)モードを使用します。なおATtiny13にはTimer0(8bit)のみの実装である為に、1秒カウントのタイマーを使用する為にはカウントなどを使用するなどして工夫する必要があります。本コードではメインクロックを1.2MHzとして、分周比1024としています。そしてTOP値の設定は117としています。なので、タイマー割り込みとしては0.00998secとなるので10回タイマー割り込みが発生したら1秒としています。

おわりに

今回はATtiny13タイマーのプログラムについて纏めました。このコードで実装してみようかと思いますが、動かしてみておかしかったら改定していきたいと思います。また、修整した方がいい所がありましたらご助言いただけるとありがたいです。

次回はハード編で実際に実装していきたいと思います。

では、良いお年を!

コメント

タイトルとURLをコピーしました