ハイブリッド回路
2025.02.23
アナログの電話回線は2本の線だけで電源供給と音声の送受信をしているわけですが、どうして2本で可能なのか。

自分のマイク~(電池と回線)~相手のスピーカー
そして、相手のマイク~(電池と回線)~自分のスピーカー
という結線をすれば4本必要になる。アースを兼用しても3本。



それは、ハイブリッド回路(2線-4線変換回路)またはそれと同等の物を使っているからです(上図)。
黒電話の時代にはコイル(トランス)で実現していました。昔のモデムはオペアンプで組まれていて、いまの多くの電話機はICに内蔵されています。

基本的にはブリッジになっていて、これが平衡している限り、自分のマイクが拾った声は自分のスピーカーには聞こえない仕組みです。

左向きの三角は自分のマイクから、右向きの三角は自分のスピーカーへつながっています。

自分の声は2本の抵抗を通ってトランス経由で外線へ出ていきます。
スピーカーにつながるオペアンプの入力+,-には自分の声が入り、±0で自分の声は聞こえないわけです。(差動増幅)

600Ωと書きましたが、現実の回線は必ずしもそうなっていないので、自動的に調整する仕組みがあるようです。この図は、あくまでも原理的に簡略化しただけです。

中学生の頃に学校で組み立てていたインターホンは、フラットケーブルで親機・子機を接続するもので、個人的には「ダサい」代物でした。なんで2本じゃないのかと。フラットケーブルなんか引き回したくないです。見た目も悪いし・・・。

でも中学生の製作品でオペアンプとか難しそうなものは不向きだろうという見方もあろうかと思います。

このハイブリッド回路、会社に入ってからモデム等の設計をする機会が有り、試作してみることになりました。
それでトラ技か何かに載っていた物を真似して2台作り(通信テストなので2台必要)、実験を始めてみたところで、
その当時は何もわかっておらず見様見真似だけで精一杯でした。当然、調整の仕方もよくわかりません。もたもたしていたら、
上司から「お前わかってないだろ」って言われてゴミ箱ポイでした。

それでとにかく「作り直せ」と言われて、作り方も「なってなかった」んでしょうね。アースの引き回し方ひとつでも、まだまだあの頃は未熟でした。

学校を卒業して数年だったっけ。ユニバーサル基板の電源ラインの引き回しだって、細いラッピング線をむいたやつで全部引いていました。いま思えばおかしな話。細すぎだろって。
ずっと一人でやってきたから、知らなかったのです。学校では習わなかったし。

電源とアースには太めの銅線を使って、信号の流れを考えた部品配置で作り直し・・・これでようやく実験を始めることができた思い出があります。

これが今も続いている製品シリーズの基礎になりました。
猫の日
2025.02.22
腹を見せてゴロン、さあ、モフらせてやるぞ・・・

そんな誘いにのって、手を出した瞬間

ガシッと掴まれて、カミカミされてバリバリされて、

ケリケリケリッと、ネコキック

もう飽きた、いらんと言わんばかりに去っていく。

猫ってそんなもの。

だが、そこがいい。
考え方を学ぶ
2025.02.21
プログラムの組み方も人それぞれの考え方が反映されます。

組織の中では、属人的ではない方が望ましいかもしれませんけど。(作った人がいなくなったら保守できない・・・では困る)

お手本や周囲の仲間からの学んだことが基本になっていると思います。

Z80を覚えたのは高校生の頃、同じクラスの友人に教わりながらマシン語でプログラムを作っていました。

結果がわかりやすいのは画面表示の操作です。見てわかります。

たとえば白黒反転(MZ-2000だから緑白か)してみるとか。逆さまにするとか。鏡像にするにはどんなふうにプログラムを作るか。
画面の一部を切り抜いて、指定した位置へ移動させるには。
スクロール(タテ、ヨコ)をするには。

最初はループの作り方も知らなかったのですが、試しながら徐々に覚えていきました。

自分なりに考えて、画像を裏返し(鏡像)にしてみようと思い付きました。
それには1バイトごとにビットをひっくり返す必要があります。

最初に考えたルーチンは恥ずかしくて見せられたもんじゃありません。
BIT命令、SET命令、RES命令を使って、ビット0が0だったら結果レジスタのビット7を0にする。1だったら1にする。こんなふうに8ビット分、くそまじめに記述しました。

でも・・・よく考えてみると、結果を入れるレジスタを最初にクリアしておけば、0は書かなくて良いのです。1だけ見て処理すれば良いことに気づき、プログラムは短くなりました。

もう、これ以上考えることはない。自分なりに考えても、これ以上シンプルにはできないはずだ。

ところが友人は、シフト命令を使ってキャリーフラグ経由で1ビットずつ移すプログラムを作りました。まさに目から鱗でした。
私は、そういう使い方を思いつかなかったからです。命令表でキャリーフラグを巻き込んでシフトする命令があるのはたぶん知っていたはずです。でも、使い方(応用)を思いつかなかった。

コピー元のレジスタを左にシフト、最上位のビットがキャリーに入る。これをコピー先のレジスタにキャリーから入れて右にシフトする。この処理を8回繰り返せば1バイトの処理が済む。

でも、世の中にはもっと他の考え方もありました。
あらかじめ、反転データのテーブルを作っておくのです。あるいは、初期化時にRAM上へ展開するのでも良いでしょう。
こうすればアドレスの計算だけで速く変換できます。その代わりメモリを食います。

さらに考えると(考えるまでもないが)そのテーブルを、きりの良いアドレスに配置すればアドレスの計算も簡単かつ速くなるわけです。

これ以上は有るかと言うと、プログラムでやれる方法は思いつきませんが、ハードウェアを使ってよいのなら特定のアドレスなりポートに書くと(配線がクロスしていて)別のアドレスかポートから反転データが得られる、というのは可能です。(あくまでも、CPUにそういう命令がない場合の話です)

- CafeLog -