| ホーム |     私の電子工作作品集

145. 長時間ストップウオッチ/タイマー

[ 初公開日:2013年6月17日 ]

 この作品は "簡易 S-RAM チェッカー" を作製後に、各種メモリサイズの違いや チェック方法の違いによる、それぞれのそのチェック時間をある程度正確に測定することを目的として作製したものです。

 したがって、ほんの数秒のオーダーから、数時間にもわたる長い時間の測定が可能でなければなりません。 当初、その時間測定に腕時計を見ながら行なっていたのですが、当然ながら数秒のオーダーの測定ではかなりアバウトなものと なってしまうし、また数時間にもわたる長時間の測定ではとても時計に付き合ってなんかいられませんでした。


 そこで、この広範囲な時間測定が可能な専用機 "長時間ストップウオッチ/タイマー" を作製することにしました。

 また、時間測定の開始および終了の指示を、"簡易 S-RAM チェッカー" からの電気信号を入力可能として、その測定時間もかなり正確なものとしました。

 その他に一般のストップウオッチとしても使用可能なように、スタート/ストップのスイッチも設けてあります。 また、ストップウオッチ機能とは逆な働きをするタイマー機能もついでに設けてありますし、そのタイマー設定値を予め記憶しておき、 その後いつでも読み出せる機能も追加してあります。

ケースに収納等 ( 2017/4/1 更新 )

 本作品は長らく左上写真のような状態で使用、保管をしてきましたが、この度ようやく右写真のようにケースに収納をしました。

 製作当時に比べて、本機の使用頻度はあまり多いわけではありませんが、現在でも時々は引っ張り出して使用することがあります。 そしてその度に、 何か適当な収納ケースがないものかと思っていましたが、今までなかなか本機に合うような思わしいケースが見つかりませんでした。

 しかし最近になって、いいアイデアを思い付きました。 それについては ケース加工図 で述べています。

 また、今回本機をケースに収納したのを機に、左上写真に示すように液晶(LCD)への表示を " 00 00:00:00:00 " の形式で表示していたのを、" 00 00:00:00.00 " の形式に改めるようにプログラムの修正を行いました。 "秒" と "秒以下の桁" との区切り記号には、":"(コロン)ではなく "."(ピリオド)が正しいようです。 恥ずかしながら本機の製作当時は知りませんでした。

 その他に手直しをした点は、フラットケーブルと液晶モジュールとの配線が少々見苦しい状態だったのでやり直しました。 また、プリント基板に 貼ってあるラベルが経年変化でセピア色に変色を起こしていたので、これも印刷をし直して張り替えておきました。

■ 回路図 ■

| 回路図 (StopWatchTimer.CE3) | ページトップ |

■ ケース外観と内部の様子 ■

ケース正面の斜め上から見たところ ケース背面の斜め上から見たところ
ケース左側面の斜め上から見たところ ケース右側面の斜め上から見たところ
ケース上面を真上から見たところ ケース裏面を真上から見たところ
蓋をあけて内部の様子を見たところ ( 拡大 左写真の下ケース内だけを拡大したところ

| ページトップ |

■ 機能概要と使用法 ■

  • 本装置は、数秒台のある程度正確な時間測定から、数時間の長時間の時間測定を可能とする、ストップ ウオッチ機能(アップカウンタ)を第一の目的として設計作製したものである。

  • 第二の目的としてのタイマー機能(ダウンカウンタ)は、おまけ的な存在ではあるが、ストップウオッチ 機能と同程度の精度を有する。

  • 設計上、数秒台の時間測定では1/100秒までを可能とした。 また、長時間測定では99日23時間 59分59秒99まで表示可能(ストップウオッチの場合)としているが、それ以上の3桁目の日表示 はできないが100日以上の測定も連続無制限に可能である。

  • ただし、タイマー機能では表示上または設定値の問題から、99日23時59分59秒99が設定最大の 時間となる。

  • 本装置は、電源スイッチをオンすると、"ピポッ" と開始ブザー音を出力後、液晶(LCD)にデモとして、 " StopWatch / "、" Timer ver.x.xx "、" by m.yamamoto " の文字列が、交互に1.5秒ずつ 連続3回表示される。


  • その後、1.5秒間無表示の後、" 00 00:00:00.00 " の初期時間が表示され、各種スイッチの入力待ち となる。 このとき、SELECT スイッチStopWatch 側に設定されている場合は表示はそのままで、 スタート信号 "L"(LINE 入力の場合) * (注) または START/STOP スイッチのオン(START)を待つ。



  • 一方、SELECT スイッチが Timer 側に設定されている場合は、初期設定として " 00 00:00:00.00 " 表示の左端の "0"(十台の日)がブリンク表示され、タイマー時間の設定値の入力待ちとなる。



  • この設定値の入力待ちの状態では、←(LEFT)→(RIGHT)スイッチの操作によって、設定する桁を 自由に変更でき該当の桁をブリンク表示する。 そして該当の桁を選択後、↑(UPPER)/↓(LOWER) スイッチの操作によって、タイマー時間の設定値を入力する。



  • 各桁の設定値の入力範囲は、基本的に "0" から "99日23時59分59秒99" が最大である。 ↑(UPPER)スイッチの操作では、1回押すごとにブリンク表示の該当の桁を1ずつインクリメントする。 また ↓(LOWER)スイッチの操作では、同様に1ずつデクリメントする。

  • ↑(UPPER)スイッチの操作では、各桁の最大値を超えると "0" に戻る。また ↓(LOWER)スイッチの 操作では、各桁の最小値の "0" を超えると各桁の最大値に戻る。

  • ただし "時" の入力では、"00" から "29" まで変更が可能であるが、"24" 以上を入力した場合 には、その後 ←(LEFT)/ →(RIGHT)スイッチの操作を行なっても他桁への移行はできず、"ブッ" というブザー音とともに赤色LEDが瞬間点滅して、エラー表示をする。 またこの場合の START/STOP スイッチのオン(START)操作も同様である。

  • ストップウオッチ/タイマー機能ともに、スタート信号 "L"(LINE 入力の場合) * (注) または START/ STOP スイッチのオン(START)操作により、それぞれ各機能を開始し、ストップウオッチ機能では "0" から1/100秒単位でカウントアップし、またタイマー機能では設定値から1/100秒単位で カウントダウンする。

    * (注) PICのポートでは、LINE 端子の後にインバータ(74HC00)が入っているため、スタート信号は "H" となる。

  • 各機能ともに、ひたすらカウントアップまたはカウントダウンをし続ける。 やがてストップウオッチ機能 ではスタート信号が "H"(LINE 入力の場合)、または START/STOP スイッチがオフ(STOP)操作される ことにより、カウントアップ動作を停止する。

  • 一方、タイマー機能では設定値がオール "0" に至るとカウントダウン動作を停止する。 またはカウント ダウン動作中に START/STOP スイッチがオフ(STOP)操作されることによっても、同様にカウントダウン 動作を中止して停止する。 このタイマー機能でも LINE 入力の信号で同様のスタート/ストップ動作を 行なわせることが可能であるが、そういう使用は想定していない。

  • 各機能ともにそれぞれの動作が停止すると、"ポッポッポッポッ" というブザー音に合わせて赤色LED が点滅し、その後点灯し続けて各機能の動作が停止したことを表示する。



  • 各機能の動作が停止したことを確認(液晶(LCD)の表示値等)した後、CLEAR スイッチ(↓(LOWER) スイッチと兼用)を操作すると、赤色LEDが消灯するとともに液晶(LCD)の表示が "0" クリア されて初期状態に戻る。

  • この初期状態では、SELECT スイッチの操作(StopWatch/Timer)は自由であり、それぞれ選択された 機能の初期の液晶(LCD)表示が行なわれる。 したがって、タイマー機能で各桁を設定後、START/STOP スイッチのオン(START)操作前に SELECT スイッチを StopWatch 側に操作すると、設定は "0" クリア されてしまうので注意を要する。

    <タイマー設定値の記憶モード追加>

  • タイマー機能を使用する場合において、よく利用するタイマー時間のその設定値を予め記憶しておく ことにより、次回からは簡単にその設定値を読み出して利用することが可能である。

  • まず設定値を記憶するには、通常のタイマー時間の設定後、←(LEFT)スイッチと →(RIGHT)スイッチを 同時に押下することにより、<タイマー設定値の記憶モード> に移行する。 "ピポッ" というブザー音に 合わせて赤色LEDが点滅し、その後点灯し続けてこの記憶モードに移行したことを知らせる。

  • 次に ↑(UPPER)/ WR スイッチを操作することによって、現在液晶(LCD)に表示されている タイマー時間の設定値が EEPROM に書き込まれ記憶される。 したがって一度記憶された内容は次に別の 設定値が上書きされるまで、たとえ電源をOFFしても記憶され続ける。 またこの時の ↑(UPPER)/ WR スイッチの操作によって、点灯していた赤色LEDは消燈し、<タイマー設定値の記憶モード> から再び 通常のタイマー時間の設定モードに戻ったことを知らせる。

  • この記憶させたタイマー時間の設定値を読み出すには、通常のタイマー時間の設定モード時に、同様に ←(LEFT)スイッチと →(RIGHT)スイッチを同時に押下することによって、まず <タイマー設定値の 記憶モード> に移行させ、次に ↓(LOWER)/ RD スイッチを操作することによって、EEPROM に記憶 されている内容が読み出されて液晶(LCD)に表示される。 またこの時の ↓(LOWER)/ RD スイッチ の操作によって、点灯していた赤色LEDが消燈し、再び通常のタイマー時間の設定モードに戻ることは 書き込み時と同様である。

| ページトップ |

■ プログラム ■

本機の精度はなんと言ってもPICのオシレータ入力に繋がっているクロック発振回路にあります。 上記回路図において発振周波数をより正確に調整するには、クリスタル周りの片側のコンデンサ(22pF)を、トリマ (30pF 程度)に変更して 20MHz に正確に合わせ込む必要があります。

しかし、正確な測定器も必要となり実際にはこの方法は簡単ではないと思われます。 また今回の場合にはプリント基板の スペース的な問題もあり、トリマに変更することは実際には容易ではありません。

本機では、10時間ほどの時間測定をしたところ腕時計測定と比べて、約20数秒ほどの遅れを生じました。 そこで今回は ハードはそのままで変更しないでソフト的に補正を掛けることにしました。

いうまでもなく本機では、上記回路図のように 20MHz のクリスタルを使用しているため、基準クロックは ( 1 / 20MHz ) * 4 = 0.2μS となります。 この 0.2μS を 50000 回カウントして、すなわち 0.2μS * 50000 = 0.01 S = 10 mS を 作り出しています。

このように本機のカウント単位である1/100秒、すなわち10ミリ秒は、実際にはタイマー1割り込みを使用して 作成しています。TMR1H、TMR1L の両レジスタに basic_high、basic_low のカウント初期値を設定しておき、TMR1H レジスタが10ミリ秒でオーバーフローして割り込みを発生させ、それを基本単位としているのです。
	xx		equ	28				; 補正値
	basic_high	equ	high (65536 - 50000 + xx)	; 0.2μS * 50000 = 0.01 S = 10 mS
	basic_low	equ	low (65536 - 50000 + xx)	;
10時間で20数秒の遅れ、したがってその遅れ分だけカウント回数を減らしてやればいいことになります。 そこで実際に腕時計測定と比べてみると、上式のような補正値を与えてやるとほぼ一致しました。 もっと長時間の測定を行なえば まだ狂いはあると思われますが、とりあえず良しとしました。

( 後日談 ) 丸2日間カウントさせておいて同方法で時間を比べてみたところ、やはり秒針が一致しているように見えました。 やはり良しとしましょう。


液晶(LCD)への表示形式を修正 ( 2017/4/1 更新 )

 冒頭でも述べたように、液晶(LCD)への表示を " 00 00:00:00:00 " の形式で表示していたのを、" 00 00:00:00.00 " の形式に改めるようにプログラムの修正を行いました。 "秒" と "秒以下の桁" との区切り記号には、":"(コロン)ではなく "."(ピリオド)が正しいようです。
        修正前 修正後

現在の最新バージョン: Ver. 1.05   ( 2017/03/31 更新 )

| ページトップ |

■ プリント基板パターン図 (部品面) ■

| プリント基板パターン図 (部品面) (StopWatchTimerPC.CE3) | ページトップ |

■ プリント基板パターン図 (ハンダ面) ■

| プリント基板パターン図 (ハンダ面) (StopWatchTimerPC1.CE3) | ページトップ |

■ ケース加工図 ■

 使用したケースは、100均(セリア)で購入した "クリアケース ミニ (L-8033) サナダ精工" というポリスチレンケースの、 上箱を2個使用して作製しました。 実は、このケースは上箱と下箱の2つから構成された商品なんですが、他の作品での加工時にサイズ間違いなどの 穴あけに失敗したものが2つあり、共に上箱は無傷のまま残っていたのでそれを使用しました。

 下図に示すように、2個の上箱を貝合わせのように重ね背面で蝶番を使用して結合し、1つのケースとして使用しました。 この蝶番を購入するために 初め近所のホームセンターに行ったのですが、高過ぎて値段に見合ったものは見つかりませんでした。 そこで、廃品を利用するというこのアイデアは一時は 諦めたのですが、ダメもとでと思い、その足で近くの 100均(セリア)へ行ったところ、なんと、6個セットで 108円というものがありました。 即決です。


| ケース加工図 (StopWatchTimerCS.CE3) |


( 2018/3/11 追記 )

 本機では既に不要となってしまいましたが、その後、本機にぴったりないいケースを見つけました。 "秋月電子通商" で取り扱っている、メーカー "ニシムラ" の "ABS樹脂ケース 112-TS" というもので、外側(内側)寸法が 117 (112) X 84 (80) X 28 (24) mm で、可動式のフタが付いています。 参考までに。

| ページトップ |

■ 蝶番(ちょうつがい)の取り付け ■

 上項の ケース加工図 で述べたように、蝶番には 100均(セリア)で調達した次の写真のようなものを使用しました。 このセットには、木ねじが付属していますが今回の使用目的には使えませんので、下の写真のように他にビス、ナット等が必要です。  また、この蝶番には取り付け用にΦ3の穴が開けてありましたので、M3のビス、ナット等を使用しましたが、ケースに取り付けたときに、 写真のように少々でかく感じられ全体的に厳つい(ゴツイ)感じがします。 もう一回り小さいサイズ(M2.6)の方が良かったかもしれません。 いずれにせよ、 最近、短いビスの手持ちを切らしていますので、次写真の中央に示すように 10mm 長のビスを半分ほどに切断をして使用しました。
    左から M3 x 10mm ビス、切断した同ビス、M3ワッシャー、M3ナット
 このようにビスを切断するためには、次の写真のような工具があると、ねじ山を潰すことなく簡単に切断をすることが可能です。 この工具は、 通常、圧着ペンチ(プライヤー)と呼ばれているもので、これ1つで、コードに圧着端子を取り付ける圧着機能以外に、電線の切断をするカッター機能、 電線被覆(皮)をむくワイヤーストリッパー機能、長すぎるボルト(ビス)を切断するボルトカッター機能が付いています。
    圧着ペンチ(プライヤー) 工具の支点周りの青線部分を使用 (M2、M2.6、M3、M4、M5)
 このようにして用意した、蝶番 2枚、M3 x 5mm ビス 8個、M3ワッシャー 8個、M3ナット 8個を使用して、上項の ケース加工図 で示したように、実際にケースに穴をあけ、蝶番を取り付けたものが次に示す写真です。 ここで重要なのは、 右下写真に示すように、ケース内側の側面とナットとの間には必ずワッシャーを入れることです。 これを怠るとケース側面のひび、われの原因となります。
    蝶番の取り付けをケース背面から見た様子
    蝶番の取り付けをケース内側から見た様子 右側の蝶番の取り付け部分を拡大

| ページトップ |

■ 使用部品表 ■

(主要部品: IC, トランジスタ等)

(データシート)
PICマイコン .................... PIC16F648A
HC-MOS .................... μPD74HC00C
LCDモジュール .................... S-10551D
圧電ブザー .................... PKM17EWH4000

| 部品表 | Excel ファイル (StopWatchTimer_parts.xls) | ページトップ |

■ 参考資料・サイト ■

ドットマトリクス LED 表示時計 (24時間表示型)
簡易 S-RAM チェッカー

| ページトップ | ホーム |


Copyright (C) 2010-2023 やまもとみのる
初版:2010年7月2日、初公開:2013年6月17日、最終更新:2023年10月25日