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

183. ラーメン・タイマー III

[ 初公開日:2019年11月11日 ]

 私にとっての "136. 3分間ラーメン・タイマー(私のオリジナルではない)"、"182. ラーメン・タイマー II 2題" に続いて、 第3段のラーメン・タイマーの製作です。

 10 年ほど以前に製作をした、プログラミングを伴わないでハードウエアだけで構成をした "136. 3分間ラーメン・タイマー" を、自分のホームページ上に公開をしたのをきっかけとして「ラーメン・タイマー」に興味を持ち、 私もPICを使用して私独自のものを製作してみようと思い立ったのが始まりで、先に "182. ラーメン・タイマー II 2題" を製作しました。

 そして、それだけでは飽き足らず、ここに紹介をする "183. ラーメン・タイマー III" まで製作をしてしまいました。 本機での大きな特徴は、大幅な消費電流の削減で電源スイッチを無くし、前作の "182. ラーメン・タイマー II 2題" の2号機に比べて、約 1/2 のサイズにしたことです。 機能的には、前作を踏襲しつつ多少の機能拡張を試みました。


左からラーメン・タイマー II(1号機)、同 II(2号機)、同 III のサイズ比較

 前作の "182. ラーメン・タイマー II" では、私の手持ちのPICの関係で PIC12F635 + 74HC138 の構成でしたが、今回の "183. ラーメン・タイマー III" では使用するPICを吟味して、 私にとっては初めての使用になりますが PIC16F684 を新たに購入をし、PIC12F635 より多い 14 ピンのPICだけで製作をしました。 (詳細は PICの選択 の項を参照)

<余談>
 私が今までに使用してきたPICには、8 ピン、18 ピン、28 ピン、40 ピンのものがありますが、以前から他に 14 ピン、20 ピンのものの存在は知っていて、機会があればそれらもぜひ使用してみたいと思っていました。 そこで、この機会に 14 ピンの PIC16F684 と 20 ピンの PIC16F690 を複数個ずつ購入をしました。 後者の 20 ピンPICについても近い将来、何かの製作時に使用をしたいと思っています。

アップカウンタ機能を追加 ( 2020/12/7 更新 )

 本機では、元々、タイマー時間の設定範囲が最低1分から最大8分までで、ラーメン・タイマーとしては十分であったものを、パスタなどの茹で時間の管理にも使用ができるようにと、最大値を 15 分までに拡張をしてきました。 しかし、実際に1年以上も本機を使用してきた私の経験では、稀にもっと長時間のカウントができるといいのに、と思うことが数回ありました。

 そこで、ラーメン・タイマーとしての範疇からは逸脱をするのですが、料理の友として長時間のカウントも可能なように、アップカウンタ機能を追加してみました。 タイマーのダウンカウンタとは異なって、基本的には上限は無制限なのですが、 現実的にはそんなわけにもいかないので、とりあえず、最大2時間を超えたときには、カウントを強制終了するようにしてあります。

 アップカウンタ機能についての詳細は、機能概要 の項の アップカウンタ機能を追加、および プログラム の項の最新バージョンの ソースファイル (RamenTimerIII.asm) をご覧ください。

 これは蛇足ですが、本機を使用し始めてから 13 か月が過ぎましたが、当初にセットをした CR2032 のリチウム電池が、現在もなお連続で稼働をしています。 元々、新品の電池ではなく何かで少しばかり使用をしていたものです。 本機の使用頻度としては、1日当たり1〜2回程度でほとんど毎日のように使用をしてきたのですが、ずいぶん長持ちをしてくれています。

■ 回路図 ■

 本機のサイズを小さくするために、前作では使用していた電源スイッチを無くし、電源には複数本の単3、または単4乾電池を使用していたのを止めて、本機では CR2032 のリチウム電池を使用することにしました。 そのため、低電圧でも使用ができるPICを選択することが必須で、また、I/O ポートも本機に見合うだけの数が必要です。

 そして、電源スイッチが無く CR2032 のリチウム電池を使用 ―― という条件のため、本機としての消費電流を極力控え目にしなければなりません。 タイマー動作中の消費電流を少なくすることはもちろんですが、 待機中にはゼロであることが望ましい(タイマーとしての使用時間よりも待機中(使用していない)の時間の方が圧倒的に多い)わけです。

*注. RA1、RA2 は内部プルアップ機能を ON にして使用。 RA3 は元々 MCLR/Vpp ピンのため入力専用で出力ポートには使えない。 また RA3 としての内部プルアップ機能もない。

 ところが、当初、上の回路図で RA3 に繋がっているプルアップ抵抗 R を 22KΩ にし、ジャンパースイッチ(JP SW)は ON にして、PICをスリープモードにしたときの電源電流を測定したところ、 待機中の電流ゼロにはほど遠く約 138 μA も消費していることが分かり、がっくりと来てしまいました。 これでは電源スイッチを無くすことはできません。

 しかし、PIC16F684 のデータシートでスリープモードのときの電流を調べてみると、Typ = 0.15μA、Max = 1.5μA(VDD = 3.0 V)と記されています。 この大差は何なのか? どこで余計な電流を消費しているのか? 初めはまったく分かりませんでした。 上の回路図と睨めっこをしながらデータシート内のあちらこちらを調べること数時間。

 気が付いてしまえば何のことはありません。 ジャンパースイッチ(JP SW)を OFF にして同電流を測定し直すと、私が所有するデジタルマルチメータでは、何と 00.0 μA と表示されるではありませんか。 このマルチメータをどこまで信頼していいか分かりませんが、少なくてもデータシートの値に殆んどイコールになったことには違いない筈です。

 この値の電流値であれば電源スイッチは不要と考えても問題はありません。 しかし、ジャンパースイッチ(JP SW)が ON の場合には依然として大きな問題が残っています。 もうお気付きだとは思いますが、 ジャンパースイッチ(JP SW)が ON の場合には、抵抗 R がそのまま電源に対しての負荷となって無駄な電流を消費しているわけです。

 そこで、抵抗 R を私が現在所有している最も大きな抵抗値 10MΩ に変更をして同電流を測定すると、00.3 μA と表示されて計算値(I = E / R = 3 / 10 = 0.3 μA)通りになりました。

 説明が遅くなりましたがこのジャンパースイッチ ALARM は、タイムアウトになったときのアラーム音を切り替えるもので、OFF のときにはチャルメラ音を、また、ON のときには "ピポッピポッ" 音をブザー出力するものです。 この機能は "182. ラーメン・タイマー II" には無かった(チャルメラ音だけだった)のを本機で拡張をしたもので、RA3 ポートが余っていたので ALARM スイッチに割り当てたのですが、これが災いの元になってしまいました。

 このジャンパースイッチというものは、操作後に ON / OFF 状態がどちらかにずっと固定されてしまうためにこのような問題が起こるわけで、タクトスイッチのように押している間だけ ON になり、 離せば OFF に戻るようなスイッチではこのような問題はないのですが、ただタクトスイッチにすると、アラーム音の切り替えが現在どちらに設定されているかを、目で確認をすることができません。

 したがって、現在は 10MΩ を使用して 0.3 μA に抑えてはありますが、ジャンパースイッチ(JP SW)を ON にした場合には、本機を使用していないときにもこの電流が常時流れるわけで、それが、 CR2032 リチウム電池にとってどれ程のダメージになるのか、あるいはまったく問題のないレベルなのかは正直私には分かりません。 しかし、できれば長時間 ON にすることは避けて OFF 状態にしておいた方が無難だと思います。

― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ―

 ちなみに、本機ではスリープモードから目覚めている状態で、2つあるタクトスイッチの操作待ち状態のときには、8個のLEDの内のどれか1個が常に点灯されますが、この状態のときが消費電流としては最大になるときで、 その値は実測 約 1.510 mA * 程度(電源が 3V のとき)です。 この電流値はLEDの電流制限抵抗の値によって決まり、本機では上回路図のように現在は 1KΩ を使用しています。

 *(その後、タイマーデータ(分)の設定範囲の拡張 で述べている、機能拡張をプログラムで行った結果、LEDが2個点灯するときが最大で実測 1.578 mA の消費になりました。)

 このような小さな電流でLEDを点灯させるためには、VF が小さくて高輝度なものを使用することが必須で、本機の場合には 15、6 年も以前に "秋月電子" で購入をしたものですが、 "SLP-881A-37S2(三洋)" という型番、メーカーのものを使用しています。 本機の電源電圧を 1.9V 程度に落としても、その光具合は弱いながらもまだ十分な視認性があるので、制限抵抗をもう少し大きな値にしてもよさそうです。 そうすれば最大時の消費電流をもう少し小さく抑えることも可能です。

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

■ PICの選択 ■

 冒頭でも述べたように、前作の "182. ラーメン・タイマー II" では PIC12F635 + 74HC138 の構成で、8 ピンPICの I/O ポート数(6)が少ないのを 74HC138 で補う形で製作をしましたが、 本機の "183. ラーメン・タイマー III" では、もっと多ピンのものを使用してPICだけで製作をすることにしました。

 しかし、私の手持ちの中にはふさわしいものが見つからないため、新たに購入をすることにしたのですが、数ある種類の中からどれにしたら良いのか迷います。 そこで、次のように私なりの選定基準を決めて選ぶことにしました。
  • まず第一に、入手が容易であること。

    アマチュアの私が部品調達をする場合には、その殆んどを "秋月電子通商" の通販、または、時々 "Yahoo!オークション" 等を利用しています。 したがって、前者を利用する場合には、同社の商品カタログにあるもののみで それ以外は対象外となります。

  • 低電圧での使用が可能なこと。

    前項 回路図 で述べたように、電源スイッチを無くして CR2032 リチウム電池を使用するためには、低電圧での使用が可能なことが必要条件です。

    当初、本機の試作品として PIC16F628A で製作をしてみたのですが、このPICの VDD の下限が 3V のため、本機としての使用はできません。 下限が 2V の PIC16LF628A というタイプもあるのですが、 上で述べた "秋月電子通商" では扱っていないため入手が困難です。 したがって、試作品で使用したPICはボツとしました。

  • PIC16F シリーズの中から選択をすること。

    ただし、PIC16F1 シリーズは従来のものとはアーキテクチャが異なるので、今回は対象外です。

    私にとっての最もポピュラーな、PIC16F シリーズの 18 ピンPICには、PIC16F627A/628A/648A、PIC16F818/819、PIC16F87/88 などがありますが、もし、これらの L タイプのものが入手できれば、 どれでも本機としての使用は可能です。 しかし、"秋月電子通商" では扱っていないようです。

  • 8 < ピン数 ≦ 18 の中から選択をすること。

    上で述べたように、18 ピンの L タイプのものはすべて入手が困難なため、必然的に 14 ピンのものとなりました。 14 ピンのPICでは特に L タイプのものは用意されていないようですが、比較的新しい品種のためか下表に示すように、 どれも低電圧での使用が可能となっています。
 以上から、"秋月電子通商" から入手が可能な 14 ピンのPICを、同社の商品カタログの中から拾って纏めたのが次表です。
    デバイス名 フラッシュ
    (words)
    RAM
    (bytes)
    EEPROM
    (bytes)
    I/O
    (max)
    ADコンバータ
    10-bit x (ch)
    コンパレータ
    (ch)
    タイマー
    8/16-bit
    電源電圧
    (max 周波数)
    参考価格*
    (円)
    PIC16F630-I/P 1024 64 128 12 なし 1 1 / 1 2.0 V (4MHz) 〜 5.5 V (20MHz) 120
    PIC16F676-I/P 1024 64 128 12 8 1 1 / 1 2.0 V (4MHz) 〜 5.5 V (20MHz) 150
    PIC16F684-I/P 2048 128 256 12 8 2 2 / 1 2.0 V (8MHz) 〜 5.5 V (20MHz) 135
    PIC16F688-I/P 4096 256 256 12 8 2 1 / 1 2.0 V (8MHz) 〜 5.5 V (20MHz) 160

    *注. 参考価格は 2019/11 現在における "秋月電子通商" でのもの。
 表に示すように4品種がありましたが、本機の使用ではデジタル I/O しか扱わないのでどのPICでも構わないのですが、私の場合には将来に他用途での使用を見込んで、複数個の纏め買いをするので、 総合的な機能で判断をして薄水色に塗った PIC16F684 を選択しました。

| ページトップ |

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

ケース上面から見た外観 ケース右側面斜め上から見た外観 ケース裏面から見た外観 *注
上蓋を開いて真上から内部を見た様子 カウントダウン中の様子
    *注. 上段右端の写真 "ケース裏面から見た外観" での2枚の黒いものは、本機を冷蔵庫等に貼り付けて使用ができるようにしたマグネットシート。

| ページトップ |

■ 機能概要 ■

  • まず初めに、本機に電池をセットした後に2つあるスイッチのどちらかを押すと、開始音としての "ピポッ" ブザー音が出力され、その後、タイマー時間LED (1) 〜 (8) が約 3.5 秒間 左右に点滅移動を繰り返す。

  • その次に、EEPROM にバックアップが取られているタイマーデータ(分)を読み出して、その内容をLED (1) 〜 (8) のどれかに点灯表示をする。 (プログラムの作成直後のタイマーデータには、3分が設定されている。)

  • その後本機は、2つあるスイッチの操作待ち状態となって、ユーザのスイッチ操作を待ち続ける。

  • ユーザは、現在点灯されているLED (x) のタイマー時間でよければ、次に START スイッチを押すことによって、タイマー機能が開始される。

  • タイマー時間の変更をする場合には、SELECTOR スイッチ を押すことによって行われ、押すごとにタイマー時間が +1されてLED (1) 〜 (8) に点灯表示がされる。 (1) → (2) → (3) → (4) → (5) → (6) → (7) → (8) → (1) → ・・・ の順に変更がされて行く。 (*注)

  • このように本機ではラーメン・タイマー用(短時間)を想定していて、タイマー時間には最低1分から最大8分までを変更範囲としている。 (*注)

    上2つの (*注)については、タイマーデータ(分)の設定範囲の拡張 を参照のこと。

  • 時間設定の次に START スイッチ が押されると、"ピピッ" ブザー音と共にタイマー機能が開始され、設定をしたタイマー時間からカウントダウンが始まる。

  • カウントダウンが始まると、それまで点灯されていたタイマー時間LED (x) は一旦消灯するが、次からは刻々と変化をして行く残りのタイマー時間を表現するために、 毎秒ごとに一瞬(約 15 ミリ秒)だけ点灯表示を繰り返すようになる。

  • そして、タイマー時間が1分を経過するごとに、それまで瞬間点灯をしていたLED (x) が下位のLED (x-1) に切り替わって、同様な表示を繰り返す。 例えば (3) → (2) → (1) のように切り替わって行く。

  • この残りのタイマー時間LED (x) が切り替わったときには、それをユーザに知らせるためにその都度 "ピピッ" ブザー音を出力する。

  • また、タイマー時間が残り1分を切って最終の 10 秒前になると、それまでのLED (1) の瞬間点灯に加えて、毎秒ごとに "ピッ" ブザー音を出力するようになり、 もうすぐ終了することを知らせる。

  • やがて、設定をしたタイマー時間がゼロとなってタイムアウトになると、まず、そのときまで瞬間点灯をしていたLED (1) が消灯したままになる。 そして、このときに設定されていた タイマー時間と EEPROM にバックアップされているタイマー時間が比較され、異なる場合にだけ、そのときのタイマー時間で EEPROM のバックアップの更新をする。

  • 続いて本機では、ジャンパースイッチ ALARM が OFF のときには "チャルメラ" ブザー音を2回、または ON のときには "ピポッピポッ" ブザー音を5回出力することで、 タイマーが正常に終了したことをユーザに知らせる。

  • また、タイマー時間のカウントダウン中に、ユーザの何らかの理由によってカウントダウンを中断したい場合には、START(CANCEL)スイッチ を押すことによって カウントダウンは中断終了をする。 このように、カウントダウン中には START スイッチは CANCEL スイッチとして機能をする。

  • このときには、中断終了であることを表すために "ブッブー" ブザー音を出力する。 もちろん EEPROM のバックアップの更新はない。

  • タイムアウトによる正常終了、CANCEL スイッチによる中断終了のどちらの場合にも、そのときに設定されていたタイマー時間のLED (x) を再び点灯表示をして、 ユーザの次のスイッチ操作を待つためにプログラムのメインに戻る。

  • なお、"チャルメラ" ブザー音、または "ピポッピポッ" ブザー音の出力中において、START(CANCEL)スイッチ を押すことによって、そのブザー音の出力を中断することもできる。

  • 電池をセットした直後や、カウントダウンが終了してユーザの次のスイッチ操作を待つためにプログラムのメインに戻った後、30 秒以上スイッチ操作がなかった場合には タイマー時間のLED (x) を消灯して、毎秒ごとに "ブッ" ブザー音の出力を繰り返してユーザの注意を喚起する。

  • このときの "ブッ" ブザー音の注意喚起は 5 秒間だけで、それ以降もユーザのスイッチ操作がなかった場合には、"ブッブー" ブザー音を出力した後スリープモードに入る。

  • これら "ブッ" ブザー音の出力中、またはスリープモードのときに、2つのスイッチの内のどちらかを押すことによって、再びタイマー時間のLED (x) を点灯表示をして、 ユーザの次のスイッチ操作待ちに戻すことができる。

<参考> "ラーメン・タイマー II" との機能の相違

 先に作製をした "182. ラーメン・タイマー II" と比べて、その機能を踏襲しつつも改良のために、本機 "ラーメン・タイマー III" で異なっている点を次表にまとめてみました。 これらは機能の拡張を試みた部分もありますが、その他は本機の省電力化(小型化)を実現するために改良変更を行いました。
    相違点 ラーメン・タイマー II - 2号機 ラーメン・タイマー III
    タイマーデータ(分)の設定範囲 最低1分から最大7分までの1分刻み 最低1分から最大8分(15 分 *1)までの1分刻み
    LED (x) の表示 LED (1) 〜 (7) LED (1) 〜 (8) *1
    カウントダウン中の毎秒ごとのLED (x) 瞬間点灯時間 約 50 ミリ秒 約 15 ミリ秒
    タイムアウト時のアラーム音 "チャルメラ" 音を2回 "チャルメラ" 音を2回、または "ピポッピポッ" 音を5回
    スイッチ操作がないときのスリープモードまでの監視時間 1分 30 秒
    スリープモードへ移行前の警告音と秒数 毎秒ごとの "ピピッ" 音を 10 秒間 毎秒ごとの "ブッ" 音を 5 秒間
    最大消費電流(スリープモード以外でスイッチ操作待ちのとき) 約 3.90 mA(電源が 4.5V のとき)*2 約 1.510 mA(電源が 3V のとき)*4
    最小消費電流(スリープモードのとき) 約 79.8 μA(電源が 4.5V のとき)*2 微少 0.1 μA 未満 *3

    *1. 次の "タイマーデータ(分)の設定範囲の拡張" を参照のこと。 *2. ラーメン・タイマー II - 1号機では電源が 5.3(6 - 0.7)V のため、もう少し増加する。
    *3. ジャンパースイッチ ALARM が OFF のときで、私が所有するデジタルマルチメータでは 00.0 μA と表示がされるため、正確な電流値は不明。
    *4. その後、プログラムの機能拡張を行った結果、スリープモード以外のスイッチ操作待ちのときでLEDが2個点灯するときが最大となり、実測 1.578 mA の消費。

タイマーデータ(分)の設定範囲の拡張

 本機では、最低1分から最大8分までの設定範囲を有するため、ラーメン・タイマーとしては十分だとは思いますが、パスタなどの茹で時間の管理にも使用できるように、最大値をもう少し拡張をしてみました。 次表で薄黄色に塗った部分がそれで、最大 15 分までの拡張をしました。 LED は8個しかないため、9分以降は LED (8) との2個の組み合わせで表現をしています。

      タイマーデータ
      (分)
      LED (1)
      RC0
      LED (2)
      RC1
      LED (3)
      RC2
      LED (4)
      RC3
      LED (5)
      RC4
      LED (6)
      RC5
      LED (7)
      RA4
      LED (8)
      RA5
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15

      注.○ 印はそれぞれのタイマーデータ(分)に対して、点灯する LED (x) を表す。
 また、設定範囲の拡張をしたことによって、その設定値を変更するための SELECTOR スイッチの操作方法にも拡張を持たせました。 従来通りにチョン押し(約 0.25 秒未満)をした場合には、その都度 +1されて 1 → 2 → 3 → 4 → 5 → 6 → 7 → 8 → 9 → 10 → 11 → 12 → 13 → 14 → 15 → 1 → ・・・ の順に変更がされて行きます。

 これに対して、長押し(約 0.25 秒以上 0.5 秒未満)をした場合には、その都度 −1されて 15 → 14 → 13 → 12 → 11 → 10 → 9 → 8 → 7 → 6 → 5 → 4 → 3 → 2 → 1 → 15 ・・・ の順に変更がされて行きます。 そして、連続で押していると約 0.5 秒間隔で −1ずつ変更がされて行きます。

 これらの時間設定の操作はかなり微妙ですが、何回か試してみて感覚をつかんでみると良いかと思います。 従来はインクリメント(増加)だけの一方向でしたが、拡張後はデクリメント(減少)も合わせた両方向に対応しているので、 たとえ自分の意志とは異なった操作結果となっても、すぐに修正操作をすることが可能です。


アップカウンタ機能を追加 ( 2020/12/7 更新 )
  • SELECTOR スイッチ を押すことによってタイマー時間の変更をする場合に、従来(アップカウンタ機能を追加する以前)は上述したように、 ・・・ → 13 → 14 → 15 → 1 → 2 → 3 → ・・・ 、または ・・・ → 3 → 2 → 1 → 15 → 14 → 13 → ・・・ の順に変更がされることを述べたが、これを ・・・ → 13 → 14 → 15 → 0 → 1 → 2 → 3 → ・・・ 、または ・・・ → 3 → 2 → 1 → 0 → 15 → 14 → 13 → ・・・ のように改めた。

  • このように、15 と 1 の間には必ず 0 の状態が設定されるように変更をし、このときには上表のようなタイマー時間の範囲外で、LED (x) はどれも点灯することはない。 そして、この 0 の状態のとき(LED (x) が全消灯のとき)に START スイッチ が押されると、"ピピピッ" ブザー音と共にアップカウンタ機能が開始され、00 分 00 秒からカウントアップが始まる。

  • そして、初めの1分間に限り LED (x) が全消灯のままで、その代わりに 5 秒ごとに "ピッ" ブザー音で経過を知らせる。 1分が経過をすると、再び "ピピピッ" ブザー音と共に LED (1) が一瞬(約 15 ミリ秒)だけ点灯表示をする。 その後は、5 秒ごとのブザー音はないが、5 秒ごとに一瞬(約 15 ミリ秒)だけ LED (1) の点灯表示を繰り返すようになる。

  • 2分が経過以降は、毎分 00 秒になったごとに "ピピピッ" ブザー音でそれを知らせ、LED (x) が上位のLED (x+1) に切り替わって、同様に毎 5 秒ごとの一瞬点灯表示を繰り返す。

  • やがて、15 分(正確には 16 分)が経過した後は LED の点灯表示が、再び LED (1) に戻って以上の点灯表示を繰り返すが、毎分 00 秒ごとの "ピピピッ" ブザー音の直後に、"ピッ" ブザー音を数回ずつ付け加えて、 15 分単位が何回あったか( LED (1) に戻った回数)を知らせる。

  • すなわち、最初の 15 分間(正確には 16 分間)は 0 回なので "ピッ" ブザー音は付け加えないが、次の 15 分間は 1 回、その次の 15 分間は 2 回、・・・ のように "ピッ" ブザー音を付け加えて、この "ピッ" ブザー音の回数と LED (x) の一瞬点灯表示で、カウント開始以降に何分が経過したかを知らせるようになる。 ( 15 分 x "ピッ" ブザー音の回数 + LED (x)

  • 本機能のカウントアップ中に、ユーザの都合でカウントアップを中断したくなった場合には、START(CANCEL)スイッチ を押すことによってカウントアップは中断終了をする。

  • また、カウントアップの最大の上限は2時間(正確には2時間1分)までと設定がされていて、この上限を超えたときにはカウントアップは強制終了をする。 これらの中断終了、強制終了のどちらのときにも、 "ブッブー" ブザー音でそれを知らせた後、ユーザの次のスイッチ操作を待つためにプログラムのメインに戻る。

  • このとき、タイマー時間の設定が 0 の状態のままでは LED (x) が全消灯となるため、スリープモード中と紛らわしいので、必ず、前回の EEPROM にバックアップが取られているタイマー時間に戻している。 したがって、アップカウンタ機能のときには、0 というタイマー時間の設定値は EEPROM にバックアップが取られることはない。

| ページトップ |

■ プログラム ■

基準時間の発生と調整

 本機では、タイマーカウントをするための基準時間の発生には、PIC の TMR0: タイマー0割り込みを使用して、基準となる1秒を作り出しています。

 PIC のクロックパルス = 内部発振 4MHz、プリスケーラは使用しない、TMR0 は8ビットカウンタで カウント値 = 200、 とすることで、これらの条件から

	(4 / 発振周波数) x ハードタイマーカウント値 = (4 / 4MHz) x 200 = 200μS
となり、この 200μS 周期でハード的にタイマー0割り込みを起こさせ、それをソフトタイマーカウント値 = 5000 をカウントすることにより
	割り込み周期 x ソフトタイマーカウント値 = 200μS x 5000 = 1,000,000μS = 1 Sec
が得られます。

 しかしこれは計算上の話で、実際に時間を測定してみると、次の表のように(補正値 = 0 の場合)1秒からはかなりかけ離れている(8分に対して 36 〜 37 秒ほど多い)ことが分かります。 これは実際にはクロックパルスが正確に 4MHz で発振をしていない、すなわち、基準となる正確な 200μS が得られないのが主な要因と考えられます。

 この正確ではない 200μS を1秒あたり 5000 をカウントしていると、8分間で 36 〜 37 秒ほど多くなってしまうということは、5000 が多すぎるということなのでその多い分だけ実際のカウント数を減らしてやれば良い訳です。 その減らす量が次に示す補正値 xx です。
	tm0_h_val	equ	256 - 200		;ハードタイマー0カウント値 (4 / 4MHz * 200 = 200μS)
	xx		equ	-353			;補正値
	tm0_s_val	equ	5000 + xx		;ソフトタイマー0のカウント値
 本機のタイマー時間を最大値である8分に固定をしておいて、補正値 xx だけをいろいろと変更したときの実際のタイマー時間を、私のホームページ中の他のページで紹介をしている "長時間ストップウオッチ/タイマー" で、実際に測定をしてみたものを次表にまとめました。

 私の今までの経験上、同一の補正値 xx であっても PIC による個体差が大きく、他のハードウエアの違い(電源電圧の違いも含めて)による影響はあまり大きくはないようです。 実際には表中の薄黄色に塗った補正値 xx = -353 を採用して実時間に近くなるようにしました。

回数 設定時間 補正値xx 測定時間 誤差
1 8分 0 8'36"48 + 36"48
2 8'36"50 + 36"50
1 8分 -350 8'00"30 + 00"30
2 8'00"32 + 00"32
1 8分 -352 8'00"13 + 00"13
2 8'00"06 + 00"06
1 8分 -353 8'00"02 + 00"02
2 8'00"04 + 00"04
1 8分 -354 7'59"92 - 00"08
2 7'59"91 - 00"09
1 8分 -355 7'59"77 - 00"23
2 7'59"78 - 00"22

 本機では、ポートをすべて使用していて空きポートが1つもないため、この基準時間の調整中だけ RA0: ブザー音出力を、時間測定用端子(T.ADJ)として切り替えて使用をしました。 具体的には、プログラム中の "変数、定数の定義とレジスタ割付け" 部分の先頭行
	;#define 	xx_debug			;TMR0 基準時間の調整中
の先頭の ;(セミコロン)を取り除いてアセンブルし直すことによって、"TMR0 基準時間の調整支援" プログラムに切り替わります。 (詳細は ソースファイル (RamenTimerIII.asm) を参照のこと。 xx_debug で検索してください。)

 ただし、このときのタイマー時間はプログラムで8分に固定で変更することはできません。 また、カウントダウン中はLEDの瞬間点灯だけでブザー音を出力することはできません。

 プログラムを起動すると、LED(1) が点灯して START スイッチの押下待ちになるので、スイッチを押すと点灯LEDがLED(8) の瞬間点灯に切り替わってカウントダウンが始まります。 そして、8分が経過してタイムアウトになると、再びLED(1) の点灯に切り替わって START スイッチの押下待ちに戻ります。 このとき時間測定用端子(T.ADJ)からは、待機中は "H" が出力され、カウントダウン中は "L" が出力されるので、 この信号を前述の "長時間ストップウオッチ/タイマー" で測定をすれば、正確な時間測定が可能となります。


現在の最新バージョン: Ver. 1.03  ( 2020/12/7 更新 )
 上記 基準時間の発生と調整 で述べたように、PIC には個体差があるので基準時間の調整は、実際に使用をする個々の PIC に対して行うべきで、ここに収録の HEX ファイルをそのままご利用になっても、 多少の誤差が生じると思います。 しかし、その誤差は上記の例でも分かりますが8分に対して 1 〜 2 秒程度で、ラーメン・タイマーとしては何の問題も起こらない範囲ではないかと思います。 もし、より正確さを求めるのであれば、 ソースファイル内の補正値 xx を使用をする PIC に合わせて適宜変更をし、再アセンブルをする必要があります。

| ページトップ |

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

 使用したプリント基板は "秋月電子" の "片面ガラス・ユニバーサル基板 Cタイプ(72×47.5mm)めっき仕上げ(通販コード P-00517)" ですが、ケース加工図 に示したケース内に収まるように プリント基板にも少々の加工が必要です。 下のパターン図においてグレー色枠で示したものが元の基板サイズですが、そのままでは図に示すように一回り大きいので、緑色枠で示したようにサイズ加工を行います。

 また、使用したタクトスイッチは、前作の "182. ラーメン・タイマー II" の2号機と同じもので、トップの高さ(長さ)が通常のものより少々長く実測 9.5mm のものを使用していて、以前に Yahoo! オークションで入手したものですが、 メーカー、型番までは分かりません。 (相当以前にはなりますが "共立エレショップ" で購入をした、台湾製の "PT6601G" という型番のものと同等のようです。)


<抵抗 R1, R2 について>

 回路図の項で述べたように、RA3(4 ピン)に繋がっているプルアップ抵抗で、当初、R1 の位置で 22KΩ 1/6W を使用したが、スリープモード時の消費電流が大きかったため、その後、10MΩ に変更をした。 ただ、1/4W のものしか手持ちになく R1 の位置には実装ができないために、R2 の位置に引っ越しをした。(R1 の位置の 22KΩ は撤去)

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

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

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

■ ケース加工図 ■

 使用したケースは、100均(ダイソー)で購入した "ミニケース6個組" ポリプロピレンケース* です。 以前に "093. LED使用 検電器" で使用したものと同じものです。 ( * 私が購入した当時は6個組でしたが、現在では5個に減量がされているようです。)

 実際にケース加工を行う場合には、上面図に示す2個のΦ3.5 タクトスイッチ用の穴位置は、ケースが透明で中が透けて見えるので、現物合わせで行った方が確実です。 その方法は、まず、底面図に示す3個の穴をあけて(これも現物合わせ) プリント基板を仮に取り付けておいて、上蓋を閉めると2個のキートップの位置が透けて見えるので、実際の穴位置が明確になります。

| ケース加工図 (RamenTimerIIICS.CE3) | ページトップ |

■ ケースへのプリント基板の取り付け ■

 下図は本機のケースの右側面側から見た図で、プリント基板の取り付けの様子がよく分かるように、右側面を切り取った断面図を表しています。

 このケースへのプリント基板の取り付けに当たって、最も重要なのはその上下(高さ)位置で、プリント基板に取り付けたタクトスイッチのトップが、ケース上面から適度な長さ(X)を飛び出すようにします。 プリント基板パターン図 (部品面) でも述べたように、タクトスイッチには通常のものより少々長い 9.5mm のものを使用していて、その高さ調整にはプリント基板下のスペーサ長で行いますが、 本機の場合にはナットの厚さをスペーサの代わりに使用をしました。
 また、本機を冷蔵庫等に貼り付けて使用ができるようにと、ケースの裏面には粘着剤付きのマグネットシートを貼り付けました( ケース外観と内部の様子 の写真3枚目を参照 )。 私が使用したマグネットシートは 100均セリアで入手したものですが、厚さが1mm 前後の薄いものと3mm の厚いものとがあったので、後者の3mm にしました。 上図に示すように、プリント基板を取り付けるためのねじ(皿ねじを使用)の頭が隠れるだけの厚さが必要です。

 このマグネットシートを貼り付けるときの注意として、ケースの裏面側の各四隅にはそれぞれL型の足( 0.5 mm ほどの凸型)が付いているため、そのままで貼り付けるとマグネットシートが浮き上がってしまいます。 この足はカッターナイフの先で簡単に削り取ることができるので、一手間をかけて平面にした後で貼り付けると良いと思います。

| ページトップ |

■ 使用部品表 ■

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

(データシート)
PICマイコン .................... PIC16F684

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

■ 参考(類似)サイト ■

ラーメン・タイマー II 2題 ..... http://xyama.sakura.ne.jp/hp/RamenTimerII.html
3分間ラーメン・タイマー ..... http://xyama.sakura.ne.jp/hp/RamenTimer.html
キッチン(カウントダウン)・タイマー ..... http://xyama.sakura.ne.jp/hp/KitchenTimer.html

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


Copyright (C) 2019-2023 やまもとみのる
初版:2019年11月11日、初公開:2019年11月11日、最終更新:2023年10月26日