はじめに
こんにちはクロベコです。
今年もあと1日ですね。最後の電子工作としてATtiny13でタイマーを作成していきたいと思います。今回はその構想編とします。実装・動作確認は後編でまとめたいと思いますね。
なんでタイマーを作るかというと先日記事にした中国製のLEDドライバを使ったものを作りたいと思ったのと自宅のキッチンタイマーがバグってきたので作ってみよう!と思い立った次第です。
そして、おそらくATtiny13の1kbのフラッシュメモリにいかにコードをねじ込めるかが壁になってくると予想しますが、きつそうだったらその時考えます。
では早速どうぞ!
構想
まずは構想を考えたいと思います。作成するタイマーに実装したいソフト的な機能としては以下を考えます。
- 時間のカウントはTImer0を使用する(delayは精度が悪いので使用しない)。
- 表示は4桁7セグLED
- タクトスイッチでタイマーの一時停止機能
- タクトスイッチでタイマーリセット機能
- 1kB以内にコードをねじこむ
ハード面はシンプルに行きたいと思います。
- 主電源スイッチ
- 機能切り替えのタクトスイッチ
- 3Vコイン電池駆動
- ノイズ対策セラコン(TM1630データシート参考)
- フリスクケース筐体
構想は以上です。
ソフト的ハード的に容量に余裕があれば、【指定時間でのブザー】【時間設定からの減算タイマー】の機能を盛り込みたいところですが、たぶん無理そうなので今回は上記項目のシンプルな構成で行きます。
動作フローチャート
コードを書くにあたって分かりやすいようにフローチャートにまとめていきます。
<割り込みフロー>
<メインフロー>
秒数カウントはTimer0のCTC動作でカウントを行います。そして、タクトスイッチの機能は外部割込み機能を使用して、単押しと長押しで動作を分けています。単押しの時は一旦Timer0の割り込みを停止してメインループをWhileループに移行させてカウントを停止させています。タクトスイッチの押下時間の違いで機能分岐を実現する方法は2個の割り込み状態変数を設けてチャタリング防止コード内のカウンタを調整しています。
おわりに
構想編という事で今回はここでいったん締めたいと思います。
次回の内容は下記のように進めていこうと思います。
- ハードモデリング
- 回路図設計
- コード設計
- 実装・確認
ではまた次回に!
コメント