なんとなくPICらしくなってきた(追記あり)
今回は
GPS受信モジュールの1PPS出力が正確か否か(つまりGPSモジュールが電波をつかんでいるかどうか)わかるように測位情報にある時刻の秒を表示できるようにする
というミッションです。
つまり「測位情報から秒の数値を取り出す」ということと「測位情報から得られた秒の数値を表示する」という二つの部分があります。
まず“表示”の方から取り組んでみました。いろんな方法があると思いますがオーソドックスで比較的表示がみやすい7セグメントLEDを使う方法にします。
表示用の7セグメントLEDは文字通り発光ダイオード7個(小数点を入れると8個)からなっています。これは一桁あたりですから今回使った四桁のものだと28個(32個)使ってあります。と言っても表示パネルの発光ダイオードすべてから配線が引き出すと桁数が多くなるとたいへんなことになるので各桁共通にどのLEDを光らせるかという配線とどの桁を光らせるかという配線が引き出してあります。こうしておくと桁が一つ増えても配線は一本増えるだけなので簡単になります。
配線は簡単になっても光らせるのはめんどうになります。すべての桁を同時に光らせようとするとぜんぶ同じパターン(数字)が表示されてしまいます。そこで一桁ずつ順番に光らせるということをします(タイマー割り込みで一定時間ごとに表示ルーチンに飛ばして一桁ずつ表示させます)
「ダイナミック点灯(低速)」
ちょっとしまらない感じですがこれでも表示の切替を「目にもとまらぬ速さ」で行えばぜんぶ点灯しているように見えてしまいます(タイマー割り込みの間隔を短くしています)
「ダイナミック点灯(高速)」
-------
ところで7セグメントLEDを使うとき表示したい数値と点灯させるLEDの対照表が必要です。テーブルに作っておいて「数値」を使って間接アドレス指定で....と考えたのですがPICじゃこの方法は使えないことにすぐに気が付きます。
EEPROM?とも思ったのですがみなさんどうやっているのか調べてみました。そしたらPCLで数値に応じて飛び先を変え「RETLW」を使ってパターンを取得するみたいです。
こういうのはPICを使う人にとっては基本的なテクニックなんでしょうが思わずなるほどと関心してしまいます。
参考
「ほよほよさん - SONY NEX インターバルタイマーを自作する(4)」
「電子工作 - 発光ダイオードのダイナミック点灯制御法」
こういう回路の場合ドライバ用のトランジスタを使うのがふつうですが今回は使っていません。夜使うのが前提ですからそれぞれのLEDの電流は0.7mA程度になってます。全点灯しても絶対最大定格の1/4でしかありません。暗いところで見るとこれでも明るすぎるくらいです。
それから7個のセグメント、四つの桁それぞれにピンをアサインしLED表示のためにトータル11ピン使っています。二進で出力してデコードして使えばセグメントは3ピン、桁は2ピンで収まるわけですがめんどうなのでそれはやっていません。ピンが足りなくなったらまず桁の方を2ピンにするかもしれません。
7セグメントLEDはアノードコモンを使いました。どちらでも別にかまわないと思いますが、PIC16F648Aには一つだけですがオープンドレインのピンがあるのでカソードコモンのLEDを使うときは注意が必要です。
なおいちばん気になっているのは使っているLEDの絶対最大定格を見るとVR=5[V]であることです。
------
じっさいには「ダイナミック点灯(高速)」を使うのですが見ていると「ダイナミック点灯(低速)」の方がいかにも仕事してますという感じがします。
「ダイナミック点灯(高速)」だって仕事をしているからちゃんと四桁表示されているんですが....
(2013-11-14 16:00:34)
(2013-11-14 18:58:46)
GPS受信モジュールの1PPS出力が正確か否か(つまりGPSモジュールが電波をつかんでいるかどうか)わかるように測位情報にある時刻の秒を表示できるようにする
というミッションです。
つまり「測位情報から秒の数値を取り出す」ということと「測位情報から得られた秒の数値を表示する」という二つの部分があります。
まず“表示”の方から取り組んでみました。いろんな方法があると思いますがオーソドックスで比較的表示がみやすい7セグメントLEDを使う方法にします。
表示用の7セグメントLEDは文字通り発光ダイオード7個(小数点を入れると8個)からなっています。これは一桁あたりですから今回使った四桁のものだと28個(32個)使ってあります。と言っても表示パネルの発光ダイオードすべてから配線が引き出すと桁数が多くなるとたいへんなことになるので各桁共通にどのLEDを光らせるかという配線とどの桁を光らせるかという配線が引き出してあります。こうしておくと桁が一つ増えても配線は一本増えるだけなので簡単になります。
配線は簡単になっても光らせるのはめんどうになります。すべての桁を同時に光らせようとするとぜんぶ同じパターン(数字)が表示されてしまいます。そこで一桁ずつ順番に光らせるということをします(タイマー割り込みで一定時間ごとに表示ルーチンに飛ばして一桁ずつ表示させます)
「ダイナミック点灯(低速)」
ちょっとしまらない感じですがこれでも表示の切替を「目にもとまらぬ速さ」で行えばぜんぶ点灯しているように見えてしまいます(タイマー割り込みの間隔を短くしています)
「ダイナミック点灯(高速)」
-------
ところで7セグメントLEDを使うとき表示したい数値と点灯させるLEDの対照表が必要です。テーブルに作っておいて「数値」を使って間接アドレス指定で....と考えたのですがPICじゃこの方法は使えないことにすぐに気が付きます。
EEPROM?とも思ったのですがみなさんどうやっているのか調べてみました。そしたらPCLで数値に応じて飛び先を変え「RETLW」を使ってパターンを取得するみたいです。
こういうのはPICを使う人にとっては基本的なテクニックなんでしょうが思わずなるほどと関心してしまいます。
参考
「ほよほよさん - SONY NEX インターバルタイマーを自作する(4)」
「電子工作 - 発光ダイオードのダイナミック点灯制御法」
こういう回路の場合ドライバ用のトランジスタを使うのがふつうですが今回は使っていません。夜使うのが前提ですからそれぞれのLEDの電流は0.7mA程度になってます。全点灯しても絶対最大定格の1/4でしかありません。暗いところで見るとこれでも明るすぎるくらいです。
それから7個のセグメント、四つの桁それぞれにピンをアサインしLED表示のためにトータル11ピン使っています。二進で出力してデコードして使えばセグメントは3ピン、桁は2ピンで収まるわけですがめんどうなのでそれはやっていません。ピンが足りなくなったらまず桁の方を2ピンにするかもしれません。
7セグメントLEDはアノードコモンを使いました。どちらでも別にかまわないと思いますが、PIC16F648Aには一つだけですがオープンドレインのピンがあるのでカソードコモンのLEDを使うときは注意が必要です。
なおいちばん気になっているのは使っているLEDの絶対最大定格を見るとVR=5[V]であることです。
------
じっさいには「ダイナミック点灯(高速)」を使うのですが見ていると「ダイナミック点灯(低速)」の方がいかにも仕事してますという感じがします。
「ダイナミック点灯(高速)」だって仕事をしているからちゃんと四桁表示されているんですが....
(2013-11-14 16:00:34)
(2013-11-14 18:58:46)
« PICにやつあたり | トップページ | ソース付き・ゴールが見えてきたGPSタイムの表示 »
「編集用」カテゴリの記事
- メモ(2013.11.04)
- 天体望遠鏡・拡大撮影の原理 (1)(2013.07.26)
- 天体望遠鏡・拡大撮影の原理 (2)(2013.07.26)
- 天体望遠鏡・拡大撮影の原理 (3)(2013.07.26)
- 天体望遠鏡・拡大撮影の原理 (0)(2013.07.26)
この記事へのコメントは終了しました。
コメント