ナンバーディスプレイと疑似交換機
■はじめに
私は以前から、ナンバーディスプレイアダプタを利用しています。かけた人の電話番号が表示
されるので、誰からの電話なのかが分かって便利です。
最近の電話機にはナンバーディスプレイ機能が内蔵されているのが多いのでしょう。アダプタ
単体は最近見かけないようですが・・・?
アダプタは、ソニーとユピテルの製品を持っていますが、ソニーをメインで使っています。これは
リレーがカチッと鳴るのでベル以前に着信がわかるからです。作った人は意図していなかった
かもしれませんが、これは意外に便利です。
但し、電池が消耗してくると悲惨です。電池が消耗したからしょうがない、で片づけられれば
それまでですが、動作不安定になります。リレーを駆動するだけで電圧が落ちてしまうんでしょ
うねえ。(リレーのデータシートを見て下さい。定格電圧が低い物ほど電流が大きい。たとえば
5Vで100mAとなっている)
リセットがかかり、表示が一瞬消えて、時計が0:00に戻ってしまいます。
はじめてNTTにナンバーディスプレイの申し込みをした時、電池が消耗していたのを知らなく
て、NTTの方が何度もテストでかけてくれていたのに、アレ〜?うまく表示されないじゃん?
壊れているのか?などと、迷ってしまったのを思い出します。
なお、ユピテルのは、事前に電池消耗の表示が出ます。
ところで、今回、なぜナンバーディスプレイを作りたくなったのか?それはセールス電話対策
です。
実家にはよくセールス電話がかかってくるようですが、今の私の住まいの電話番号は、極力
外部に出さないようにしてきました。電話帳にも掲載していません。
しかし、実家の親が、言葉巧みに(同級生だとか言って)私の電話番号を聞きだされてしまい、
今の住まいにセールス電話をかけてくるようになりました。
※親には、セールス電話がかかってきたら、息子は死んだと言うようにお願いしていたのに(笑)。
さすがに生みの親としては、自分の子供が死んだなんて口が裂けても言えないかもしれませ
んね。(^_^;)
しかし!こんなんじゃ、「オレオレ、孫、孫、カネ送れ」なんて電話にだまされてしまうぞ?
時々、ナンバーディスプレイの履歴を見ると、「匿名」の着信が入っています。私は全く電話に
出ず、モジュラーを抜いて完全無視しているのですが、それでも懲りずにかけてきているみたいです。
いや、単純に、電話番号を0000から順番に回しているだけなのでしょうかね?つながらなくても、
かけてくるなと言われてもお構いなしに、機械的にダイヤルしているのでしょう。
ナンバーディスプレイのメモリ上とはいえ、汚されているみたいで気分が悪いです。汚らわしいで
す。
しかも昼間だけではありません。夜遅くとか、早朝5:30の着信もありました。私が全然電話に
出ないから色々と時間帯を変えてかけているんでしょうか。だいたい、セールス電話は、相手の
都合を考えない時間によくかかってきました。職場にもかかってきた事が何度もあります。
まったく、迷惑としか言いようがありません。迷惑電話の対策は、NTTで色々準備されている
ようですが、お金がかかるのがイヤですね。こんなのでお金をとらないでほしいです。何とかして、
迷惑電話をかけてくるヤツに、こちらの意志をハッキリ示したい。お断りです、と。
たとえば、「匿名」で着信すると、オフフック、数秒間無音で、オンフックすれば良いと思いま
す。これなら迷惑セールス電話野郎は課金されます。少しでもダメージを与えてやりましょう。
あるいは別のメッセージを流してやれば良いかもしれません。「番号を通知しておかけ下さい」って
のはNTTのサービスでありますね。そのためにNTTにお金を払うのはイヤなので、こちらで
流してやるとか・・・留守電でもできるかな。
「セールス電話おことわり!!」とハッキリ言うとか・・・あるいは「逆探知開始しました」とか(笑)
・・・「通報すますた」とか・・・お経とか・・・。
パソコンのサウンドレコーダで、8ビットのwavデータにしてBIN-HEX変換しROMライタでROM化、
カウンタと抵抗ラダーにアンプを組み合わせれば簡易的ながら音声再生ができます。専用の
音声チップもあるでしょう。
「もしもし、ちょっとガスを消してきますのでお待ち下さい、ゴトン(受話器をそのへんに置く音)」
というメッセージにしておいて、いかにも人間が出たようにして、そのまま放置プレイとか(笑)。
あ、保留のオルゴールを流しているとリアルだね。
1パターンだとバレるので、何パターンも用意しておいて、毎回ランダムにROMを切り替えて
やると良いでしょう。どんどん妄想が膨らみます。
携帯電話での通話でありがちなパターンで・・・もしもーし、もしもーし、アレ?切れた?と一方的
にしゃべって切る、というのも良いでしょう。
ランダムな間隔で、「ふーん」、「へえー」などと応答を返すようにしておいて、相手に無駄に
しゃべらせるとか。
まあ、アナウンス機能は、今どきの電話には付いているでしょう。いや、通報云々、は無いとは
思いますが、番号を通知しておかけ下さい、ぐらいはあるでしょう。とりあえず、ディスカウント店で
数千円で売ってる電話機でも買えばと思うのですが、私はほとんど電話を使わないから、買う
のはもったいないわけです。
かといって、既存のナンバーディスプレイアダプタに手を加えるわけにもいきません。改造の
範囲をこえて、作り直しになりそうです。
どうせお金を使うのなら、自分の勉強にもなる、自作の道を選びたいと思いました。自作
なら、全て自分が希望する機能を実装する事ができます。
パソコンとモデムで、ナンバーディスプレイ機能を実現する事はできますが、パソコンは
ファンの音がうるさいし、電気代がもったいないです。やはり、電池駆動の専用装置を作るべき
でしょう。
さて、電話回線に接続する機器は、JATEの認定を受けていなければ接続して使用でき
ません。たとえば海外のモデムでJATE認定を受けていないものとか、自作の機器もそのまま
では接続できない事になっています。
それでは、自作の道は閉ざされているのでしょうか?いままでは、電話関係機器の自作は
タブーとされてきました。このタブーに挑戦しようと、私は以前から検討してきました。
その答えのひとつが、電話録音アダプタです。2つのメーカーのものを買って、回路を調べ
たら、ほぼ同じでした。回路図
このアダプタの先には、本来はテープレコーダやアンプ付きスピーカをつなぐのですが、
オシロで波形を見たら、ベル信号もわかります。これで着信を検知し、ナンバーディスプレイ
の信号も受信できないかと思い、実験していました。去年か一昨年の事です。
しかし、オフフックの手段が無いため、ナンバーディスプレイは実現できません。そりゃまあ
電話機のフックをソレノイドで上げるとか、手段はいくつかあるでしょうけど・・・そこまでやらな
くてもいいと思いました。
やはり電話回線に接続するものがベストでしょう。モデムICとPICマイコンを利用して、自分
が希望する機能を実装したいと思います。
そして今回は、この開発のために、ナンバーディスプレイ対応の疑似交換機も作ります。
実際の電話回線で実験できないし、課金されるのはイヤですからね。
最後に、きちんと書類を作り、届け出をするつもりです。じつはJATE認定のほかに、NTT
に申請する方法もあります。これは、年間生産台数が10台以下の機器に限られているよ
うですが、手数料は無料です。ぜひ挑戦してみたいです。
■ナンバーディスプレイの仕様、欲しい機能
妄想はドンドン膨らみます。
(1)迷惑電話仏血義理機能
これがメインの機能です! ぶっちぎり!!
匿名で着信した場合、オフフック、無音、3秒後にオンフックして回線切断する。
併設電話の切り替えリレーを切るため、ベルは鳴らない。だからぐっすり寝られる。
平和に暮らせる。
(2)時間帯着信拒否機能
何時何分から何時何分までの間は、着信があっても電話のベルを鳴らさない。
ベル信号が来る限り、併設電話の切り替えリレーを切っておくわけです。
これで夜中に起こされなくて済みますが、非常の連絡があったら大変ですね。
機能的にはカンタンに実装できるでしょうが、やっぱりやめようかなと?
(3)電池駆動
電池駆動のほうが、申請の電気的条件がラクなようです。
但し、電池駆動という事は、消費電流を抑えなければなりません。ここが重要な
ポイントになります。
(4)RTC
RTC(リアルタイムクロック)は内蔵しないといけないでしょうね。着信履歴に時刻が
入っていたほうが良いでしょうから。
秋月から買ったRTC−8564NB(変換基板付き)に、リチウム電池を組み合わせて
使用します。
(5)EEPROM
PICのRAMは少ないし、内蔵EEPROMも少ないです。電話番号だけで10桁で
す。時刻まで含めると、1件あたり・・・電話番号は携帯からだと11桁、月日、時分で
4桁、16バイトぐらいとみておいたほうが良いでしょうね。
128バイトなら8件しか記録できません。外付けのEEPROMに記録するかどうか?
8件でじゅうぶんかもしれないし?(検討中)
次の(6)のように、電話帳の内容を記憶しておく事もあるし・・・PIC16F877など
ならば、プログラムROMに余裕があるから入れられるかな。書き込みに電気食わない
かな。
(6)発信者名の表示
あらかじめ電話番号と、名前を登録しておきます。着信時、登録されている番号
ならば、名前を表示します。
(7)セキュリティ機能 その1
留守中に、ドアや窓が開いたら、自分の携帯に電話をかけて、番号を通知する。
ドアスイッチなどの設置が必要になりますが・・・簡易的な防犯機器として使えそう。
ハード的には、フックリレーをそのままダイヤル用に使えますから・・・トーンなら
DTMFジェネレータICをつなげばいいし・・・入力ポートをいくつか用意するぐらいか
な。
(8)セキュリティ機能 その2
そういう製品を雑誌か何かで見たのですが、自分の携帯から、自宅の電話にかける
と、自分の携帯番号であると判断したらドアロックを解除する、というもの。
携帯番号だけでドアロック解除じゃ怖いから、自分の携帯からかけないと、ドアを
開けた瞬間にピーーと鳴るだけでも良いかもしれません。ドアロックが故障したら
困るし・・・。
停電でも動作するように、充電式電池によるバックアップ機能が必要ですね。
(9)データ出力機能
着信情報をシリアル通信で出力するポートを備えます。このデータを、外部に接続した
機器でどう使うかは自由です。パソコンにつないでもいいし・・・。
あっ、特定の電話番号ならば、リレーをONして、パトライトが回るとかストロボが光る
とか、そういう制御ができたら便利では?
うちに非通知でセールス電話をかけたら、テ*ドンの発射コードが某・北の国に送信
されミサイル発射、日本は滅亡するとか。ケッケッケッ・・・(@_@;)
■部品取り
モデム関係の部品は、やはりモデム関係からはずすのが早くてラクでしょう。不要になっ
たISAやPCIのモデム基板が5枚、それとハードオフでゲットしたアイワ、ヒューコム、
緑電子(懐かしい!!)のボックスモデム、そして生活創庫で買ったターミナルアダプタ
とポケロボモデム(ダイコク電機)、これだけあれば十分です。
ライントランス、フィルムコンデンサ、サージアブソーバ、電池ボックス付きのケース
などが欲しいわけです。
最近は、ADSLの普及で、アナログモデムを使わなくなりました。ISDNのターミナル
アダプタもすでに売っていなかったり、悲しくなるような値段でリサイクルショップにひっそり
と置かれていたりします。ADSLモデムも、初期の頃のものは¥500でハードオフにありま
した。
300、1200bpsモデムからパソコン通信を始めた私にとって、進歩はわかるのですが
あの頃にあこがれていた高速モデムやターミナルアダプタが、こんな姿になっているのは
ちょっぴり悲しいですね。
中学1年の頃(1984〜85年)、ミームいろいろ夢の旅というアニメがあって、電電公社
(現在のNTT)の提供でした。当時はINSとかニューメディアと盛んに言われていて、キャプ
テンシステムやら科学万博やら、もう、なんだか未来を予感させるというか、未来そのもの
じゃないかというバラ色の妄想にとりつかれていた?時代でした。
それが・・・あれだけISDN、ISDNと騒いでいたのに、ADSLも通過してしまって、光
ファイバーですか? そんなの家に要らないですよ。何するんですか。いまだにアナログ
電話回線をプッシュホン(DTMF)対応にするために毎月の基本料払わなきゃならない
でしょう?ISDNの料金も変わっていないようだし?
地上波デジタル放送も、余計なお世話じゃないかと思います。余計な金を使わせない
で欲しいですね。それに資源の無駄です。
ISDNの現実は、雷ですぐ死んで電話が使えなくなった事です。ようやく普及し始めた
頃にDSU内蔵TAを6万も出して買って、見事にやられましたね。復旧のためにDSUを
3万も出して買ったりして、いま思えば無駄だった。電話のために家の電気を使う必要が
あるのも、何かひっかかるものがあったりしてね。
そのうちにアナログモデムが早くなってきて、ISDNの意味が無くなってきた。そうして
ADSLの時代になったわけです。
左の写真: NECのTAは、¥300でした。ショボいスケルトンケースを見ていたらムカツイた
ので、電源コードを持って、そのまま振り下ろしたら容易に粉々に砕けました。
値段があまりにも悲しいし、ネジをゆるめるのが面倒くさくて叩き割りました(笑)。
ラムネビンのビーダマが欲しくて、落として割っていたバチあたりなガキみたい。
ネジをゆるめる工数を考えたら、叩き割ったほうが安上がりなんです。だいたい、
底についていたスタンドをはずそうとしただけで割れましたからね・・・ボロですよ。
これはバックアップの乾電池が液漏れしていたので安かったのでしょう。基板から
不穏な臭い(液漏れの臭い)がして、基板の一部と、モジュラーの端子がサビてい
ました。
右の写真: 懐かしのアナログモデムたち。緑電子&ヘイズのアルミケースの放熱が非常に
よさそうな(だけどあまり意味がなさそうな)96モデム、ヒューコムのV.34ESII、
アイワのPV−BF144です。
私はPV−AF144V5を持っていましたが、あの哀話伝説には泣かされましたね。
PV−BF144は問題点が改良されコストダウンしたもののようです。しかし、この
現物は、何か液体状のものが中に入った跡があり、サビていました。
ヒューコムのモデムは同じものを持っていました。安物丸出しみたいな印象でし
た。これは、雷でやられた瞬間を目撃したというイヤな思い出があります。
ドドーン!と落ちた瞬間に、ジジーッと音がして、煙が出ました(笑)。
併設電話をダイヤル(パルス)するとなぜか着信するという問題があって、ヒュー
コムに問い合わせても、調査中、お待ち下さいという回答だけで、それっきりという
いい加減な対応でした。いつまでも待っているから回答を下さい。
オムロンのTAは¥500で、なんか新品みたいでした。箱も梱包材も揃っているし、元の
値札までちゃんと貼ってありました。ACアダプタの線を束ねている針金も、ゆるめた形跡が
無いし、ケーブル類は袋に入ったままです。本当に新品かもしれません。
こりゃあ、部品取りにはもったいないです。叩き割るなどもってのほかです(笑)。
ポケロボモデムは¥1,250でしたが、売れ残り品のようでした。箱が汚いのに、中身は
きれいに包装されたままでした。これは単3が4本入る電池ボックス付きなので、このケース
に、自作のナンバーディスプレイを組み込もうかと思います。でもちょっと小さいか?
新品未開封のようです。電池も未開封!(しかし1本が液漏れしていた。刻印は98-11)
ボタンを押すと某所につながるようですが、試した事はありません。製造されてから一度
も使命を果たす事なく、分解されて皮(ケース)だけ使われる運命なんて!(^_^;)
オムロンのTAのケースも、電池ボックスが付いているし、加工しやすい感じなので、
候補にあげておこう。
それから、基板を解析すれば、内線通話用のベル信号回路がパクれるかもしれない。
テストポイントに電圧が記載してあるので参考になりそう。
■疑似交換機
実験中の機器を、電話回線につなぐワケにはいきません。法的にマズイし、発信の
テストで意図しないところにつながって迷惑をかけたり、料金がかかるのは避けたいも
んです。好き放題に、発信・着信ができる疑似交換機が、実験には必要です。
疑似交換機というのは、内線の交換機のようなものです。それこそピンキリですが、
安いものは1対1で、片方の受話器をあげたら、それだけで相手のベルが鳴ってつなが
るという物です。例の秋月キットがそうですな。
高級な物は、電話を何台も接続できて、しかも伝送損失のテストなどもできるように
なっています。
子供の頃、ロンパールームで電話ごっこを見たのが、電話に興味を持ったきっかけ
だったと思い出します。ちょうど手元に古い電話が3台あって、うちでもあんな事して
みたいけど、電池をつないで通話はできるがベルが鳴らない、なんで?と悩んだもの
です。この疑問はそれから10年以上、解決しませんでした。この話は、リレー計算機の
話のところに書いたと思います。電柱を見たら6600Vと書いてあったので、そうか、
電話の電圧は6600Vか!と思ったりとか(笑)。ためしに100Vにつないでみたら
ベルが鳴ったので、そんなもんなんだなあと納得したりしました。
この疑問を追究していったら、交流と直流の違いとか、色々と勉強になりました。本当に、
最初は、なぜか50Vを境にしてその下が直流で、上が交流だと思っていたぐらいで(笑)。
まあ、こうして電話や、交換機に対する興味が深まっていった、というわけなんです。
疑似交換機といっても高い装置ばかりじゃなくて、ISDNのTAが内線機能を持っていま
すから、これを利用する手もあります。但し、局線にはつながないで、単独で使用する事
です。
以前、三角電伝というものを持っていました。これは電話、FAX、モデムがそれぞれ
接続できて、着信時にピーという音を回線に流して応答するんです。FAXだと、ポー、
ポー、という音でわかるのでFAXポートへ切り替え、モデムならピーに反応するので
モデムポートで切り替え、それ以外は電話ポートへ切り替えしてくれる装置でした。
また、内線交換機としても使えて便利だったのですが、ある雷の日に壊れてしまい
それっきりです。海外製のわけのわからないトランジスタで修理できないので、誰かに
あげちゃったような気がします。
そういえばトラ技に、疑似交換機の製作記事が載っていました。FAXとFAXモデムを
接続して、スキャナやプリンタの代用にしよう、という趣旨だったと思います。
とっくの昔に、私はFAX同士、あるいはモデムとFAXを接続して、そういう事をやって
いました。機種によっては、回線の直流ループを監視しているので、電池あるいは直流
電源から抵抗を通して電流を流してやる必要があります。
基本的には、モジュラーケーブルだけで直結すれば通信可能でした。
この、ACアダプタから給電する装置を自作し、自分のパソコン通信ネットで売ったり
していました。2〜3個売れたと思います。
まあ、色々いじるなら秋月キットを改造したほうがラクだと思います。過去に何度か
疑似交換機を自作しようと思いましたが、ベル信号の高電圧発生回路を作るのに
なんか面倒くさそうで・・・いま思えばそれほどでもないんですけど・・・。
この秋月キットの疑似交換機は、シンプルにまとまっていると思います。PICのプログ
ラム修正と、若干のハード追加・改造で、ナンバーディスプレイ対応の疑似交換機が
実現できるでしょう。
その疑似交換機キットのソースプログラムは入手できないようです。PICNICのは
ソースが載っていたのですが特別なのでしょう。
バージョンアップのHEXファイルが、秋月のホームページにありました。これをダウン
ロードして、逆アセンブルして読んでみました。しかし、これを理解するよりも、自分で
ゼロからプログラムを作った方が早いと判断しました。
みんな私のプログラムを使うといいですよ(笑)。ダイヤル判定機能も追加しようか?
でも1対1だから意味ないか?でも1対1の交換機でも、0001とか0002とダイヤル
するものを使った事がある。ダイヤル機能のテストにも必要でしょう。
ナンバーディスプレイ対応の疑似交換機ができたら、秋月さんにキット化してもらい
ましょう??ダメかなあ。いまどきアナログ電話関係なんか流行らないかなあ。
ところで、このキットは、話中音(ツー、ツー、ツー)や呼出音、発信音(受話器を
上げるとツーと鳴る)は、PICで作り出しています。400Hzを出力ポートに出して、
所定のタイミングでスイッチングしているわけです。
別に、ICのインバータなどで発振回路を作って、それを出力ポートからAND回路で
スイッチングしても良いのですが、せっかくオリジナルのキットは、PICだけで作って
いますから、わざわざそのためにハードを追加するのは無駄です。
PICだけで音を作り出せばハード的にはシンプルですが、矩形波なので音があまり
良くないかもしれませんね。正弦波のほうが好きなら発振回路を追加したほうが?
実際にPICで作った音を聞いてみましたら、やはりNTTの回線のツー音とは違って
いました。
PICで実現する場合、まず基本は400Hzですから、その倍の800Hz(1/800
=0.00125秒)でタイマー割り込みを入れて、このタイミングでポートをトグルすれば
400Hzができます。そして、このタイミングを基本にしてカウンターを回し、たとえば
話中音なら0.5秒ON、0.5秒OFFの繰り返しパターンを実現するだけです。じつに
カンタンです。
0.5秒ON、0.5秒OFF、というタイミングは、ナンバーディスプレイ着信時のCAR
信号にも使います。
※CAR信号・・・情報受信端末起動信号
ナンバーディスプレイ用のシリアルデータを出力するため、現状の16F84Aに代えて
USARTを内蔵した16F628を使用します。これにモデムICを組み合わせて、情報が
送信できるようにします。
あまり関係ないのですが、交換機のベル信号に関しては、電話局で使われている
ような交換機の場合、いっぺんに多数の負荷を駆動する事になるわけです。その全部
の負荷を同時に駆動するのは負担がかかるので、いくつかのグループに分けて、時間
をずらしてベル信号を送っている、との事でした。以前読んだ本に書いてありました。
ベルは1秒ON、2秒OFFの繰り返しですが、ちょうどピッタリに始まる時もあれば、
リン、リリリーン、と途中から鳴る時もあります。ベルの信号源は共用されているので
しょう。加入者回路で、それをスイッチングしているだけなのでしょう。わざわざ丁寧に
きちんとリリリーン、リリリーン、と鳴らす必要もないわけです。
ISDNのアナログポートの場合は、TA自身が、発信者に対しては発信音、着信者に
対してはベル信号を作り出しています。当たり前ですね。
以前思いついたのは、ベルの回数を利用して、超低速でも無料で通信できないか?
という事です。そこで確認したいと思ったのは、発信者側のプルルル、という音と、
着信者側のベル音は同期しているのかどうかです。実験結果は、同期していませんで
した。
発信者側の装置で、プルルルの音を判別してカウントさせ、送りたい回数に達したら
いったんオンフックする、というふうにしたかったのです。発信側と着信側で同期して
いないんだったら、このセコイ通信システムは成り立たないなと思いました。
電気とかガスメータの検針用なら、こういうシステムで通信できるんじゃないかなと
思ったんですが・・・すでにノーリンギング通信ですか、そういうのがあるようですから
役に立たない思いつきでした。
ところで余談ですが、電話関係の本などを読むと、必ず「重畳」という言葉が出てきま
す。これは何と読むのでしょう?どこにも読み方が書いてなくて、長い間の疑問でした。
「ちょうじょう」と読みます。畳の部屋の六畳とか八畳とか、その読み方ですね。
けっこう、適当な読み方をしている人がいました。じゅうしょうとか、じゅうりょうとか。
なんとなく一日中、交換機の仕組みとか、プログラムの組み立てを考えていますが
その気になれば、何回線も扱うような交換機も作れるんじゃないかと思います。思う
だけで作る必要はありませんが・・・。妄想の範囲である限り、できそうな気がしている
だけだと思います。実際に作るのはそうカンタンにいかないのが普通です。
PBX用のクロスバスイッチ、というか、クロスポイントスイッチという専用のICがあり
ます。CMOSのシリーズのアナログスイッチでも代用できるかもしれません。あるいは
純粋にリレーだけで構成する事も可能でしょう。
交換機というものは、ビルディングブロックだそうです。これはどういうことかというと
小規模なブロックをいくつもピラミッドみたいに組み合わせて、たくさんの回線を扱うよう
にしているわけです。
制御しているコンピュータは、それほどの性能ではないが、全部の回線をスキャンする
命令(ハードウェア)に特徴があるようです。また、ある程度の誤作動は許容されるが、
停止することは許されないそうです。
なにやら疑似交換機から脱線してしまいましたので、もとに戻ります。
* 心の叫び(プリンタの設定に苦戦編) *
毎日、帰りが遅いのですが、コツコツと少しずつプログラムを作ってきました。
発振回路をソフトでON/OFFするなら比較的簡単なのですが、今回はソフトで
音やベル信号を作り出しています。オリジナルのトライステートのソフトがそうなっ
ているのですから、自分も追いつけ、追い越せという気持ちでゼロから作りました。
メインルーチンの先頭に、タイマー割り込みフラグが立つのを待つ部分があって
これにより、1.25msごとに、メインルーチンを1サイクル実行します。
MAIN
BTFSS INTCON,T0IF ;1.25msタイミング待ち
GOTO MAIN
BCF INTCON,T0IF ;タイマーオーバーフローフラグクリア
MOVLW TMAX
MOVWF TMR0
まずI/Oポートをバッファに読み込みます。
メインルーチンの終わりで、バッファをポートへ出力します。
MOVF PORTA,W
MOVWF PABUF
MOVF PORTB,W
MOVWF PBBUF
発信音(400Hz連続)は、このように生成します。
1.25msごとにXORで反転すれば、400Hzになるわけです。
出力をON/OFFするフラグがFLG1のビット7で、これがクリア(0)のとき、出力
バッファのビットを強制的にクリアしますから、出力しないことになります。
実際の出力は、メインルーチンの終わりでやっていますから、メインルーチンの途中で
バッファに対してどのような細工をしてもかまいません。
ポートの変化は、1.25msごとにしか行われないのです。ハードウェアのロジックの
クロック同期設計と同じ考えです。
MOVLW B'10000000' ;毎回トグル=400Hz
XORWF PBBUF,F
BTFSS FLG1,7 ;FLG1のビット7がクリアの時、出力しない。
BCF PBBUF,7
ベル信号(16Hz)は、このように生成します。
1.25msごとに+1して、25回ごとにポートを反転します。すると16Hzになります。
出力のON/OFFは、FLG1のビット6です。
プログラムは、基本的に、さっきの発信音と同じ要領です。
INCF CNTRING,F
MOVLW 25
SUBWF CNTRING,W
BTFSS STATUS,Z
GOTO MAIN1
CLRF CNTRING
MOVLW B'01000000'
XORWF PBBUF,F
BTFSS FLG1,6
BCF PBBUF,6
実際のベルは、連続で鳴らす事はありません。たとえば通常の呼び出しなら1秒ON、
2秒OFFの繰り返しです。ナンバーディスプレイの呼び出しなら、CAR信号というのですが
0.5秒ON、0.5秒OFFの繰り返しです。
このようなパターンは、また別にタイミングを作り出して、出力バッファに対して操作をし
ます。
つまり、FLG1のビット6をセットして、常時ベル出力にしておきます。別に、カウンタを
回して、1秒ON、2秒OFFのタイミングを作ります。この、2秒OFFのタイミングで、出力
バッファのビットを強制的にクリアしてやれば、その間、ベルは鳴りません。従って、
1秒リリーンと鳴って、2秒鳴らない、の繰り返しが実現できるのです。
なお、この秋月キットの回路では、ベルのON/OFFとリレーのON/OFFを連動させて
ベルOFFのときに回線の直流ループ(フォトカプラ)を監視して、呼び出し中の相手が、
オフフックになっていないかどうかチェックするように組む必要があります。
但し、瞬間的にフォトカプラの入力を読むと、5msぐらいのノイズが入るために、正しく
オフフックが検知できませんので、1.25msごとにチェックして連続80回、つまり0.1秒
間、直流ループが保持されれば、オフフックとみなすようにします。
このためのプログラムは、1.25msごとに毎回フォトカプラのポートを見て、0(直流ルー
プ)ならカウンタを+1、1ならカウンタをクリアします。カウンタが80以上になったら、
オフフックと判断するように組みます。
基本的な部分はこんな感じですが、全体の処理の流れは、「ステート」という考え方で
組み立てていきます。
状態遷移とか、難しい言葉がありますが、要するに、今はどのような状態にあるかを
番号で表現しているだけです。いまは1番目の仕事、これが済んだら2番目にうつるけど
ダメだったら1番目の仕事を繰り返して待つ、というふうにするのです。
発信音やベル信号生成のように、1.25msごとに必ず通らなければならないルーチンの
あとに、ステート番号によってジャンプするテーブルを設けます。
MOVF STATE,W
ANDLW 1FH
ADDWF PCL,F
GOTO STATE0
GOTO STATE1
GOTO STATE2
(略)
GOTO STATE31
最初は、ステート0です。
電話機A、Bのオフフックを監視します。さっきの、オフフック監視手段により0.1秒以上
直流ループが保持されれば、オフフックとみなします。
このとき、AとBのどちらがオフフックになったか、によって、処理がわかれる事になりま
す。どちらが発信側か、ということです。発信側のダイヤル信号を受信しなければなりませ
んからね。
オリジナルのトライステートのソフトにはありませんが、私はパルスダイヤル受信機能を
自作して追加しました。電話機を2台しかつながないので、電話番号を使う意味がありませ
んが、ナンバーディスプレイの事を考えて追加しました。
DTMF(トーンダイヤル)ならば、LC7385などのデコーダがありますが、秋月キットの
回路をできるだけそのまま活用するために、パルスダイヤル対応としました。
パルスダイヤルは10ppsと20ppsがありますが、そのどちらにも対応可能にしました。
どちらにも対応するのは難しい事ではなくて、早いほう、つまり20ppsに対応できるように
組めば、10ppsの信号もそのまま受信できます。
ダイヤルパルスのブレーク幅を測定するのと、ダイヤル桁間の時間が規定されているので
その時間を見て、ダイヤル桁間だと判断するように組みます。
また、ダイヤルの0は実際には10パルスですから、内部的には、0は無ダイヤル、
10(パルス)は0と考えます。
そして1発目のダイヤルで、発信音が止まるようにします。
でも、何もクソまじめに、1発目で止まるように組まなくても、毎回クリアさせて支障ありま
せん。
ダイヤル受信と同時にタイムアウトの時間測定もします。何もダイヤルしないで放置すると
たとえば10秒でタイムアウトになり、話中音が鳴る、というふうにします。
何かダイヤルをすれば、そのたびにタイムアウトのタイマーがクリアされます。
受信すべき最大桁数、たとえば2桁としておいて、ダイヤルを1桁受信するたびに−1して
桁数が揃ったらダイヤル受信から抜けて、電話番号の判定へうつります。
もしダイヤルの桁間があいて、タイムアウト時間にかかったら、そこでダイヤルは無効に
なり、話中音が鳴ります。
このように、いろんな状況を考慮したプログラムを組み立てていきます。
交換機の処理でもっとも忙しいのが、このダイヤル受信です。なにしろ、パルスを正確に
カウントして、それが正しいかどうか判定しなければなりません。逆にヒマなのは、通話中で
す。直流ループだけ監視して、オンフックになったら切断処理をするだけですからね。
こんなふうにして、あれこれ異常処理などを考えながら、まずは疑似交換機としての基本
機能を実現したわけです。
あとは、これにナンバーディスプレイ用の機能を付け加えるわけです。交換機側の処理を
作ります。モデム信号を流すために、若干のハードウェアの追加、改造も必要です。
PIC16F628のシリアルポートを利用するため、RBポートの一部をつなぎかえて、
プログラムも修正します。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
先日、ちょっと気になったこと。
とおりすがりのゴミ置き場、この袋だけが1個、収集車に持っていってもらえなくて、放置
されていました。これは資源ゴミになるので燃えるゴミには出せませんというシールが、
側面に貼られています。1週間ぐらいずっと放置されています。
これは、どうやらファイルの中身をそのまま抜き取って捨てたもののようです。見慣れた
背表紙が入っていますね。
何かの仕様書のようです。見えているページには、某・大手の有名石油会社の名前が
ついた何とかエンジニアリング向け、という社名が読みとれました。
オイオイオイオイ〜〜〜〜〜〜!!!! 会社名が丸見えじゃんかよ!!!!
せめて1ページ目だけでも破っておくとか、そんなことも配慮できんのかね?
こりゃ〜イカンですよ!! 重要かどうかは知らないけど、こんな捨て方はダメでしょう!
私は、こんなゴミの出し方をする会社には仕事を絶対に頼まない!信用問題です。
シュレッダーにかけていないのも問題だし、資源ゴミとして正しく出さなかったために、
持っていってもらえず、放置されている。もしかしたら、誰かが勝手に持ち去って、これを
利用して何をするかわからないぞ。
いろいろ想像してみましたが、たぶん、「このファイル捨てといて」と新人に頼んだら、
文字通りに受け取って、そのまま捨てたのかもしれません。ファイルはまだ使えるから
中身だけ捨てちゃえ、と。
捨てておいて、って、文字通りに受け取ってはいけません。面倒くさくても、ちゃんと
シュレッダーにかけるのが常識です。
あるいは、出張などで資料を持ち歩いていた人で、自宅に資料を持ち帰っていて
不要になったので捨てたか、ぶっちぎり退職?したのでそのまま捨てちゃったとか、
人それぞれ、あれこれ事情はあるとは思いますけどね。
だいぶ前に、テレビ番組で、ゴミ埋め立て地に銀行の顧客ファイルがそのままドーンと
捨てられているのが紹介されていました。中身だけ抜いたんじゃなくて、そのままです。
これを持ってくれば、買う人がいるかもしれません。こんな銀行は恥です。お金を預け
たくないもんですね。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
(開発中、追記していきます)
■ナンバーディスプレイ本体
マイコンは、最近よく使っているPICを採用する事にしました。消費電流が少なく、DIP
パッケージで扱いやすい。ソフト的にはクセが強く、ページ切り替えなどが厄介です。いろ
んな落とし穴があり、プログラミングするたびに楽しませてくれます(皮肉)。
PICのシリアル通信を使った事がなかったので、まずは、それからやってみる事にしまし
た。
配線前↓ 配線後↓ 動作中です。
ハンダ面↓
このように、16F877を中心としてシリアル通信、液晶、ICSPコネクタ、LED、ディップ
スイッチを並べて、ある程度の実験ができるようなボードを作りました。
モデム本体(というほど大げさではないが)は別で、ちっちゃい基板に沖のモデムICと
クリスタルに、コンデンサなどが載っている程度です。
NCUは、いらないモデムがあれば、流用してラクに作れるのですが、今回は、以前
買ったワンダーキットのNCU基板をはじめて使ってみる事にしました。5年ぐらい前に
組み立てて、それっきりですもんね。
(開発中、追記していきます)
■2004年5月11日〜 追記
なかなか時間が作れなくて、ようやく実験用のバラック基板を組み上げた。
もっとも、時間をかけてコツコツ作ってきたのではなく、1〜2日でダダーッと作ったので
美しくない。配線は間違いないから、ソフト開発には支障ないけれど。
私は、毎日コツコツ少しずつというのが苦手で(学生時代の勉強もそうだった)、間が
あくと元のペースに戻れない。ベストコンディションの時に、超絶集中!?して、一気に
作り上げるタイプである。
集中している時に邪魔者は一切許されないのである。セールス電話はその筆頭なので
ある。何としても、無用なセールス電話を「なきものに」したい。ただでさえ人の時間を邪魔
する電話が嫌いなのに、無駄なセールス電話に、人生の貴重なる時間を奪われる事は
絶対に許し難いのである。この気持ちが製作のスピードに拍車をかけた。
セールス電話や、ダイレクトメール、SPAM、そして容赦なく郵便受けに投げ込まれる
ピザ屋のチラシの類は、まったく無駄なものである。とくにピザ屋は、チラシ入れるなバカ
ヤロウ(?)と貼り紙をしているのに投げ込んでいく。私が要らないと言っているのだから
不要なのである。ゴミが増えるばかりだ。要らないと意思表示した人には、そういったゴミを
よこさないような仕組みづくりができないものだろうか。「お互いに無駄」なのだから。時間も
資源も、有限だ。
こういうハードウェアを作るのも無駄といえば無駄と言えなくもない。そういう機能が付いて
いる電話が安く市販されている。無駄な事のために無駄な物を作っているのか。そういう考え
方もある。しかし私は、いろいろ応用したいから、そのベースとなる、この汎用ナンバーディス
プレイ基板を作っているのだ。
ほかにも、たくさん作りたいものがあるのに、現実にはなかなか手が回らなくて欲求不満
である。人生は限りがある。電子機器を作る以前に、時間を作る技術が最重要課題なのである。
部品代なんか問題じゃない。時間がコンビニで売っていたら買いたいのである。
そして、やる気が最高潮に達していなければならない。ウオー、作りたくてたまんねえ、
という萌え萌えな気持ちがあふれている、まさに、ベストコンディションな「その時」にやるのだ。
さて、これがバラック基板。
「■ナンバーディスプレイ本体」の写真とは全く異なる基板だが、これはNCU回路まで
含めて1枚の基板にまとめたものである。あとでプリント基板化する予定。
ちなみに「■ナンバー(略)」の基板は、液晶やLED、シリアル通信を備えて、16F877の
ソフト開発や実験がしやすいように作った汎用基板である。このような、押しボタンとかLED、
液晶を備えた基板に、さらに任意のハードウェアが接続できるようなコネクタ端子があれば
何か新しい事に取り組む時に、サッと取り組みやすい。
この新しい事とは、自分が初めて取り組むデバイスを試す事などをいう。
ボードをいちから作り上げるのはウンザリだが(まあ市販のボードを買う方法もあるがお金
が無い)、数本の配線とプログラム作成だけで新しい事が実験できれば、取り組みやすい。
しばらくいじっていないと、何だか調子が出なくて、面倒な事をしたくなくなるものだ。だから
なるべく楽に、簡単に取り組める環境作りを、あらゆる角度から検討し実行すべきである。
ところで、この基板は土日を利用して作ったのだが、その合間にも迷惑セールス電話が
かかってきた。いつもは「非通知」だと無視して出ないのだが、久しぶりに声を聞いてやろう
と思って受話器を上げた。
但し、私は声を出さないで、相手の出方を待った。
受話器を上げて数秒間は無音で、何か切り替える音がした。通話状態になったようだ。
私はそのまま待った。すると「もしもし、もしもーーし、もしもーーーし」と聞こえた。私はソーッと
受話器を床の上に置き、そのまま放置した。5分ぐらいたってから聞いてみたら、切れたようで
話中音が鳴っていた。今度は、ガスを消してくると言って保留にしたまま放置してやろうと思う。
また翌日も、それらしいのがかかってきた。受話器を上げてすぐにガチャ切りしてやった。
自分の意思をハッキリと言葉で伝えたらいい、お断りです、もうかけてこないで下さいと言えば
と思う人もいるかもしれない。それが通じるなら苦労しないのである。もうサンザン、お断り
しますと言ってきた。
何で電話番号を知ったのかと思うが、それは確かに名簿や懸賞応募ハガキとか、通販の情報
が漏れた例もあるだろう。ところが電話番号を0000から順番にかけているという話もあって、
そうだとすれば、電話番号を非公開にしていても無駄な事である。
市外局番と市内局番と4桁の番号の組み合わせで、毎日毎日あきもせずかけまくっているの
だろう。お断りリストなど作っていないだろうなあ・・・。
この思いを書き連ねていくと、きりがないので、物づくりのほうに振り向ける事にする。
■2004年5月20日〜 追記
ナンバーディスプレイの履歴は、着信電話番号と(あるいは非通知、公衆、エラー等)、
何月何日の何時何分に着信があったかを記録するから、RTC(リアルタイムクロック)が
必要となる。
RTCとは、マイコンが参照する時計である。マイコンのプログラムで、1秒のタイミングを
はかって秒、分、時、あるいは日、月、年、曜日、を計時処理しても良いのだが、常に
マイコンを動かすには、それなりに電気を食う。電池駆動したいとか、停電時にキャパシタ
で時計だけは動かしたい場合は、マイコンよりも専用のRTCチップが向いている。
マイコンを極めて低いクロック(32768Hz)で動かせば、かなり消費電流を抑える事が
できるし、専用のRTCチップが不要なのだが、PICにはシリアル通信もしてもらわないと
いけないし、処理が遅くなっては困る内容もあるので、ここは専用のRTCチップを使う事に
した。
ちょうど手元に、以前、秋月電子から購入した”AE8564NB”があった。これはピッチ変換
基板に、EPSONのRTC8564NBが実装されたものである。DIPの8ピンとして試作には
使いやすい。¥500と、値段も手頃である。
マイコンとはI2Cバスで通信するが、私はI2Cを使った経験がなかった。それで今回は、
I2CをPICで使う方法も勉強した。
過去に使ってきたRTCは、沖の62X42とセイコーインスツルメンツのS3511だったが、
いずれもI2Cではない。62X42はZ80につないで使っていたが4ビットだったか。S3511
もI2Cではなかった。EEPROMの93C46は、3線か4線式の通信で使っていた。
I2Cの使い方を、手元の書籍で調べてみた。今回参照した資料名と版数は下記の通り。
以下の記述中の図番号や章番号は、これらの資料に基づく。
・電子工作のためのPIC活用ガイドブック 平成12年2月5日初版第1刷
・PIC16F877データシート DS30292A-J
・EPSON RTC8564JE/NBデータシート、アプリケーションマニュアル(MQ320-05)
まずPIC16F877のデータシートを読んだが、さっぱりわからない。読めば読むほどわから
ない。だいたい、これはもともと英文だったのを和訳したものだから、文章がわかりにくい。
あめ玉の代わりにビー玉をなめ続けているようで、味気ない。読んでいると眠くなり、いつの
間にか寝ていた。もともと寝そべって読んでいたのがいけないのかもしれないが。
次に、PICのバイブルと言われる?PIC活用ガイドブックを読んだ。239ページから、SSP
の使い方(I2Cモード)として解説が載っている。著者の後閑さんは先駆者だ。尊敬している
し、見習う面が多くある。(いかに時間を捻出して本を書いたり工作しているかに関心アリ)
初期に文献が少ない頃、参考書がほとんどなくて、まるで宇宙人の言葉のようなPICの
データシートでしかも英文のみの頃から、いち早く取り組み、多数の役立つ本を書いている。
マイクロチップ宇宙の宇宙語を日本語にして、わかりやすく解説して下さる。
地球上には、それとわからないように浸透している異星人がいるというが(未確認筋から
の情報)、ひょっとしたら、後閑さんもその一人なのかもしれない。(をいをい)
われわれ地球人類を、幸福へと導くのである?
ちょっと大げさに書いたかもしれないが(笑)、この本を読んで、少しわかるようになった。
しかし、まだ煮え切らない部分も多かった。
トラ技のバックナンバー(およそ15年分)をひっくり返して、I2Cの記事を探してみた。そう
いえば、記事検索プログラムがどこかにあったのを後で思い出した。本をひっくり返して
いると、また眠くなって昼寝してしまうのがオチなのである。
ああ、まだわからない。なんかパッとしない。スッキリしない。
たとえば、SSPADDレジスタがわからなかった。レジスタ名からも、アドレスを設定して
おくような用途である事はわかるのだが、なぜかボーレート設定の値を設定する使い方も
ある。ボーレートの設定値を入れたら、いつアドレスを入れるんだと混乱した。
データシートに、「SSPADDレジスタはスレーブアドレスを保持します」(72ページ、19行目
と書いてあるが、この文章はどちらの意味にもとれるのだ。スレーブと通信する際に、その
スレーブのアドレスを入れておくのか(最初この意味だと思っていた)。あるいは、PICをスレ
ーブで使う時のアドレスなのか。
あとでわかったのだが、スレーブモードで使用する時にスレーブアドレスを入れ、マスター
モードで使用する時にボーレート設定値を入れるのである。レジスタ名にADDなんて付いて
いるから、アドレスだと思いこんでしまいがちだ。
今回はPIC(マスター)にRTC(スレーブ)を接続するのだからPICはマスターモードで使う。
つまりボーレート設定値をクリスタルのクロックから計算して設定すれば良い。
これだけで何日か悩んでしまった。
以前から思うのだが、PICは色々と「ハマる」要素があって、皮肉だが「楽しませて
くれる」。それと、いろいろな品種が増えすぎて、今後の供給が大丈夫だろうかと不安にも
なる(笑)。
PICのメーリングリストなどを見ていると、GPxピンが出力しませんとか、かれこれの機能が
どうしても動きませんとか、その手の質問がよく出てくるが、誰でも同じような部分でつまづく
らしい(笑)。
その質問と回答のやりとりの流れを見守るのも、これはこれで面白い。とくに、あーあ、
こんな安易な質問しちゃって・・・たぶんあの人が出てくるぞ・・・。あとでメールチェックしたら
ほーら、やっぱり、という感じ。過去ログ読みましたか?自分で調べる努力をしましたか?
という例が多いと思う。
ちなみに私は、メーリングリストに質問を投げた事は一度もなくて、PICの内蔵EEPROM
が何回の読み書きで死ぬかやってみました、とか、クダラナイ投稿をした程度(笑)。
さっきのSSPADDの続きだが、PIC活用ガイドブックの図5.52 SSP(I2Cモード)の内部
構成 の図は誤解を招くと思う。これは後閑さんが悪いのではなくて、PICのデータシートから
この図になっている。マイクロチップの手抜き。
データシートでは71ページに、それぞれ、
図9−10: I2Cスレーブモードのブロック図
図9−11: I2Cマスターモードのブロック図
という図がある。
この両方に、SSPADDreg、Match検出が同じように書いてあるから、混乱するのである。
うーむ、マスターモードでもスレーブモードでも、SSPADDが一致するかを見ているのかと受け
取ってしまった。
マスターモードのブロック図では、BaudRateGeneratorとSSPADDとの接続関係を
ハッキリ書くべきである。なんでMatch検出をしているのか。これはおかしい。SSPADDの
行き先はMatch検出ではなく、BaudRateGeneratorじゃないのか。
図で、BaudRateGeneratorには、確かにSSPADD<6:0>の入力をしているように
書いてあるけれど、それなら何で、矢印をのばしてSSPADDとBaudRateGeneratorを
つながないのか。アメリカ人は大ざっぱだから困る。
あとで思えばしょうもない事でつまづいてしまったが、くじけているわけにもいかないので、
とにかく動かす事にした。
PICをどう動かすか、というのは、どのレジスタのどのビットをどのタイミングでどのように操作
するか、なのであって、この一連の手順の組み立てをどうするのか、これはデータシートを読む
だけではサッパリわからない。
ただI2CのRTCのアクセス手順については、RTC8564NBデータシートの10ページに、
「8.3.7.I2C−BUSプロトコル」という項目があり、具体的に述べてある。最終的に、このよ
うな信号がPICから出力されるようにすれば良いのだ。
あとは、この信号を作り出すにはどのレジスタをどのようにコチョコチョやれば良いのかだが、
先駆者のいくつかのプログラムをネットで探して、1行ずつ読み、処理内容をひとつひとつ、
データシートの内容と照らし合わせて、どのレジスタのどのビットをどう操作して、どのような結果
になるのかを確かめながら理解を進めていった。
最後のデータリードについてはACKを返さない、というのを最初知らなくて、秒だけ正常(0
〜59の範囲で正常にカウントアップする)なのに、時、分がオールビット1ではりついてしまって、
これもまた1〜2日ひっかかってしまったが、これはPICのせいではないのである(笑)。
結局、I2Cの読み出しルーチンをACK有りと無しの2通り作って、最後の読み出しのみ、
ACK無しでアクセスするようにして解決した。
ここで、実際のI2C読み出し(RTCから時刻を読み出している)波形を示す。
上の波形がSCL(クロック)、下がSDA(データ)である。
最初のスタートコンディションがわかるだろうか。SCLがHの状態で、SDAがLになると
スタートコンディションとなる。
続いて、RTCを書き込みモードにしている。RTC8564のスレーブアドレスは1010001*
で、*は書き込み時0、読み出し時1となる。すなわち、ここでは10100010を送っている。
この操作は、チップセレクトのようなものと思えば良い。いまはI2Cバス上にRTC1個しか
無いが、いくつかのデバイスを接続した場合に、ひとつのデバイスを選択する手段が必要
となるが、それがこのスレーブアドレスである。また読み出しなのか、書き込みなのかの
指定も含んでいる。
スレーブは、SCLがHの時にデータを取り込むから、波形を見ながら、SCLがHの時に
SDAをひとつずつ見ていって、意図した通りになっているか確認してみるとよい。
1、0、1、0、0、0、1、0、となっているのがわかるハズ。
短いヒゲのようなものが見えるが、SCLがLの時は無視されるから問題ないと考える。
ACKが含まれているからよく見てみよう。
次に、秒のアドレス指定をしている。このアドレスは、RTC内部のレジスタを選択するアド
レスである。秒のレジスタは02だから、02を送っているが、やはり先ほどと同じようにSCLが
Hの時のSDAをひとつずつ見ていくと、0、0、0、0、0、0、1、0となっている事が確認できる。
さらにその次では、スタート条件再送出をしている。スタート条件再送出というのは、別に
いったんストップコンディションを送り出して、そこでアクセスを終わってから改めてスタート
をしても良いのだが、時間の無駄なので、再送出という手順を使う(と理解しているつもり)。
たとえば、書き込みをしたあとに、続けて読み出しをしたい、という場合にこの手順を使うと
思う。
書き込み後に読み出しをするというパターンは、今の例のように、秒のアドレスを指定(書き
込み)してから、秒、分、時を続けて読み出す場合に用いられる。なおレジスタのアドレスは
アクセスのたびに自動的に+1される。
なお、ここでは波形観測にロジアナを用いたが、I2Cは信号線が2本だから2CHのデジタル
オシロでも間に合う。ただ、1回のアクセスの波形を細かく見ていきたい、という場合には、
安いオシロでは表示しきれないかもしれない。メモリが長く、細かい波形を延々と記録でき
る必要がある。
それとトリガ条件が、オシロの場合は単純に、立ち上がりか下がりぐらいしか設定できないが
ロジアナの場合は全ての信号の組み合わせで設定ができる。たとえばスタートコンディション
でトリガをかける事もできるわけだ。
ついでに、秋月電子のAE8564NBについて個人的な意見を述べる。
回路は、せっかく変換基板を作るのなら、もう少し練ってほしい。DIPの全8ピンのうち、
7ピンがNCになっているが、これをキャパシタ端子にして有効活用したらどうか。8ピン(VDD)
からダイオードを順方向で7ピンに接続する。そしてRTC8564NBの電源は、キャパシタが
接続された、この7ピンからもらう。
LEDは不要だと思うし、もしLEDを搭載する場合でも、もう少し寸法の小さい、たとえば
1608サイズの物を使って、部品をもう少し詰めたらダイオードも載せられると思う。
そしてJP1、JP2でI2Cバスのプルアップが選択可能で、簡単に使うには便利だが、現状の
回路では8ピン(VDD)からの電源をもらっているから、もし8ピンにキャパシタを接続して
使っている場合は問題になる。バックアップ中にLEDなんか点滅したら・・・。無いか??
RTCは多くの場合、バックアップで使用する。電源+5Vからダイオードで一方通行にして
RTCのVDDに接続して使うだろう。すなわち現状の回路では、プルアップをバックアップ電源
からもらうような形になっているので、できれば別にしたい。プルアップ系を8ピン(VDD)
からもらって、そこからダイオードで順方向に7ピンに接続し、外部にキャパシタを接続し、
RTCの電源として、バックアップ時の動作を保証する。
私の今回の使い方は、JP1、2、3はオープンにして、外部にプルアップ抵抗を接続した。
プルアップの処理をどうするのが最良かについては、RTC8564NBのデータシート、アプリ
ケーションマニュアルを読んで考えている。「取り扱い上の注意事項」には入力端子、
未入力端子の処理について書かれていて、開放はいけないようだ。CLKOEだけは1MΩ
の抵抗R1でプルアップされているが、I2Cバスの2本はどう処理したら良いものだろう。
消費電流を測りながら、指でRTCのピンにさわってみて変化があれば、対策が必要になる
だろう。仮にピンがオープン状態のとき、そう都合よくスタートコンディションの条件になるのか
どうかわからない。1秒でタイムアウトするだろうし?
(1秒でタイムアウト→RTC8564データシート中のタイミングチャートに、本デバイスへの
アクセスはSTARTコンディションの送信からSTOPコンディションまでの一連の通信を1秒
以内に終了する事、と書いてある。1秒以上かかった場合は、I2Cバスインターフェースが
リセットされる)
I2Cバスのプルアップ抵抗が、電源OFF時にはLレベルになることで、プルダウン抵抗として
働くという解釈で良いのかな。
I2Cバスにつながっている物がEEPROMなら、電源OFF時の事は考えなくて良い。電源
が供給されていないから動きようがない。しかしRTCは、バックアップ電源で常に動作してい
る。
●PICまめちしき
今回の開発とは関係がないが、8ピンのPIC、すなわち12C508とか509に関する注意。
(508A、509Aも含む)
コードプロテクトをかけても、000h〜03Fhが読める事は意外に知られていないようで、
製品に使われている物を読み出してみると、確かにプロテクトのエラーは表示されるものの、
読み出せるものが経験上、多かった。000h〜03Fhに収まるプログラムだと、丸見えになる
わけだ。
私は、この特徴を利用して、まず先頭にGOTO 040Hを書き、あとはコメントで埋めてい
る。RETLWで1文字ずつ、バージョン情報などを書き込んでいる。こうしておくと、後で読み
出してバージョンを確認するのに便利だ。
しかし最近はフラッシュタイプの12F675に移行したので、このワザが使えなくなり残念。
そういえば以前、ある工場から、とある基板に載っているGALやPALの内容がコピーでき
ないか、という相談を受けた事があった。「開発元が倒産した」との事だったが、ひょっとしたら
コピー商品を作るための言い訳じゃないかと(笑)。
結果はわかりきっていたが、わざわざGALライターを送ってきたので読み出しだけはしてみ
た。やはりエラーで読めなかった。残念ですね、と回答して、荷物を送り返した。
もっとも、まともそうな会社でもバージョン管理がいい加減とか、マスターが紛失したとか、
そういう問題はありがち?かもしれない。
産業用ロボットのプログラムの修正を受けた時だったか、これが最新版ですと渡された
フロッピーの内容と、サンプル機のマイコンの内容とが違った(笑)。サンプル機は意図した
通りに動くのだが、フロッピーの内容のやつをアセンブルしてマイコンに焼いて動かすとおかし
い。
しかも回路図が何枚もあって、もとのCAD回路図に鉛筆で書き加えた跡があり、サンプル機
と見比べても何か違う(笑)。こういう会社の仕事は受けてはいけない。どえらい苦労をする。
そして、自分がこのような問題で他人に迷惑をかけないために、バージョン管理や、コメントや、
内容が把握できるような書類を整理しておくように、心がけたい。いつ死んでも良いようにする
ぐらいの気持ちを持つのである。(そう思うけど忙しくてなかなか)
最初にいた怪社で、担当者が病弱で休みがちで、最後には出てこなくなり、私が引き継いだ
という事があった。机の引き出しを見ると、何やらメモがあった。まるで遺書みたいだ・・・。
この基板のどこをどう修正すべきとか、どういう問題点があるとか、引継の資料のようだった。
これはそれほど傷が深くなかったが、別の人がやっていた仕事はひどかった。担当者がいき
なり辞めたため、他の人が引き継いだ。残されたのは、ジャンパー線だらけの基板・・・・・・
回路図と照らし合わせてもよくわからない。謎の改造がなされていた。
その人は、泣きながら?配線を1本ずつほぐしながら回路図を直していった・・・周囲のみんな
からは、同情する言葉が出ていた・・・。
ところでアセンブラのソースリストには、コメントが重要だが、その書き方にも気を配りたい。
INC HL と書いた横に ;HL+1 というアホなコメントを書いても無駄である。たとえば、
読み出しのアドレスを1つ進める、というふうに書く。低級ではなく高級な書き方がわかりやす
い。
■2004年5月26日〜 追記
平日は、なかなか忙しくて、こっちの仕事が全然進まない。目を通さなければならない
書籍もたくさんあるが、疲れて帰ってきて、寝そべって読んでいたらいつの間にか寝てい
た。目が覚めたら早朝5時で、外が明るくなりかけていた。つけっぱなしで寝て、電気代が
もったいない。
先週の土曜から、歯科に通院している。下の親しらずが虫歯になっていて、その治療と
歯石を取るなどのメンテ?なのだが、親しらずは抜くべきと言われた。近所の歯科の先生
の手には負えないようで、「市民病院に、大学のベテランの先生が来たときに抜いてもらい
ましょう」との事。
おいおいおい、ちょっと待ってくれ。現状、痛くもかゆくもないんだから、抜く必要も無い
と思う。8年ぐらい前に、上の親しらずを2本抜いたが、これは相当なダメージだった。
痛すぎた。精神的にも痛い。やはり今回は、温存という事で相談してみようと思う。
上の2本の時も、最初は虫歯になっていて、治療をしたがまた悪くなった。確か、変な
方向に生えていて、口の内側を傷つけるという理由もあり抜いたと思う。記憶があいまい
だが・・・。奥歯は虫歯になりやすいから、いずれ抜く事になるとは思う。
きのう、久しぶりに秋月電子の通販で注文した。例のトラ技の付録基板のベースボード
というのがあったので一緒に頼んだ。
よく思い出してみれば、H8シリーズで今回の開発物件を作る手もあると思う。何が良い
かというと、2つのクリスタルが付けられる事。たとえば片方は10MHzで、もう片方は
32.768kHzという具合。電池動作でかなり消費電流を抑えられるのではなかろうか?
と思うが、まだよく調べていない。
私は最近PICばかりやっているが、H8/3048Fもよく使っていた。たとえば聴覚障害者
用のリモコン装置を開発していた。電池動作だったが、うまく消費電流を落とせなくて、
ニッケル水素単4×4本で24時間がやっと、だったと思う。
なにしろ3.3V版のH8が入手できなかった。5V版しか無い。クロックを落として、電圧
も低めたら、と後から思ったけれど、後の祭りである。
今回の開発物件は、今さらCPUを変えたくないので、H8の採用は見送るが・・・別の
物件の開発時に、選択肢として選ぶ事ができるよう、いろいろと調べたり、試しに使って
みて勉強しておこうと思う。
それにしても日立(ルネサス)のH8のデータブックは分厚い。さっきE7エミュレータの
マニュアルをダウンロードしたが、408ページもあった。H8/3048Fのも、分厚かったの
を思い出す。日立とか三菱と言えば、重厚長大のイメージがあったりする。「モートル」と
か、造船とか。データブックも重厚長大か?(笑) ちなみに三菱と言っても、電機や重工
など色々ある。造船は重工だと思う。エアコンは電機と重工とそれぞれある。
机の上にデータブックを広げて参照しながらコーディングしたりしていたが、何かの拍子
にひっかかって、バサッと床に落ちたりして厄介だった。それに読みにくい。関連項目を
1カ所にまとめておけばいいのに、あっちこっちめくりながら情報を拾っていくのが大変だ
った。
おまけ
このキムチの容器は、ネジなどの部品を保管するのにちょうど良いです。
でも、どんなに洗っても匂いがとれなくて、クサイんだよねえ・・・(笑)。
ちなみに、私は冷蔵庫にキムチを常備していて、酸っぱくならないうちに食べきる
ようにしています。上の写真の容器は、毎月1〜2個のペースで増加しています。
■2004年6月17日〜
いろいろバタバタ忙しくて、気が付いたら1ヶ月ぐらいすぐに経過してしまう。夜遅くに
帰ってきてから、パソコンに向かうのは楽では無い。
それと、最近ちっとも非通知電話がかかってこなくなった。この前、無言でガチャ切りを
2回連続したせいか、リストからはずされたのかもしれん?
全然かかってこないのも面白くない(^_^;)
■2004年7月18日〜
ナンバーディスプレイ対応のFAX電話機を譲ってもらったので、これで問題解決
かと?(笑)
「非通知」と「公衆/表示圏外」の着信の場合、「この電話はおつなぎできま
せん」というような音声が流れて、ベルは鳴りません。
これで非通知の迷惑電話に悩まされる事は無くなると思いますが、電話関連機器
を作りたいという自分の希望は無くなりません。
ゴミにしかならない「チラシ」の対策方法も検討中です。いま、私の頭の中には
「妄想」が駆けめぐって・・・・・・私の闘いは永遠に終わらない・・・・・・。