ハードウェア情報


NOTゲート

論理回路のNOTゲートは、PMOSとNMOSで構成されている。以下は大雑把な図。

入力が0の場合は、電源電圧=出力となるので、1となる。

入力が1の場合は、アース=出力となるので、0となる。

メモリ その1

詳細

【コンピュータ】メモリ その1
まずはメモリはコンピューターを構成するどの部分なのかについて。 コンピューターを構成している装置は大きく分けて5種類ある。

そのうちの「制御装置」と「演算装置」は大抵の場合はCPUの中に入っていて、 全ての装置は「BUS」という呼び名の線でCPUと繋がっている。 メモリは「記憶装置」を構成する部品の一つで、「主記憶装置」や「メインメモリ」などと 呼ばれている。

メモリの中にはたくさんのbitを保持する回路が入っていて、bitを束ねた「語」という グループ単位で読み書きに応じている。1語のbit数は4bitや8bit、16bitなど様々である。
ルネサス社のこのRAMの情報を見てみると、「256Kb 低消費電力SRAM(32k word × 8bit)」 と書いてある。「Word」というのが語のことである。

ここに書かれているのは「総ビット数は256kilo、1語8bitで32kilo語を持っています」という意味。

「語」という言葉に馴染めないと思うので、以降はグループという言葉を使う。
その一つ一つのグループには「アドレス」という番号が割り当てられているので、 メモリを読み書きする時はアドレスを伝える必要がある。

また、一度にグループ単位で処理をするのでグループの中の1bitだけ読み書きすることはできない。 蛇足であるが、CPUが1アドレス8bitでメモリにアクセスするからといって、 そのCPUに繋がっているメモリも1アドレス8bitで管理しているとは限らない。


メモリ側の小難しそうな話は後回しにして、CPU側から見たメモリの話に移る。
CPUはメモリから命令を逐一取り出して実行している。命令、つまりプログラムは メモリに入っているわけだ 。
OSを使わないプログラムは大抵はメモリ上のどこに置いても良くて、 多くの場合はアセンブルするときに配置する番地を指定する。

CPUには現在メモリのどこの命令を実行しているのかを指しているレジスタがある。 それが「PR」プログラムレジスタだ。CPUによっては「PC」プログラムカウンタや、 「IP」インストラクションポインタと呼ばれたりもする。 さっき少しだけ、OSがプログラムを実行する時の話を出したが、 OSが起動する前、電力が供給され始めてCPUが最初に動き出した時はどこの命令から 実行を始めるんだろうか?
CPUが最初に実行を開始するアドレスの指定方法はCPUの種類ごとに違うのだが、おおよそ2種類。 1つ目は決められたアドレスからスタートする方式で、例えばIntelのCPU 8086は0xFFFF0番地の 命令から実行されるようになっている。

もう1つの方法は、最初に実行する命令が置かれているアドレスを指定のアドレスから読み込んで プログラムレジスタに代入するタイプである。 例えば、モトローラのCPU MC6809は、0xFFFE番地と0xFFFF番地に入っている値を取ってきて それをプログラムレジスタに代入してスタートする。

どちらの方法でもCPUが動き出した時にはメモリにプログラムが入っている必要がある。 8086ではメモリの0xFFFF0番地にプログラムが入ってないといけないし、 MC 6809 なら0xFFFEと0xFFFF番地にアドレスが入っていないといけない。 ちなみに、最初に実行されるアドレスやその値を入れている場所は 「リセットベクタ」 そこから実行される、最初に動き出すプログラムを「ブートストラップ」や 「BIOS」 などと呼んでいる。
パソコンのBIOSは、補助記憶装置からOSなどのプログラムをメモリに読み込んで それの実行を開始したりするのだが、 炊飯器や電子レンジのような単機能の機器では、ブートストラップがメインのプログラムに なっていることが多く、そういったOSを使わないプログラムは 「ベアメタル」 などと呼ばれる。

ところで、CPUにリセットベクタやブートストラップを提供しているのは誰だろうか? それは「ROM」リードオンリーメモリである。
ROMにはいくつか種類があるが、基本的にはどれも

1.電源を切っても内容を忘れない 2.内容を書き換えられない もしくは簡単には書き換えられない 3.書き込める回数に上限がある 4.動作が遅くて値段が高い
という特徴を持っている。
電源を切っても内容を忘れないROMの中にプログラムが入っているから、 電源ONの直後からCPUが動き出せるわけだ。
(読み出しのみで書き換えができないからRead Onlyなのだが、最近は書き換え可能な ROMの品種も多くなっており、名が体を表していない)
最初に動き出したブートストラップは補助記憶装置などに入っているOSや アプリケーションをメモリに読み込むのだが、その読み込み先に使われるメモリは 「RAM」 ランダムアクセスメモリである。
(「ランダムアクセス」 というのは「必ずしも連続する番地でアクセスしなくても良いですよ」 という意味だが、多くのROMもランダムアクセスが可能なので、この言葉も特徴を表していない)



RAMにもいくつか種類がある。基本的にはどれも以下の特徴を持つ。
1.電源を切ると内容を忘れる 2.内容を簡単に書き換えられる 3.書き込める回数に上限がない 4.動作が速くて値段が安い
(最近は電源を切っても内容を忘れないRAMが登場したりして、 一般の人から見たらROMとRAMの違いが分かりづらくなっている)
起動時から必要なものはROMに格納。それ以外は補助記憶装置から都度RAMに読み込むのが普通である。

さて、ROMもRAMもCPUと繋がっているが、CPUはこの2種類のメモリを区別していない。
ROMもRAMも、CPUから見ればアドレスを使ってアクセスする「値置き場」に過ぎない。


それと、アドレスが差す場所にROMもRAMも繋がっていないことがある。 パソコンで「メモリを増設する」なんてのがそれで、増設する前のアドレスにはメモリが 繋がっていない状態である。
その何も繋がっていないアドレスにアクセスしたらどうなるか?は、 エラーになって動作を停止するCPUもあるし、知らんぷりして実行を続けるCPUもある。 高級なOSであれば、メモリの無効なアドレスにアクセスしたプログラムは停止される。
CPUがROMとRAMを区別していないという話が出たところで、メモリも「値」と「命令」を 区別していない、という話もついでにしておく。
メモリから見れば、保持している値がCPUの命令なのかデータなのかは分からない。
CPUから見ても、メモリ上の値がデータなのか命令なのかは値だけを見ても判別はできない。 判断できるとすれば、「実行しようとしてメモリから取り出した時は命令」それ以外は 「値」である。たとえ、同じ番地に入っている値であっても。

現在のパソコンで使われるようなCPUでは、データと命令はメモリ上で分けて区画で 管理するようになっていて、

命令の区画にストアやロードをしようとしたり、データの区画にジャンプやコール命令で 移動しようとすると、プログラムが強制停止されるようになっている。

ここで注目して欲しいのは、命令とデータの区別は「区画」で判断しているというところ。 その理由は、CPUは値だけ見ても命令とデータの区別ができないからである。 GR0に代入された33024がRET命令なのか、33024円のようなデータなのかはCPUには判断できない。
※「データ実行防止」や「NXビット」で検索すれば色々な防止方法がヒットする

プログラムの書き換えを防止する機能を持たないCPUで、プログラム書き換えに対処する方法が いくつかある。プログラムを書き換え不可能なROMに配置するのもその一つ。

特殊な話はここまでにしておいて、
メモリと関係深くCPUが命令レベルでサポートしているデータ構造「スタック」 の話に進む。 スタックというのは「積む」という意味で、IT業界では「最後に積んだものから先に取り出す」 という意味で通っている。人間の世界でいえばパン屋のトレイに例えられる。

使う人は上から順に取っていって、新しいトレイは一番上に置かれるので、最初に置いた 一番下のトレイは最後に取り出されるようになっている。 コンピュータのスタックの動作もこれと同じである。 スタックに積むことをPUSH、 取り出すことをPOPまたはPULLと呼ぶ。
このスタックの恩恵で実現できているのがサブルーチンなので、 スタックを使ってどうやってサブルーチンを実現しているのかを見ていく。
CPUはその前の命令が何だったのかなんて知らないので、必要ならその結果をどこかに保存する。 例えばCMPLなどの比較命令がそれで、比較した結果をZF(ゼロフラグ)やSF(サインフラグ)に 記録しておいて、後の命令でその時の結果が分かるようにしている。
であれば、サブルーチンからRET命令で戻れるということはどこかにその情報が保存されている ということである。その保存先はスタックで、戻り先を保存しているのはCALL命令である。
多くのCPUにはSP(スタックポインタ)という、メモリ上の番地を指しているレジスタがある。

このSPの値がどのように変化するのかと、そのSPが指す位置の値がどう変化しているのかを トレースして細かく見ていく。
スタックの話をする時はメモリダンプと呼ばれるものを使った方が視覚的に分かりやすいので、 メモリダンプを併用していく。

右の図のように、メモリのアドレスとその横に値などを 縦書きしたものがメモリダンプである。 このプログラムをアセンブルした直後のSPは65534番地を指している。 分かりやすいようにSPが指している場所に三角マークをつけておく。

今、スタックポインタが指している所には65535という値が入っている。 これは私たちが設定した値ではないので気にしないでおく。
さて、まず最初のコールを実行するとさっきまで65534だったSPが1つ減っている。

そして65533番地には2という値が入っている。さらに0003番地の命令に移動している。

これはCALL命令がSPを1減らし、SPが示す番地に戻り先の番地を格納した。 つまり、スタックに戻り先をPUSHしたということ。 そしてその後0003番地にJUMPした。
次のCALLを実行すると、同じようにCALL命令が戻り先をPUSHした後、0006番地にJUMPした。

そして次のRETを実行すると、SPが1つ増えた後に0005番地に移動した。

これはRET命令が、SPが示す番地から戻り先の番地を取得してPRに設定し、SPを1つ増やしたからである。 つまり、スタックから戻り先をPOPした後JUMPしたということ。
以降のRETもその繰り返しで、SPが増えて0002番地に移動。 最後のRETでプログラムは終了した。

これで「なぜ呼び出し元に戻れるのか?」「ネストしていても順番に戻れるのか?」 の謎が解けたし、なぜスタックという名前が付いたのかも納得できたんじゃないか。

メモリ その3

詳細

【コンピュータ】メモリ その3
CPUとメモリを繋げているバスの話をする。
「バス」とは、回路を結ぶ通信線や配線のことで、今回はCPUと他の装置を繋いでいる 一般的なバスを取り上げる。 なぜバスの話をするのかというと、記憶装置だけではなく入力装置や出力装置の話をする時に 説明が必要になるからだ。
まず最初にこの図を見てほしい。

3種類の線がCPUとメモリを結んでいる。
アドレスバスというのは、CPUがメモリにアクセスする時に使うあのアドレスのこと。 「今からどのアドレスにアクセスします」ということをメモリに知らせるための線である。 線の数はアドレス幅、例えば最大64KiByte、つまり16bitのアドレスにアクセスできるCPU なら 16本の線がメモリに繋がっている 可能性がある。

この画像は、モトローラのMC6809という8bitのCPUの足、通称「ピン」の配置図である。 A0からA15までの16本のピンがある。これがアドレスバスの信号が出ている所。 AはAddressのA。ちなみにこの業界では、アドレスの範囲のことを「アドレス空間」 と言ったりする。

ところで、上で「可能性が高い」と言ったのは、アドレスが16bitなら線も16本とは限らないからだ。 例えば64bit CPUでは64本の信号線が出ているかというと、そんなことはない。
64bitで表せる最大数は2の64乗-1だから16EByte、16384PByteのメモリを扱えそうだけど、 実際にそれだけのメモリを物理的に搭載することができない。
仮に1枚1PByteのメモリが存在するとしても、1万枚も挿す場所はないだろう。
つまり、広いアドレス空間を持っているCPUではアドレスのbit数と信号線の数は一致しないことがある。



次のデータバスは、データを送受信するための信号線である。
CPUがメモリから読むときはメモリがデータバスに信号を出して、 CPUがメモリに書き込むときはCPUがデータバスに信号を出す。


MC6809にはD0からD7の8bit分のピンがある。DはDataのD。



次はコントロールバスだ。
CPUはメモリからデータを読み出したり書いたりするから、 読もうとしているのか、書こうとしているのかをメモリに教えないといけない。

MC6809では32番ピンのR/Wという信号がそれだ。
ちなみに、R/WのWにオーバーラインが引いてある。 これはWが「アクティブロー」であることを示している。
電圧がHIGHのときに1やON、つまりそのピンの機能が有効、 アクティブになるものは「アクティブハイ」と呼ぶ。
その逆で、電圧がLOWのときにアクティブと見なす「アクティブロー」というものもある。

次にメモリ側のピンを見てみよう。

この図はルネサスエレクトロニクスの32KiByteSRAMのピン配置図である。
アドレスバス用のピンはA0からA14までで、A15が無いことに注目して欲しい。 これは、このメモリの容量が32KiByte、つまりアドレスは0から0x7FFFまで、15bitで十分だからだ。
データバスはDQ0から7までちゃんと8bit揃っている。

さて、CPUにはあったR/Wピンが無い。
このRAMの場合、データを読み出したい場合はOE#、書き込みたい場合はWE#というピンを使う。 #は「アクティブロー」の意味である(業界で統一して欲しい)。
こういったR/Wピンを持たないメモリは、変換回路を介してCPUと繋げる。

ROMのピンも見てみる。

こちらはマイクロチップの「27C128」というEPROMのピン配置図である。
サイズは16KiByteなので、アドレスは0~16383、16進数だと0x3FFFまでだから、 アドレスバスもA13までの14本になっている。
読み出し用のOEピンはあるけど、書き込みを支持するWEピンが無い。

さて、ここまで出てきたRAMとROMのチップをCPUのバスにつなげても動作しない。
RAMもROMもアドレスは0番地から始まるからだ。


つまり、CPUが0番地を読みだそうとすると、RAMもROMも自分の0番地のデータを データバスに出力するので、CPUは正常なデータを受け取れない。 



この問題を解決するのがRAMやROMにあるCS(チップセレクト)CE(チップイネーブル)と呼ばれる信号で、この信号が アクティブのときだけチップは反応してくれる。

ということで、メモリから正しいデータを取り出すための配線を 考えてみるんだけど、どのメモリチップにアクセスするかを決める判断材料って 何があるだろうか?アドレスしかなさそうだ。
そこでまずはどのアドレスに対してどのメモリチップを動かすのかを決める。
ここで出てくるのがメモリマップだ。

ここではRAMを0番地以降に、ROMを0xC000番地以降に割り当てることにする。
RAMの容量は32KiByteだから、0x0000~0x7FFFまで、ROMは16KiByteだから 0xC000~0xFFFFの空間に割り当てられて、0x8000~0xBFFFは空きになる。

チップに割り当てるアドレスが決まったので、アドレスが0x0000~0x7FFFならRAMのCSを、 0xC000~0xFFFFならROMのCSをアクティブにする回路を作る。
ちなみにその回路は 「アドレスデコーダ」と呼ばれている。 アドレスデコーダはメモリチップごとに作るのが普通なので、今回はRAM用とROM用の二組を作る。

まず、RAMのアドレスは0x0000~0x7FFFFなので、アドレスのMSBが0のときはRAMのアドレス ということになる。

MSBだけで判定できるなら、CPUから出ているアドレスバスのMSB、つまりA15を そのままRAMのCSに繋げれば良さそうだ。RAMのCSはアクティブローだから変換も要らない。

ROMのアドレスは0xC000以上だから、アドレスの上位2bitが1だったらROMのアドレスということ。

となると、アドレスバスのA14とA15の両方が1のときに0を出力すればよいのだから、NANDを 使えば良さそうだ。

これでアドレスデコーダが出来た。RAMの方は回路要らなかった。


配線の最後はメモリチップに繋げるアドレスバスの信号を確認する。
RAMはA0~A14、ROMはA0~A13までのピンをそのままアドレスバスに繋げれば良さそうだ。

さて、ここでバスの動作を簡単におさらいしよう。 まずは、CPUがメモリからデータを読み込む動作、業界では「リードサイクル」って呼んでいる。

1. CPU がアドレスバスに信号を出力する 2. CPUがコントロールバスのR/WにRの信号を出力する。 3. 対応するメモリがデータバスに出力する。

CPUがメモリにデータを書き込む「ライトサイクル」では、
1. CPU がアドレスバスに信号を出力する 2. CPUがデータバスに出力する。 3. CPUがコントロールバスのR/WにWの信号を出力する。 4. 対応するメモリがデータを記録する。

メモリ その4

詳細

【コンピュータ】メモリ その4 メモリ境界/ROMとRAMの種類 前回の最後で取り上げた「アドレスを半分にする」ということを記載する。
さて、アドレス半分のところの話は図で書くとこうだ。

データバスが16bitの普通の16bitCPUで、メモリチップは偶数番地と奇数番地に分かれている。
この結線だとアドレス0から読むと0x3412が返ってくる。これは問題ない。

しかし、アドレス1から読んでも0x3412が返ってくる。 0x5434が返ってくるのが正解じゃないの?

これには「メモリ境界」や「境界整合」、「メモリアライメント」 、 「バウンダリ」などと呼ばれる仕様が絡んでいる。
まず「境界」の話。データバスが16bitなら、16bitが境界になる。太線で区切っているところだ。

CPUがそこを跨いでアクセスしようとした場合の仕様が大きく2つある。
1つ目は、CPUやOSが頑張って0x5634を返してくれるケース。 メモリを2回アクセスして、0x3412から0x34を、0x7856から0x56を取り出し、 合成して返してくれる。
メモリに2回アクセスするから遅くなるし、CPUの構造も複雑になるが、 昔のプログラムが改造なしにそのまま動いてくれる可能性が高まるというメリットがある。

もう1つはそれを許さないケース。境界を跨ぐアドレスを指定するとCPUがエラーとみなして 実行を止めてしまう。UNIX系のOSでCやC++などで開発している人なら経験する。
境界を跨ぐデータ構造を設計してしまうと、境界跨ぎを許すWindows側では問題ないのに、 許さないUNIX側でエラーが出てしまう。

今回は、前回出てきたROMとRAMの種類を挙げていく。

ROMの種類

ROMは大きく分けて、書き込みできない「マスクROM系」と、書き込みできる「PROM系」に別れる。
マスクROMは、工場で作られるときにデータが書き込まれる。 実際は書き込むんじゃなくて、データに合わせた回路で作られるので作られた後は データを変更できない。ゲームボーイアドバンスのROMカートリッジに入っているROMがこれ。

データを元に回路設計しないといけないし、もし間違いがあったらROMをを作り直して 交換するしかない。しかし、他者は変更できないし、生産数が多ければコストを下げられる。 データの保持期間も長い。

PROMのPはProgrammableの略で、書き込めるという意味である。
OTPROMは、1回しか書き込めない。OTは「One Time」の略。 初期のPROMはOTPROMであったから、OTPROMのことをPROMと呼んだりする。
高電圧で回路を壊したり、電流を流してヒューズを切断するという製品がある。

EPROMは消せば彩度書き込める「Erasable PROM」。
UV-EPROMは紫外線でデータを消去する。
EEPROMは、「Electrically Erasable」で、電気でデータを消去する。
フラッシュメモリはEEPROMの仲間で、パソコンのBIOSの保管先やSSD、 USBメモリにはだいたいフラッシュメモリが使われている。

RAMの種類

ほぼDRAMとSRAMに分類される。いずれも電源を切るとデータが消える性質を持っている。
電源を入れたときは内容は不定なので、「全データがゼロになっている」ということはあり得ない。
記憶装置では初期化や書き込みしていないアドレスのデータは不定である。

DRAM(Dynamic RAM)はキャパシタ、いわゆるコンデンサに電荷を貯めてデータを記録している。

後述のSRAMよりも構造が単純なため、チップあたりの集積度が高くて値段も安い。
しかし、キャパシタは徐々に電荷が漏れていくため、定期的に充電(リフレッシュ)が必要である。 さらに、データを読み出すと電荷が消えるため、読みだしたら再書き込みが必要という手間がある。

パソコンで主流のDDR SDRAMや、GPUに乗っているGDDR SDRAMもDRAMである。

DDR SDRAM(Double Data Rate Synchronous Dynamic RAM)

GDDR SDRAM(Graphics DDR SDRAM)

SRAMのSはStaticの略で静的という意味。
SRAMはフリップフロップという回路、例えるなら 勝手に切り替わらないスイッチでbitを記憶するため、DRAMのようなリフレッシュは不要である。
SRAMを構成する回路というのは、CPUを作っている回路と同じなのでCPUと同じプロセスで 同時に作ることが出来る。なので、CPUの中のキャッシュメモリはSRAMで出来ている
1bitを記録するために回路が沢山必要になるため、DRAMほど集積度を上げられない。 DRAMよりも記憶容量が少なく、値段も高い。

I/O

詳細

【コンピュータ】I/O(アイ・オー)
キーボードやマウスは入力装置。プリンタ や モニターは出力装置である。 CPUと装置がどのように繋がっているのかを記載する。
典型的なコンピュータでは、装置がメモリと同じバスに繋がっていて、メモリにアクセスする要領で機器と通信している。

この、機器と情報をやり取りする窓口をメモリと同じバスに繋げる方式を 「メモリマップドI/O (Memory Mapped I/O)」と呼ぶ。 IT業界では、窓口のことを「ポート」、機器と情報をやり取りするためのポートを「I/O ポート」と呼ぶ。
LEDを点灯させる「Lチカ」を例にして、LEDをどのようにCPUのバスに繋げればプログラムから点灯や消灯をさせることができるのかを追っていく。
メモリ3の動画で、ROMとRAMをCPUのバスに繋いだ。その話では0x8000から0xBFFFは空きにしていたので、 今回0x8000番地にLEDを1個だけ繋げて、0x8000番地に1を書き込むとLED が光り、 0を書き込むと消える回路を追加するという話にしてみる。

単純に考えると、1で光るようにするのならデータバスのD0にLEDを繋げばよさそうである。

そのような配線をして以下のプログラムを実行すると、0x8000番地に一切アクセスしてなくても LEDが点滅もしくは点灯する。

LOOP LAD GR0, 1 LAD GR0, 0 JUMP LOOP
なぜ LED が点滅するかというと、アドレスを無視してデータバスのD0だけを見ているので、 常にD0のビットの状態をLEDが表示しているためである。
LAD GR0, 1
では、GR0に代入する「1」をCPUがメモリから受け取るタイミングがあるので、 その時にD0が1になってLEDが点灯。
LAD GR0, 0
では、「0」を受け取るタイミングがあるので、そのときにD0が0になってLEDが消灯する。

ということで、0x8000番地が指定された時だけデータバスを使わなきゃいけなさそうなので、 アドレスデコーダが必要になる。
アドレスバスが0x8000のときに1を出力するアドレスデコーダがあるとして、 このように繋げてみた。

0x8000の時にAが1に、BはD0がそのまま入ってくるから、 0x8000の時はD0の状態がLEDに反映されるようになったはず。
この状態でさっきのプログラム
LOOP LAD GR0, 1 LAD GR0, 0 JUMP LOOP
を動かすと、0x8000番地にアクセスしていないのでLEDは消え放しになった。
では次は、0x8000番地に1をストアしてLEDを点灯させた後、同じ場所に移動し続ける 「無限ジャンプ」をすれば、LEDは点灯し放しになるか?
LOOP LAD GR0, 1 ST GR0, #8000 ;LEDを点灯 LOOP JUMP LOOP ;点灯し放しにするためのループ
残念ながら、一瞬だけLEDがついた後は消灯しっぱなしになる。 無限ループ実行中はアドレスバスは0x8000にならず、AND回路が0を出力するからである。

プログラムをこのように変えて、常に0x8000番地に1を書き込み続ければ点灯し放しに 見えるようにはなる。
LAD GR0, 1 LOOP ST GR0, #8000 ;LEDを点灯 JUMP LOOP ;点灯し放しにするためのループ
しかし、これでは別の処理が出来ない。
ではどうなって欲しいか?
0x8000番地にストアされたときは、そのときのD0の値を記憶して、それをLEDに反映して欲しい。
というわけで、1bit分の記憶回路を使って0x8000番地にストアされた値を覚えておく回路に変更する。 この記憶回路は1bitだけ記憶できるSRAMと思って良い。

この回路で、プログラム
LOOP LAD GR0, 1 ST GR0, #8000 ;LEDを点灯 CALL WAIT ;0.5秒待つ LAD GR0, 0 ST GR0, #8000 ;LEDを消灯 CALL WAIT ;0.5秒待つ JUMP LOOP
を実行すると、点滅するようになる。出力装置の完成だ。 ここで使った1bitを記憶する記憶装置は「ラッチ回路」と呼ばれていて、 基本的な原理はSRAMと同じである。「ラッチ」とは、「その時の状態を覚える」という意味である。

次は出力回路を考える。0x8001番地を使って、スイッチが押されていれば1、 押されていなければ0が返ってくるようにする。

入力ではその時の値を返せば良いのだから、ラッチ回路は要らなさそうだ。 しかし、スイッチをそのまま D0に繋ぐと、アドレスに関係なくD0の値がスイッチに左右されてしまう。


なので、指定アドレス、かつ、R/WがRの時だけスイッチの状態をD0に流す回路を考えてみた。


しかし、この回路をつなげるとコンピュータが動かなくなってしまった。 原因は単純で、アドレスが0x8001のときはスイッチの状態がD0に出力されるけど、 それ以外のアドレスの時はD0に0を出力しているからだ。

やりたいことは、「アドレスが0x8001のときだけ出力したい」
もう少し具体的には、「0x8001以外のときはD0との接続を切断したい」だ。
こんなときに使う回路が「スリーステートバッファ」である。

この回路は、ゲートが1のときだけAの信号をBに出力して、ゲートが0のときはAとBの接続を切断して、 Aの信号がBに流れないようにできている。
スリーステートバッファを使って回路を作ってみたらこうなった。

指定アドレスかつ読み込みのときにゲートが1になるので、そのときだけスイッチの状態がD0に伝わる。
LD GR0, #8001 ;LSBにスイッチの状態
プログラムからはLD命令でスイッチの押し下げ状態が取得できる。

ちなみに、現在のOSではプログラムから直接I/Oにアクセスできないようになっている。 I/Oにアクセスするためには、OSが管理するデバイスドライバを経由しなければならない。 (理由は、同時利用の防止とセキュリティ確保のため)

パラレル通信

詳細

【コンピュータ】シリアル・パラレル通信。どうやってデータを送ろうか?送受信両方にコミュ力が必要。
通信方法はパラレルとシリアルがある。 まずは両方に共通する基本的なところから。
4bitある情報をどうやって相手に渡そうか。
4bitあれば0~15までの16個の値を表せるから、例えば 電圧に変換して、0は0V、15は15Vで表すという手がある。
受信側は電圧を検出して元の4bitに戻せばよくて、実際こういう通信方法もある。
8bitを0Vから255Vで表せばもっと多くの情報を一度に送れる...というふうにはならない。

255Vなんて電圧を扱うのは危険だし、一般家庭のコンセントは100Vだから255Vを作ってやる必要もあり、かなり無理がある。

じゃあ1Vをやめて0.4V単位にすれば最大102Vになるけど、それでも危険な電圧。
0.1V単位にすれば最大25.5Vになるけど、コンピュータの中で多く扱われる電圧は高くて12Vくらいだからまだまだ。
0.04Vくらいでようやく最大10.2Vに落ち着く...とはならない。

0.4Vの検出なんてのは難しい。 電気信号というのは距離が長くなると弱ったり、角が取れてなまったりもするので、 こういうアナログ的な方法はコンピュータの通信にはあまり向いてない。
ということで、コンピュータの通信では1回で1bitを、0は0Vとして、1は検出可能な程度に離れた電圧を使うことが多い。
1つの線で一度にたくさんの値を表現するのは難しい。

今受信側は1を表す5Vをずっと検出しているんだけど、ビットの区切りはどこだろうか?

たとえ、1秒ごとに区切られているとしても、送信開始のタイミングが受信側にわからないと
受信側はタイマーなどを使ってテンポよくデータを読めない。
仮にお互いの時計が完璧に同期していて、送信開始時間を完璧に合わせられたとしても、
データが流れる通信線の長さ分だけ相手に届くのに時間がかかったりするから、
指定時間でタイミング合わせなんて不可能に近い。
1秒ごとに1bitの送信くらいならできそうだけど現実的じゃない。
ということで、一致しているとしてもデータを検出するためのタイミング合わせに時計は使えない。
じゃあどうするんだと言うと、送信側が「受信して」という情報を受信側に送れば良い。
実際に何らかの方法で送信側が合図を送ってるんだけど、それは個別に話していくことにする。

ということで 個別の話に入る。 パラレルというのは並列という意味で、 ここでは複数の線を使って同時に複数bitの送受信をする方式を指す。
4bitを送る場合は各bitごとに線が用意される。これをデータ線と呼ぶことにする。
それと、タイミングを知らせるための線を1本追加して、それをクロック線と呼ぶことにする。

さて、送信するときは、送信側はデータ線に各bitの情報を出力し、 次にクロック線に一定時間1を出力する。
クロック線に流す信号は「クロック」「クロックパルス」などと呼ばれる。

受信側はクロック 線を監視して、1から0になったタイミングでデータ線の信号を取り込む。 (0→1で取り込むものもある) この方法だと、受信側にタイマーは必要なく、送信側もパルス幅を毎回同じにする必要はないから タイマーを使わなくても送信できる。


さて、パラレル通信では1回に送るbit数が8なら8本、16bitなら16本のデータ線が必要になる。
64bitなら64 本必要になるので、bit数の増加に伴ってケーブルが太くなるし基板の面積も消費していく。
さらに良くないことに、速度が速くなってくるとパラレル通信はシリアル通信よりも距離に気をつける必要が出てくる。
例えばこんな配線で IC同士がパラレル接続されているとする。 bit3の線が一番長くなっていることが分かる。


ということは、bit3のデータは一番遅く届くと考えて、 それを考慮してクロックパルスを出力するタイミングを決めないといけない。 そんなこんながあって、基板上の通信用パターンはグループで同じ長さになるように調整されていることがある。
こんなうねうねしたパターンを見かけたことはないだろうか?


これはミアンダ配線と言って、他の信号線と長さを揃えるためにわざと長距離にしている。 それと、パターンのコーナーが若干ながら丸みを持っている。 直角に曲がっているパターンはほぼ見かけないだろう。 それは、直角の部分が直線部分より面積が広くなって電気的な特性が変わり、 特に高速通信に悪影響を及ぼすからである。

他にも、パラレル通信はデータ線が多いから隣のデータ線に干渉しやすい。(漏話、クロストーク)

そんなこんなで、現在では高速通信する機器同士の接続にパラレル通信が使われることは少なくなった。

これは、昔はどの家庭にも1本はあったケーブルで、マザーボードとHDDをつなげるのに使われていたIDEケーブルだ。


データ線が16本のパラレル通信、その他の信号やGNDも合わせて40本ある。
コネクタも大きくてマザーボードの面積を喰っていた。
結局、パラレルのままでは速度を上げにくくなったため、SATAというシリアル通信の規格にバトンタッチした。

シリアル通信

UARTというシリアル方式の代表的な通信がある。
UARTはパラレル通信のようなクロック線が無い代わりに、スタートビットとストップビットを データの前後に入れて、受信側にタイミングを知らせている。
しかし、クロック線を使用するシリアル通信もあり、線が1本追加になる。
I2CやSPI などがクロック線を持ってるシリアル通信である。
I2Cはデータ線が1本しかないので送信と受信は同時にできない。
SPIは分かれているので、送受信を同時に行える。
送受信が同時にできないことを「半二重」、出来ることを「全二重」と呼ぶ。



(以降は、クロック線を使用しないシリアル通信に限定して書く)
スタートビットを合図にするシリアル通信の利点は、クロック線が不要なこと。
受信側はスタートビットを検出したら、その時点からあらかじめ決められたタイミングで 信号を拾っていけば良い。 ちなみに、何かのタイミングで信号を拾うことを「サンプリング」や「ラッチ」と言う。



データ線1本で済むから、送信側はクロック線にクロックを出力するタイミングを考える必要はなく、 同じリズムでデータを送り続ければ良い。
その代わり、受信側にはタイマのようなリズムを刻む機能が必要になる。
ここで ストップビットがなぜ必要か考えてみる。なぜ8bitで区切るのだろうか?

その理由の一つは、送信側と受信側のタイマーそれぞれに誤差があるので、いずれは受信側が正しくない位置をサンプリングし始めるため。
例えばこの例のように、10ビットを超えたあたりから出鱈目な位置をサンプリングし始める。



これは通信速度が速くなるほど問題になる。なので、 最後までタイミングがずれていなかったことを確認するためのストップビットをつけたり、
毎回スタートビットを送ってサンプリングの位置を合わせている。

であれば、bitのONやOFFが変わったタイミングでサンプリングのリズムを合わせ直せば?と思うかもしれない。



しかしそれだと、LまたはHの状態が続くとタイミング合わせができなくてずれてしまう。
そこで8b/10bと呼ばれる変換方法が考えられた。
8b/10bは、8bitのデータを10bitに拡張して、拡張する際に同じ値が5つ以上並ばないようにする。
そうすることで、最悪でも4bitごとにサンプリングの位置を調整できるようになるので、 毎回スタートビットやストップ ビットをつけなくても済むようになる。



スタートビットがない方式というのもある。
メジャーな方法としては、データの最初に同期用のデータを数バイトから数十バイトほど付加するやつ。
たとえば、0xAAのような1と0が交互に並ぶパターンを続けて送った後に、0xABのようなパターンを1つ送る。
1と0のパターンでサンプリング位置を調整して、最後の1の連続で調整が間違っていないことを確認する。
ちなみに、この同期用のデータは「GAP」や「プリアンブル」などと呼ばれている。


シリアル通信はパラレル通信に比べて線の数を少なくできるからか、現在のパソコンで使われる通信方法は多くがシリアル通信である。
例えば、HDDやCD-ROMを繋ぐSATA。40本から7本に減った上に速度も向上している。
※SATA(Serial ATA)とは、コンピュータ本体とSSDやハードディスク、光学ドライブなどのストレージ(外部記憶装置)を接続する標準規格の一つ。


他にも、周辺機器をつなぐUSB、拡張ボード用のPCI Express、HDMIやDisplayPortもシリアル。

ところで、シリアル通信もパラレル通信のように線の数を増やせば、倍の量のデータが送れるのでは?
実際その通りで、USB 3.2 や PCI Expressはそうやって転送量を増やしている。

ここで簡単に USB の進化の流れを見てみる。
まずはUSB 2.0から。2本の線を使用して通信しているが、信号のバランスを取るために2本の線で1本分の働きしかできない。
これは以降のUSB 規格でも同じ。


送信と受信は同時にできない半二重なので、PCからUSB機器へ、USB機器からPCへと切り替えながら通信している。
転送速度は480Mbpsで、ケーブルの最長は5m。
ちなみに1本分の働きをする2本の線は「レーン」と呼ばれる。USB 2.0のレーン数は1である。

次に出てきたのが、USB 3.0。専用のピンを追加して、3.0で使用できる信号線は4本で2レーンになった。
それと、この時には8b/10bも採用して速度も5Gbpsにアップした。
その代わり、ケーブルの長さは最長3mと短くなった。


次の USB 3.1の線数は3.0と同じ。8b/10bを128b/132bに変えたりして速度は10Gbpsになったがケーブルの最長は1mと短くなった。
当時の技術ではコネクタそのままでさらなる速度の向上が難しかったのか、 次のバージョンでは別の方法が取られた。
次に出てきたUSB 3.2は、コネクタをType-Cに変更して通信に使う線を増やした。


Type-Cには8本4レーンの線があるので、送受信共に1レーン増やして2倍のデータが扱えるようになった。
速度は20Gbpsに向上。ケーブルの長さは最長1m のまま。
1レーンの転送量は10Gbpsのままなので、20gbps の速度を出すためにはPCとUSB機器の両端ともに Type-Cで接続して、送受信ともに2レーンを使わせる必要がある。

さてここまでだとシリアルが最良のような印象を受けるが、パラレルにも頑張ってるやつがいる。
それは、ネットワークの[1000BASE-T]である。
[100BASE-TX]ではシリアル通信であったが、[1000BASE-T]は様々な技術を盛り込んでパラレル通信になった。
まずは、送信と受信を同じ線で同時にやっている。
このおかげで、送信も受信も8本4レーンがフルに使える。
次に、クロストークは「クロストークキャンセラー」、信号の反射は「エコーキャンセラー」で対応している。
そして、最長距離は100mと長い。

bitの送り方はかなり特殊で、1回のクロックで9bitの情報が送れるようになっている。
普通に考えれば4レーンしかないので、一度に4bit、つまり 16個の値しか送れないが、
電圧に段階をつける方式を採用してるので、一度に多くの値を送れる。

UART(Universal Asynchronous Receiver Transmitter)

マイコンに組み込まれた機能の1つで,他のマイコンや周辺機器との通信規格。クロックを使用しない。

割り込み

詳細

【コンピュータ】CPU その3 割り込み(Interrupt)
割り込みとは、現処理を中断して規定処理を実行させるための仕組みのことで、 CPUに割り込みを要求すると、その時の処理を止めてあらかじめ登録しておいた処理を 実行させることができる。


人間に例えると、仕事をしているとトイレに行きたくなって、トイレを済ませた後に 仕事の続きに戻るイメージである。
用語で例えると、割り込みの名前は「トイレ割り込み」、「トイレに行きたい」が割り込み要因、 「トイレを済ませる」のが「割り込み処理」だ。
「トイレに行きなさい」は 「割り込み要求」で、英語のInterrupt Requestを訳してIRQという。
トイレに行きたくなっても「仕事の切りが良くなってからトイレに行く」ように、 CPUも実行中の命令を完了させてから割り込み処理に移るようになっている。

例えばこのCPL命令を実行中に割り込みが要求された場合は、CPLの処理が終わった後、 JZEが実行される前に割り込み処理に移る。
割り込み処理が終われば戻ってくるから、移動はJUMPではなく特殊なCALL、 特殊なサブルーチン呼び出しで行われる。

割り込みの種類は装置が要求する「ハードウェア割り込み」と、 プログラムが要求する「ソフトウェア割り込み」 の2つに 大きく分けられる。


ハードウェア割り込みは、ボタンが押されたとか、指定の時間が経過したことをCPUに知らせたりと 装置から要求というか「通知」される割り込みなので、いつCPUに要求されるかわからないケースが ほとんどである。
ハードウェア割り込みの偉大さを知るために、例として割り込みを使わない こんなプログラムを考えてみよう。
機器の制御を行うシステムで、コンピュータが動作していることを知らせるために0.2秒ごとに LEDを点滅させたいとする。
コンピュータにはダウンタイマという装置がI/Oポートに繋がっていて、そのポートに値を 書き込むと1ミリ秒ごとに1減っていって0になったらそれ以上減らないようになっている。
これを利用して、ポートに200を書き込んだ後このポートから読み出した値が0になるまで 待つことで0.2秒が経過したかを判断することにする。


LEDを点滅させるだけのプログラムを考えると、LEDを点灯させた後にダウンタイマポートに 200を書き込み、ダウンタイマポートが0になるまでポートを読んでチェックを繰り返し、 0になったらLEDを消灯させてダウンタイマに200を書き込んでポートが0になるまで チェックを繰り返す。
これを繰り返せばよいのだから、このようなサブルーチンを作って機器の制御処理から 時々呼び出せばよい。
では、機器を制御するメインプログラムをどう作るか考えてみよう。


メインの処理から時々BLINKサブルーチンを呼び出せば良いから、処理のループの中で BLINKを呼び出すようにしてみた。
しかしこのプログラムを実行するとLEDは点滅はするけど点滅のリズムが一定じゃないので 見ていて気持ち悪い。

各処理の合計時間が0.2秒以上になるのが原因だと思うので、BLINKを呼び出す回数を増やしてみた。 さっきよりは少しマシになったけど、それでも点滅のリズムが狂うことがあって気持ち悪い。 調べたら時々「処理C」に時間がかかることが判明したので、処理Cを呼び出す前にも 追加してみた。

そして結局全ての処理の間で呼び出すようにしてみたけど、納得いくような点滅にはならなかった。

全ての処理は、その処理にかかる時間が常に一定ではないからどうしようもない。
点滅周期を遅く、例えば0.5秒にすれば改善されるかもしれないが、 どれくらい改善されるかは やってみないとわからない。


さらにもっと多くの場所に「CALL BLINK」を追加すればそれなりに改善はするかもしれないけど、 あらゆる場所に追加しないといけないのは コードの保守性から見ると疑問。
また、常にダウンタイマのチェックをさせるのは、常にCPUに無駄な電力を消費させている。

まとめると、割り込みを使わなくても実現できなくはないけど、保守性が低く、 しょっちゅう点滅処理を呼び出すから肝心の制御処理が遅く、電気を食って、 気持ち悪い点滅をするプログラムになりそうだ。

では割り込みを使ったプログラムにするとどうなるか。

前提として、ダウンタイマ装置は残り秒数が0になったらCPUに割り込みを要求するように なっているとする。 その前提を使ったLED点滅割り込み処理はこんな感じになる。

割り込み処理BLINKは残り秒数が0になったときに呼ばれるんだから、ゼロチェックはいらない。 なので、次の割り込みを発生させるために200を書き込む処理と、 LEDの点灯状態を反転させる処理だけをすれば良い。


プログラム全体としては、まず最初にダウンタイマの割り込み処理先として BLINKのアドレスを登録する。
それが終わったらメインの処理は制御処理だけを実行する。
ダウンタイマが0になれば割り込みが発生してBLINKが実行されるから、メイン処理は LEDの点滅処理に一切関わらずに済むのでコードが綺麗で保守性が良い。 CPUはダウンタイマのチェックを行う必要がなくメイン処理の実行に専念できるので制御処理は早く、 電力もメイン処理にほぼ使われる。ほぼ0.2秒周期でBLINKが呼ばれるので点滅のリズムも一定。

ちなみに、CPUは「割り込みを受け付けないで欲しい」という要望に答えてくれるようになっている。 大抵のCPUはフラグレジスタの中に「割り込み許可フラグ」を持っているので、 このフラグをoFFにすれば割り込み処理は実行されなくなる。 CPUによっては許可ではなく「割り込み禁止フラグ」だったりする。
だけど、割り込み許可フラグをOFFにしても禁止できない割り込みもある。

例えば、CPUに供給されている電圧が下がった場合に発生する割り込みなど、 緊急や異常を知らせる割り込みは禁止にできないことが多い。禁止できない割り込みを ノンマスカブル割り込み(NMI)という。

ソフトウェア割り込みは、プログラムから意図的に発生させる割り込み。

OSのサービスを呼び出す、スーパーバイザコールで使用されたりする。

SRAM(Static Random Access Memory)

SRAMは内部構造的に記憶部にフリップフロップ回路を用いている。 ゲームボーイアドバンスのカセットにもSRAMが使われている。

フラッシュメモリ

不揮発性メモリ。ゲームボーイアドバンスのカセットにも使われている。 SST(現マイクロチップ社)のフラッシュメモリ、39VF512。

microSDカード

SDアソシエーションによって2005年(平成17年)7月13日に承認されたフラッシュメモリ型電子媒体である。サンディスクが2004年(平成16年)2月に開発したトランスフラッシュ(TransFlash; TFカード)の仕様を引き継いだもので、名称は異なるが媒体そのものは同じである。 microSDカードを変換アダプタに装着することによって、SDメモリーカードまたはminiSDカードとして利用することができる。

EEPROM(Electrically Erasable Programmable Read Only Memory)

不揮発性メモリ。ゲームボーイアドバンスのカセットにも使われている。

FRAM(Ferroelectric Random Access Memory)

高速動作が可能な不揮発性メモリ。 データ保持にバッテリバックアップが不要で、フラッシュメモリやEEPROMなどの不揮発性メモリと比べ、 高速書込み、高書換え回数、低消費電力などの特長を持っている。

FRAMの例
FM18W08-SG Infineon Technologies

ゲームボーイアドバンスのカセットにもFRAMが使われている。

—— FRAMはどうやってデータを記憶しているのですか?
FRAMのFは、Ferroelectrics (強誘電体)に由来し、強誘電体の持つ分極作用を利用したメモリです。あまり知られていませんが、考案されたのは50年以上も前(1963年発表)で、量産が始まってからも既に10年以上経過した実績あるメモリです。

<図3a>に強誘電体の典型であるPZT (チタン酸ジルコン酸鉛) の結晶構造を示しました。格子の中にZr/Tiイオンが置かれていますが、このイオンは二つの安定点を持ち外部の電界によってその位置を変える性質(分極作用)があります。さらに、一度どちらかの点に位置すると電界を取り去っても位置が変わることがありません。つまり、分極状態が記憶されます。上下に電極を設けてキャパシタを構成し電極電圧と分極量をプロットすれば<図3b>のようなヒステリシス(履歴)曲線が得られ”1”,”0”を記憶できることになります。分極による記憶状態は安定で、FLASHなどで問題になるソフトエラー[注2]の危惧もありません。データの読み書きは、他のメモリと同様にビットライン (BL) とワードライン (WL) のマトリクスをトランジスタで結ぶことにより行います。

[注2]:データの保持に際して宇宙線などによって希にデータが書き換わること。

メモリ変換ユニット(MMU:Memory Management Unit)

仮想アドレスから実アドレスへの変換処理を行う。

マグネットポンプ

ポンプは一般的に、ポンプ部とモータとの接続部分に軸シールが必要だが、
マグネット駆動方式には軸シールがない。
そのため、ポンプ室内から外部に液体が漏れ出ることがなく、
メカニカルシールやグランドパッキンなどの消耗品も必要ない。

ソレノイドアクチュエータ

電磁力を利用して、電気エネルギーを機械的運動に変換する機能部品。 ソレノイド内に可動鉄芯を設置し、電流を流すことで電磁力を得ることができる。

アースとGNDの違い

『グランド(GND)』と『接地(アース)』の意味と違いについて!
グランド(GND)とは、『回路動作の基準となる電位』のことを指す。
接地(アース)とは、『大地への接続』のことを指す。

柱上変圧器(transformer)

電柱の上に取付け、配電用に使用する屋外用変圧器。バケツ状の円筒形変圧器が一般的であり、電柱の頂部に固定されている。 電力会社の発電所や変電所から送られてくる電圧は高圧であり、住宅や小規模の事業所に対しての電源供給は、低圧による受電を求めるため、柱上に変圧器を設けて低圧に変換している。この変電設備一式を電柱上部で完結させているのが柱上変圧器である。 柱上変圧器は、高圧で供給される配電網に対して設けられ、カットアウトやヒューズを経由することで事故に対する保護をおこなっている。
柱上変圧器の中身はこんな感じ。コイルが巻いてある。
Vol.5 変圧器(トランス)の中身を見てみた。でんけんチャンネル

柱上変圧器内部には鉄心冷却用の絶縁油が充填されている。

トランジスタ(transistor)

ヒートシンク(heat sink)

吸収した熱を空気中に発散(放熱)することで冷却を行う部品の。表面積を増やして放熱効率を高めるために「フィン」と呼ばれる構造になっている。

ヒューズ(fuse)

電気回路内に置かれ、普段は導体として振る舞う。異常によって電気回路に定格以上の電流が流れると、ジュール熱により内蔵する合金部品が溶断し、回路を開くことにより回路を保護する。

メーカー:大東通信機

短絡(short circuit)

電位差のある電気回路の二点間をほとんど抵抗のない導体で接続すること。

感電(Electrical injury)

人体に電流が流れ、傷害を受けること。人体は電気抵抗が低い。

アンペアブレーカー

「契約アンペア値」を超える電気を需要家が使用した場合に自動で電気を止めるために設置される「契約用遮断器」であり、電力会社独自のものである。

インバータ(inverter)

直流電流を交流電流に変換する回路。パルス幅変調(PWM)が使われる。

コンセント(outlet)

右から左

屋外コンセント
イルミネーション、高圧洗浄機、庭でのバーベキューなどの用途のために設置される。

Panasonic公式

ラグ端子(lug terminal)

基板に差込み半田付けにて取付ける電源供給端子。

からげ

絡げ。束ねくくること。また、くくったもの。

パルス(Pulse)

短時間に急峻な変化をする信号の総称。

フォトカプラ(Photocoupler)

フォトカプラは発光ダイオードを光らせ、その光でフォトトランジスタを導通させます。



フォトインタラプタ(photo interrupter)

遮蔽物による光路の遮断または反射により生じる光強度の変化を測定することにより、物体の有無や位置、移動を検知する光センサです。機械式スイッチと異なり、接点を持たない無接点スイッチ(非接触型光スイッチ)のため接点の摩耗がなく高い信頼性があります。

光電子センサ

PM2-LH10hh

ボーレート(baud rate)

デジタル伝送で「1秒あたりの変調回数」を示す。

利得、ゲイン(gain)

電気回路における入力と出力の比のこと。 電圧であれば電圧利得、電流であれば電流利得と呼ぶ。 しかし、断りなく利得と書いてある場合は、 一般的に電力の利得(電力利得)をさす。比なので、単位をつけずに表す。

デューティ比(Duty Cycle)

duty比とは主にモーター制御などに使用されるPWM(Pulse Width Modulation)制御において、大事な概念である。
端的に述べてしまうと1周期における"High"と"Low"の比である。

リレー(relay)

リレーとは外部から電気信号を受け取り、電気回路のオン/オフや切り替えを行う部品です。

例えばリモコンを押すとテレビが稼働しますが、本来リモコンのようなシンプルで小型な機器からは、微弱な信号しか発することができません。
しかしながらテレビにリレーを内蔵すると話は違ってきます。
リレーは電気信号を受け取るとスイッチがオンまたはオフになる仕組みですが、
リモコンからの微弱な信号でこのスイッチングを行い、テレビの電源部の回路の動作を制御しているのです。

パワーリレー

中電流~大電流帯の負荷のスイッチングを行うためのリレーで、大きいものだと30Aほどの 電流を扱うことが可能。

センサノード

センサネットワークの無線端末のこと。

情報処理試験での出題例

ネットワークスペシャリスト令和7年春期 午前I 問7
IoTシステムにおいて,センサーの値をゲートウェイに送信するセンサーノードの消費電流 を抑えるため,図のような間欠動作を考える。センサーノードの動作時間は10ミリ秒で,そ の間は平均して10mAの電流が流れる。待機中は常に0.1μAの電流が流れる。間動作の平 均電流を1μA以下にするための待機時間として,最も短いものはどれか。ここで,平均電流 の値を求める時間は十分に長いものとする。


ア 1.1秒, イ 11.1秒, ウ 111.1秒, エ 1111.1秒

PID制御(Proportional-Integral-Differential Controller)

制御工学におけるフィードバック制御の一種。出力値と目標値との偏差、 その積分、および微分の3つの要素によって、入力値の制御を行う。

静電容量、電気容量、キャパシタンス

電気をためる能力

S.M.A.R.T. 情報

ハードディスクの健康状態をハードディスク自身が発行する各種の情報。

VGA端子(Video Graphics Array)

3列15ピン。IBMがEGAの後継として、1987年に発表した表示回路規格。 転じて、画面解像度として640×480ピクセル表示のことをVGAと言うようになった。

DVI端子(Digital Visual Interface)

RCA端子(Radio Corporation of America)

RS232C(Recommended Standard 232C)

9ピンか25ピン。アメリカ電子工業会(EIA)が定めた。
一般にRS-232Cと呼ばれて広く普及しているが、RSは厳密には規格ではない。現在の正式な規格名は、ANSI/EIA/TIA-232-Fという。
日本規格はJIS X 5101(旧JIS C 6361)が該当し、規格名は「データ回線終端装置とデータ端末装置とのインタフェース(25ピンインタフェース)」である。

USBマイクロB 3.0

USB Type-A(2.0)

4本の線がある。

USB Type-B

プリンターやスキャナーなどの周辺機器側で使用される。

USB Type-C

USBの機器とケーブルにおける、逆差し可能な小型24ピンコネクタ規格の一つ。

DisplayPort

DVIの後継規格。VESAにより2006年開発された。
電気的特性:+3.3V、許容電圧:16.0V、許容電流:0.5A


フレーミングエラー(framing error)

フレーミングエラーとは調歩同期(ASYNC)において、ストップビットのあるべき位置にストップビットがなかった(論理0だった)場合に表示されます。フレーミングエラーはパリティビットを使用して検出できます。

基板

USBヘッドセットの基板

基板がなぜ緑なのか

基板の色は、レジストという、基板の保護や絶縁のために表面に塗布するインクの色で決まります。
実はこのレジスト、緑である必要はなく、赤や黄色、黒など、何色でもOK。
なぜ緑が多いかというと、①目に優しく目視での検査がしやすい、
②汎用性が高く流通量が多いため、低コスト・短納期が可能、という理由からなんです。

タイコエレクトロニクス

コネクタ

第一電子工業(DDK)

コネクタの総合メーカー。

FRC5シリーズ ソケットコネクタ

DK-2000シリーズ DK-2100D-08R 電線対電線/電線対基板コネクタ 

ヒロセ電機

コネクタ業界国内大手。

FX2B ハーネス

HIF4 リボンケーブル用コネクタ

日本圧着端子製造株式会社(JST)

主にコネクタ、圧着端子を製造する電子接続部品メーカー。

J310Sリセプタクルハウジング

オリエンタルモーター

精密小型モーターおよび制御用電子回路などの開発・製造・販売を行っている。

三ツ星ベルト

工業用ベルトの製造、販売を行うメーカー。戦前から続く企業であり、伝動ベルトメーカーとしては国内大手三社に数えられる。

back