DIGITAL

2022年9月13日 (火)

I2C信号を見る はなし

I2C信号を見る はなし とは

I2C 信号は CLOCK に同期した DATA 線で信号を送る近距離通信信号で、通常 100KHz程度のクロック、高速では 400KHzで通信しているが、結構タイミングとか ACK応答とか微妙な点が多く、特に DATA 線がオープンコレクタという双方向のモードで動作するので、イメージをつかむのは難しく、やっぱり実際の信号を見て頂くのは一番と思う。

動画のオシロスコープ表示で 赤色が CLOCK 黄色が DATA ラインです。
始めに赤が High のうちに 黄色が Lowになりますが、これがスタートコンディション です。
その後 クロックが 8回 High / Low を繰り返して、この High に立ち上がるときの DATA線のレベルを見ている訳です。
9個目のクロックは ACK を確認するためで、このとき 送信側は ポートをOpen にしてプルアップ状態にしておき、スレーブ側が Lowにするのを待っています( ACK 待ち)
素早く応答するので、スレーブ側は 8個目のクロックの立ち下がりですぐに LOW にして ACK を応答します。
Youtube ページなどに行って、拡大して見るとこの8個目のクロックの立ち下がりの後から次のクロックまでのDATAラインが、少し前後のレベルよりも下がっている(電圧が低くなる)のが判るかと思います。これはスレーブ側でのACKのLOWレベルへの引き込み能力が高いためで、デバイスによっては省電力のデバイスなどここがあまり下がらない(若干レベルが上がる)場合もあります。

9個目の CLOCKが Low になれば、再びスレーブ側は Low を止めて、入力状態になります。

 動画の説明:通常のアクセス 始めの 9クロック目が Low の ACKが帰ってきて 次のデーターも送れている。

 始めの8ビットはアドレス(7ビット)と送受ビット(1ビット)からなっています
この例では、アドレス 0x21 ( 7ビット)からデーターを読み込むので、送受ビットは(1-読込)を指定しています。
これを8ビットで送るので、アドレスは上位にシフトして 0x42 + 1(読込ビット)で、 0x43 というデーターを送っています。

 

 動画の説明:応答の無い場合 始めの 9クロック目が High なので ACKが無い

 

この場合は、ACK応答が無いためプログラムで指定回数 応答が来るまでリトライしています。それで、同じ波形が繰り返されています 

| | コメント (0)

2022年2月13日 (日)

TTL レベルのはなし ふたたび

 そもそも、 TTL とは Transistor-Transistor-Logic(図 右側) の略で、トランジスタで組み合わせているロジックICから始まったもので、その前に DTL Diode-Transistor-Logic ( 図 左側 )なるものがありました。初期のロジック IC はほとんど 5V 電源でしたが、まずその入力特性を考えて見ます。Dtl_ttl
1) DTL

 この回路は ロジック IC が出来る前からトランジスタとダイオードで作っていたポピュラーな回路で、図の様に2石で構成するとトランジスタの B-E 間の ON電圧やダイオードの ON電圧を約 0.7V としてみると、初段のベースには ONに必要な電圧は
  0.7V(1stB-E)+0.7V( Diode )+0.7V(2nd B-E) = 2.1V となります。
抵抗 2kΩ で5Vにプルアップされていますから、いつもは ON 。すると2番目のトランジスタにベース電流が流れますので、トランジスタが ONして出力は 0V (正確にはトランジスタの Vce-sat で約 0.2V ぐらい)になります。このとき入力電圧はダイオードのON電圧含めて 2.1V - 0.7V = 1.4V 程度より上なら、この出力 ON( Low ) 状態になります。
  よって、どちらかの入力がこの 1.4V 以下になるとトランジスタは OFF  となり、出力トランジスタは OFF (オープン)なので、抵抗 2kΩ で 5Vにプルアップされているので、出力は High( 5V ) となります。


2) TTL

図の様に入力部分はさきほどの DTLであったダイオードの代わりにエミッターが2つある変なトランジスタになっています。ここがトランジスターになったので DTL -> TTL となったわけです。ダイオードとの組み合わせよりコンパクトで高速な動作が出来るエミッタ2個付きのトランジスタに変えたこと+負荷抵抗を 100Ωに小さくしたことで、動作速度も向上しました。入力のしきい値は中央のトランジスタのベースまでは
  0.7V(1stB-E)+0.7V(2nd B-E) = 1.4V となります。
入力段のトランジスタで考えると、ベースが5Vにプルアップされているので、エミッターが 5V -0.7V = 4.3V 以下ならいつでも ONしてしまいそうですが、トランジスタが ONするということは、コレクタ電圧は エミッタ電圧 + Vce-sat(約 0.2V)なので上記 1.4Vよりも 0.2V 低い 1.2V 程度がしきい値となります。
 この回路では出力段のトランジスタのコレクタ側にもトランジスタを追加して、出力 High 時に抵抗のプルアップだけだったものが、トランジスターによって電流を流せるようになり、出力のスピードアップにもつながっています。

 この回路はいわゆる NAND ( Not And )回路であり、 AND回路が両方ともに入力が1(High)のときだけ出力が High になる回路ですが、その出力が反転したものです。また、TTL は回路的には負論理動作で、回路から見て判るように入力に +5Vを加えても電流は流れません。いつも入力は High レベル状態なのです。
これを変える条件は、「入力を 1.2V以下にする」ので、入力をGNDに落とすのが正しい使い方です。TTL は オープン時は High レベルで、アクティブにする時は GNDに落として使う( Low アクティブ)のが、正しい使い方です。ですので、入力ポートとして使う場合は LOW(GND)に落として使うスイッチなどに、出力ポートでは出力電流があまり多く必要の無い、主にGND側の引き込む使い方の比較的負荷の軽い信号に使われます。
もちろん低い内部抵抗・Low側フルスイングのオペアンプ( Low 時に 1.2V以下出力出来るもの)などで駆動することも出来ます。
市販のパルスジェネレータなどでも大丈夫です。

 このように、TTL レベルと定義されると、なんとなく 5V で使う信号と大雑把に考えられますが、TTLの本来使われてきた経過から考えるとしきい値が 1.2V 〜1.5Vの信号で Low アクティブ と考えた方が正しい使い方ではないでしょうか? 今ではロジック ICも CMOSが多いですから、しきい値は 2.5V が標準です。電源電圧が 3.3Vではしきい値がその半分 1.7V 程度と色々ですが、信号伝送には LOW を積極的に使うほうが、その時信号ラインが低インピーダンスにキープできるなどのメリットがあるので、TTL の名称は続くのでしょうかね。

| | コメント (0)

2022年1月 4日 (火)

2022 新年あけましておめでとうございます。

今年最初のお話しは、昨年手に入れた SONY 放送用デジタルミキサー DMX-E3000 の動作確認です。

 DMX-E3000 はコンソール操作部と本体が分離したもので、映像関係の編集に使われた業務用システムです。オークションで入手した時は接続ケーブルが無く、コンソール部に電源を入れても本体と接続されないと何も表示されないので、最初は壊れているかと思いましたが、中を開けてみると基板上のインジケーターが点滅したりするのでどうやら本体と通信しないと起動しない様です。

 そこで、入手時はとりあえず接続ケーブルを探したのですが、DSUB15Pin のオスメスで、昔はディスプレイ用などよく見かけるモノですが、今使っているは小型の3列しかないので、昔のケ−ブルを引っ張り出してきてちょうどあった DSUBメスをストレート接続して接続してみました。やっぱりケーブルで接続したらボタンや表示が出てきました。ボタンを押したりスライダーを動かしたりしてみましたが入力は全てデジタル 信号で、コネクタも XLR 3Pinの AES/EBU 規格という信号なので、おいそれと確認出来ないのでとりあえず正規の DSUB 15Pinケーブルと、メーター接続用の DSUB 9Pin(これもオスオスクロスというやっかいなモノ)を発注して、暇な時間が出来るのを待つことにしました。

 そんなことで、やっとこの新年に時間が取れたので、セットを引っ張り出して接続しての実験となりました。
信号源のデジタル信号は、TASCAM TM-D1000 というデジタルミキサーを入手したので、その出力を入れて見ました。出力はアナログ4チャンネルありますので、その2チャンネルをパワードスピーカーに繋げて確認しました。 E300」」

 写真は動作中のセットです。操作説明書をネットで入手したのですが、ドイツ語しかなかったので最小限の翻訳をしてようやく操作できるようになりました。

 この後 CDプレイヤーなどのデジタル COAX 信号で動作出来るように COAX - AES/EBU 変換をするようにして、8CH ミキシング出来るように変換器を作ったのですが、それはまた次の記事に...

| | コメント (0)

2016年8月12日 (金)

12Bit DAコンバーターのはなし

12Bit DAコンバーターのはなしとは

12BitのDAコンバーターのICを探していたら、秋月電子に 100円で MCP4725 という マイクロチップの ICを見つけた。
 3.3Vでも 5Vでも使えて、I2C バスで制御出来るので、PICなどのPWMポートでアナログ出力をやっていて、ポートが足りない場合は便利そうだなと思い、実験してみた。
Dac_ic  問題は、実装方法で SOT-23-6 というのはピンが 0.95mmピッチなので、普通の変換基板では合わないし、パターンを作るのも面倒なので、0.65mmピッチの変換基板に上の写真のように、4個のパターンのうち両側を1個づつそれぞれのピンに、真ん中の2個のパターンを中央のピンにまとめて半田付けして、なんとか実装しました。
20160812_113815_2
 VDD(Pin3)を +5Vに , Vss(Pin2) をGNDに,SCL(Pin5) ,SDA(Pin4) をCPUに、アドレス設定の A0(Pin6)をVssに繋いで、電源に 0.1uF程度のパスコンを入れ、Vout(pin1) をテスタで測りながら電源 ON 。
 何もしないで Voutから 2.5Vがまず出てくれば成功。このICは EEPROMを持っていて、そこに書き込むと電源 ONのデフォルトの電圧をメモリさせておけます。初期値は 電源電圧半分が出ます。簡単な電圧設定ボリュームとしてもなかなか有効な ICです。
 さて プログラムからはどうアクセスするのかと見てみると、デバイスアドレスは 1100xxx0B となっており、この MCP4725では A0 =0 とすると、 0xC0 となる。
DACなので、出力専用と考えれば、アドレス出力+コントロールデーターと上位4ビット+下位8ビットデーターと3バイトで出力設定が完了するので,比較的楽です。
 しかしながら,メモリーに記憶する場合は、アドレス出力+コントロールデーター+上位8ビット+下位4ビットデーター と4バイトを送ることになるので、2つのルーチンが必要です。
 この ICには省電力モードがあるので、デフォルトで電源ON時に省電力で 出力 0V、起動で出力開始という使い方も出来る。ただ、電源を切った瞬間を記憶しておきたい場合は,いつもメモリ書き込みモードでアクセスする必要があります、
 I2C バスがすでにあるなら、DACを追加するのに簡単な ICですね。
 

| | コメント (0) | トラックバック (0)

2014年10月30日 (木)

D ラッチとD フリップフロップのはなし

D ラッチとD フリップフロップのはなしとは

ゲートICの話ですが、マイコンのポートが足りない場合や、出力ポートとして電流を流せるポートが必要な時に、ラッチICやフリップフロップのICを使ってポートを拡張します。このときに、全く同じピン配置なので「どっちも同じ」と思ったときにトラブルは始まります。
D-ラッチ
20141030_95008ラッチICは例として右図の様な、74HC573などがあります。昔は 74HC373などがポピュラーだったのですが、ピン配置が良くないので、最近はこっちの500番台を使う機会が多いです。
 このICは OEと LE という2つの制御端子があり、OEは Output Enable で出力をオープン(ハイインピーダンス)状態にするか、出力状態にするかを選択します。
 もう1つの LE は Latch Enable でこの端子が High のときは信号が Dn から Qn へ筒抜けに伝送され、Lowになると遮断されるのです。スイッチと考えれば分かりやすく、使い方も簡単です。
D-フリップフロップ20141030_95036
フリップフロップICは例として右図の様な 74HC574などがあります。ラッチICと違うのは 11ピンの CK だけです。 CKは Clock の意味で、これは同期式のシステムに対応しているもので、この端子が Low から High に立ち上がった時に、Dnの 値が Qn に出力されるのです。
 両者を比べると、ラッチは通過状態のコントロールが Highパルス、フリップフロップはLowパルスであると簡単に考えがちですが、ラッチが通過状態の時に出力が 入力Dn にしたがって変化してしまうのに対し、フリップフロップは「前回の値を保持している」ことが大きく違います。
 ICのデーターラインに繋ぐポートが専用に使うことが出来て、LEをLowにしているタイミングでもポート出力が変化しない場合は、ラッチでも問題無いですが、出力先が短時間の変化に敏感だったり、カウンターだったりした場合はクロックの立ち上がりでのみ変化するフリップフロップタイプの方が安心ではないかと思います。

| | コメント (0) | トラックバック (0)

2014年8月12日 (火)

XPにさよなら

XPにさよならとは

PIC 開発環境の MPLAB-IDE をずっと使っていた XPマシンの Lenovo X200 ですが、最近ちょっと挙動がおかしくて、デバッガの ICD3 を認識しなかったり、USBのSDカードリーダや USB ハードディスクを読み込めなかったり、ちょっとトラブルが多くなって来た。
 今回新たな CPU ボードのコードを書いていたのですが、A/Dコンバーターの読み込みルーチンを追加したところデバッガを止めても、止まっている位置に緑の→が出ず、おかしな所で止まっているようだ。 おかしいことは、この A/Dルーチンを実行させずに、サブルーチンとして存在させるだけで、おかしくなることでした。
 よく調べていくと、配列上のメモリから読み出すコードを追加して書くだけで、おかしくなることが判りました。
「配列の代入の型が間違っていたので、それかな?」と思って修正しても、変わらないので、もしやと思い、もう1つの開発環境 X1 Carbon ( Win8.1)上の MPLAB-IDE で動作させると、問題なく動くのでした。
Mplab87
ちゃんと動作する時は、ブレークポイントでキチンと止まるし、もちろんステップ実行もできます。「こりゃ環境が悪さしてるのかな?」と思ったのです。
では X200 を Win7にしよう
 それで、意を決して X200 を Wi n7 にすることにしたのです。もうXPとしてはこの MPLAB を動かしているぐらいで、ほとんどのソフトは Win8 で動くので、このマシンを Win7 に変えてしまい、合わせてクリーンな状態からソフトをインストールしようと決めたのです。
 このX200は Disk To Disk で XPのリカバリーが出来、付属のDVDを使うと Win7 にリカバリ出来るというもので、ずっとこのリカバリーディスクを使ってなかったのですが、いよいよ出番が来ました。
ディスクからのリカバリーに2時間ぐらいかかって、その後 Win7 の更新ファイルが35個程度検出されたので、何度も再起動させて、どうやら完了。その後 デバッガの ICD3 について来た、 MPLAB-IDE ver8.7 のディスクから IDE環境をインストールして、このままではコンパイラが無いので、C18 コンパイラを Microchip のホームページの Archive から持って来て、 インストールしました。
さっそくプロジェクトファイルをコピーして、動作させようとデバッガの ICD3 を USBコネクタにさすも、ドライバーが無いと言われて認識出来ず。
 仕方が無いので、デバイスドライバから認識?の ICD3を見つけて、ドライバの更新すべく、 Microchipフォルダ下の IDE-comm の中に ICD3 のフォルダを探して、 Driverを手作業で設定。
どうやら「開発元が認証されていません」となって、インストールされなかったようだ。ウィルスチェックの進歩に伴って、メーカであってもドライバーを入れてもらえないなんて厳しすぎますかね?
 これでようやく普通にデバッグ出来るようになりましたが、エディタがまだ無かったり、通信ソフトが入ってなかったりで、環境がそろうにはもうちょっとかかるかな....

| | コメント (0) | トラックバック (0)

2014年2月25日 (火)

EPROMのはなし

EPROMのはなしとは

EPROMとは [erasable programmable read-only memory ]で電気的に、書き込みが出来る ROM のことです。最近は EEPROM[ Electrically Erasable Programmable Read-Only Memory ]が一般的で、よく使われる Flash メモリーと同様に電気的にも消せるタイプのメモリーが主流です。
27c256
しかしながら、20年前ぐらい前までは電気的に書けるけど、消すには紫外線消去機でないと消すことの出来ない UV-EPROM (上の写真)が主流でした。ガラス(石英?)の窓からメモリーチップが見えて半導体らしさがでています。
 通常は 5V 電源で読み出せるのですが、書き込むには 12V ぐらいが必要で、昔はこのような EPROMをカード基板に数十個実装して大きなメモリーカードにしました。
  27C256 は 256Kbit なので、1個で 32Kbyte 、20個実装してやっと 640KByte とフロッピー1枚分でした。当時はフラッシュメモリーがとても高価で入手性が悪いし、一般的でなかったので音声合成のアナウンスボードを作った際は、このEPROMカードを数枚使って全体で 30分ほどのアナウンス機をつくって納入しました。
 お客さんが書き込めるようにと、4枚まとめて書き込める高速コピーマシンや、紫外線蛍光灯でカード消去機も作りました。
 紫外線蛍光灯は光っていても判らないので、点灯実験をしている際についつい見つめてしまい、次の日に目が日焼けで腫れて目医者にいった覚えがあります。とにかく痛いんですよ目のやけどは...
今でもEPROMを使っている分野があるそうで、なんとパチンコの機械だそうです。物理的にソケットにして交換出来るし、確実に古いバージョンを回収出来るからかなぁ?

| | コメント (0) | トラックバック (0)

2014年1月28日 (火)

入出力ポートのはなし

入出力ポートのはなしとは

今回は組み込みマイコンなどのポートについて書いてみる。
20140128_195830
上図はTI のI2Cバス制御の I/OエキスパンダIC TCA9555のポート回路です。
右中央の IO Pionとあるのがポートで、Q1は出力用の P-CH  FET, Q2は N-CH FETです。
出力ポートのはたらき
 まず出力についてみて見ると、出力ポートにするかどうかは、左上のラッチ Configration Registor の出力で制御されます。Q = H の場合その先に繋がる NOR 入力が High になるので、その出力は 他の入力にかかわらず、Low なので Q2 はいつも OFF。
反転Q は Lowなので繋がる NAND は他の入力がいずれでも、出力 High になるので Q1はいつも OFF になります。 これが、入力ポート状態になります。
さて、その反対の Q=Lowのときに出力ポートになりますが、その High /Lowは Output Port Registor ラッチで決まります。NANDと NOR を使って、2つの FETをうまく ON/OFF させて出力させます。もう1個ラッチが別にあれば Q1をいつも OFF にして、 OpenDrain 出力ポートに対応することも出来ますね。
入力ポート時は?
入力をチェックする Read Pulse によって Input Port Registor に入力ポートの状態がラッチされます。このICの機能では極性切り替えが出来る様で、そのためのラッチもあります。
また便利な機能として入力割り込み機能がありますが、入力ラッッチの入力と出力を EXORで見ているだけって構成に感心しました。
EXORは2つの入力の極性が違った時だけ High になるので、ポートの極性が変化した時に High (割り込み発生)になり、読んで同じになったら自動的にクリアされるなんてなかなかシンプルでうまい構成ですね。
I2C で2つの8ビットポートを拡張出来るなんてけっこう便利なIC でもありますね。

| | コメント (0) | トラックバック (0)

2013年9月 4日 (水)

加算器のはなし

加算器とは
加算器[Adder]とは、デジタル信号を計算する基本の装置で、ここでは2進法の加算器を考えてみる。2進法1ビットの2つのA,B 信号を加算してみる。Adder
1) A = 0 , B = 0 のとき
 Sum = 0
2) A= 1 , B = 0 のとき
 Sum = 1
3) A= 0 , B= 1 のとき
 Sum = 1
4) A=1 , B=1 のとき

 Sum = 0 , CARRY = 1
これをゲート ICで実現すると右図のように、XOR 1つと AND 1つで出来ることが判る。
CARRY とは桁上がりのことで2進法では、 1+1 = 10 となる次の桁への繰り上がり信号です。
 それで次の桁はその CARRY を含めて計算しなければならないので、上の Adder を2つ使った Full Adder なるものが必要になってくる。これら の桁の CARRY IN と CARRY OUT を繋げて8ビット対応にすれば、8ビットの加算器が出来る。
 減算器はどうするかというと、引くのではなく2の補数を加えてやれば良いということが Wiki に書いてあるので、参考にして下さい。減算器の場合は 各ビットを反転する NOT が8個と +1 する必要があるので、全ビット Full Adder にすることが必要なそうです。
 めんどくさい人は 74LS283 が RS で ¥2,830 とちょっと高いですが4ビットであります。

| | コメント (0) | トラックバック (0)

2013年2月27日 (水)

74LS のはなし

74LSとはLs_s_ttl

TTLの種類のことで、[Lowpower Shotkey-diode Logic ]の略です。
 右図はインバーターの TTL 7404 シリーズの内部回路ですが、一番上が通常の TTL で 7404です。
ハード的には
入力段がエミッター入力になっているのがTTLらしいですね。TTLは Lowアクティブが基本で、入力部が Lowに落とされることで、2段目のトランジスタのベース電流がなくなり、出力段の上側のトランジスタが ONして High 出力となります。Lowアクティブが基本なので、ここでは High 電圧は重要でなく、130Ω で電源に繋がっているので、出力に流せる電流は少ない構造ですが、Lowに落とす場合は、下側のトランジスタが ONになるのでトランジスタのコレクタ電流のほぼ最大まで電流を流せます。6個入りの7404で消費電流は H出力時 6mA,L出力時 18mA程度です。
 次の回路は S [shotkey ]タイプの回路図です。
これは TTLのスピードを上げようとして改良されたのですが、現在では消費電流が多すぎるので、あまり使われていません。しかし、高速化の方法が判りやすいので紹介します。
 まず、目に付くのは下側のトランジスタです。ちょっと見るとベースとコレクタが同じ終段のベースに繋がっているので意味ないのでは?と思われますが、これは終段下側のトランジスタのベース電流を制限してこのトランジスタのベースに無駄なキャリア(正孔)が溜まるのを抑えて、OFFにするときのスピードを速めるためです。
もう1つ気付く点は抵抗値が小さくなって電流を増やしている点です。出力のコレクタ抵抗も 130Ωから 50Ω に下げられ、出力段上側のトランジスタをダーリントン接続にして電流を流せるようにしたものです。
6個入りの74S04で消費電流は H出力時 15mA,L出力時 30mA程度です。
 しかしながら電流が大きいため、当時大量のゲートICを使って発熱が増えること、しかも 5Vという低い電圧だったため大電流による電流ドロップなど弊害が多かったため、まもなく LowPower に改良された LS タイプが普及しました。
LSタイプは逆バイアス電圧をショットキーダイオードで制限したり各状態での電流値を制限しただけでなく、入力回路も本来の TTL 構造でなくベース入力に変更してスイッチング電流を減らすなどの改良がなされました。
6個入りの74LS04で消費電流は H出力時 1.2mA,L出力時 3.6mA程度です。
Sタイプはバッファーに生きている
Sタイプの回路が踏襲されているのは、出力電流を大きく、スイッチング速度は速くという要求の74128 などのバスドライバーなどに今も使われています。
20130227_84107
コレクタ抵抗は 30Ωに、例のベースを飽和させないトランジスタも健在です。
このSN74128は出力電流は Lowで 48mA Hignで 42mA 流せますが、すべて同時に流せる訳ではないので、合計電流に注意が必要です。スイッチング速度は 10nS程度。

| | コメント (2) | トラックバック (0)

より以前の記事一覧