説明:

1+1は? 0!

というのが、1bit の足し算です。半加算器はこの計算をすることができます。正確には、結果(Sum) 0と、桁上がりを示す Carry 1 が出力されます。

このCarry を考慮して、入力A + 入力B + Carry の足し算を行う演算器を、全加算器と呼びます。全加算器を直列に接続すると、多bit の計算ができます。

4bit (最大値15) 同士の加算は最大値が 30なので、結果は5bit 必要になります。

動作:

入力A と入力B を、4bit のDIP スイッチで入力します。

見所:

4bit の入力値を表現するために、DIP スイッチを使用します。このスイッチは「チェックボックス」を4つまとめたものです。

4bit の入力値はBCD 変換器を通して、7seg ドライバに入力され、表示されます。以前に作成したBCD 変換器は10進数の入力を8 bit のBCDに変換しましたが、今回は 8bit の2進数(最大値255)を3桁の10進数に変換し、それぞれの桁をBCD に変換して出力します。論理回路で組むと配線が大変(4bit で挫折しました)なので、Mathematical Expression で計算しています。

加算器は真理値表を再現する論理回路を組みました。

真理値表:

リンク先はPDF

リンク先はPDF

option -クリックで QTZ をダウンロード(ブラウザ内では動作しません)

option -クリックで QTZ をダウンロード(ブラウザ内では動作しません)

ボタン (Button)

5月 1, 2009

説明:

GUI (Graphical User Interface) の基本、ボタンです。前回のプッシュスイッチの応用です。

動作:

・ボタン (Button) クリック時に下のLED が反応する

・ラジオボタン (Radio Button) 3つが連動し、1つだけ選択できる

・チェックボックス (Check Box) 3つが独立し、それぞれ選択できる

見所:

ボタンはモーメンタリSW の応用です。状態(State)とは別にクリック(Click)線を引き出しました。これは「ボタンの上でプレスし、ボタンの外で離す」場合、クリックをキャンセルするためです。

チェックボックスはオルタネートSW(ホールド式)と同じです。外部からセット・リセットが出来るSelect 入力を追加しました。パラメータの設定に使うDIP SW もこれで作ることができます。(→DIP SW作りました

ラジオボタンは一度ON になったボタンを再度クリックしても、ON のままです。他のボタンをクリックした時にリセットします。連動スイッチです、(→連動スイッチ風のボタン作りました)

ON 状態の保持をSample & Hold で行い、リセットは外部のコントローラ(Click and Select マクロ)で行っています。

option -クリックで QTZ をダウンロード(ブラウザ内では動作しません)

option -クリックで QTZ をダウンロード(ブラウザ内では動作しません)

説明:

電子回路でも重要な部品の1つ、プッシュスイッチ(押しボタン)です。押した後の動作が異なる3種類のスイッチを作ってみました。

基板に直付けする「タクトスイッチ」はモーメンタリスイッチの一種です。

動作:

左(緑):モーメンタリSW [(ON)-OFF, SPST Momentary]

中(赤):オルタネイトSW [ON-ON, SPST Alternate]

右(黄):オルタネイトSW(ロック式)[ON-ON, SPST Alternate, Hold]

見所:

オルタネイト動作(押すたびに ON/OFF を切り替える)はカウンタで実装。出力のMOD 2 をとることで1,0 に変換している。

UI 表現としては、「スイッチ以外のところで押す、あるいは離す」を無効にしている点に注目。ドラッグ&ドロップのMode 4 の応用です。

option -クリックで QTZ をダウンロード(ブラウザ内では動作しません)

option -クリックで QTZ をダウンロード(ブラウザ内では動作しません)

説明:

QC にはUI (User Interface) 用のPatch がありません。ボタンなどが必要な場合は、 Xcode & Interface Builder を使って、Cocoa アプリケーションとして仕上げるのが、本来の使い方になります。

本blog はUI の勉強を兼ねて、QC のPatch を組み合わせて、UI 部品を作っていくことにします。手始めにDrag & Drop を実装します。

動作:

・画像をDrag & Drop することができます。(Mode 1 以外)

・カーソル(↑)キー でモードを切り替え

見所:

Mode 1 はマウスに合わせて画像が動きます。Drag & Drop ではありません。

Mode 2 はマウスをクリックしている間のみ、マウスに合わせて動きます。簡易Drag & Drop です。

Mode 3 はマウスをクリックした場所と、画像との距離を保ったまま、動きます。

Mode 4 は画像の上でクリックしたのみ、Mode 3 の動作をします。

解説:

UI は領域判定や、クリックの順序など、細かい挙動を詰めていくほど、自然な動きになります。例えば、Mode 3 では画像の外でクリックしても、Drag & Drop できてしまいます。

Mode 4 では領域上でドラッグを「開始」したかどうかを判定しています。「領域上にいるか」だけの判定だけでは、画像の外でドラッグを開始し、画像の上にカーソルが来た場合、画像を押してしまいます。

オブジェクトが1つの場合はこれで完成ですが、複数のオブジェクトが有る場合は、それぞれの重なりを判定する必要があります。また、画像の透明部分を判定すると、より自然になります。

判定部分をJavascript で書けばもう少し簡単になると思うので、UI 部品シリーズは次回からJavascript Patchを使う予定です。

option -クリックで QTZ をダウンロード(ブラウザ内では動作しません)

option -クリックで QTZ をダウンロード(ブラウザ内では動作しません)

説明:

前回はLFO の位相をコントロールして、時間波形を表示しました。他のパッチでも同様のことが出来ます。

動作:

・オシロスコープの動作は前回と同様。

・今回追加したオレンジ、緑、水色のラインは「Osillo Scope with SG マクロ」の内部で指定する。

見所:

「Osillo Scope with SG マクロ」の内部を見てください。

Math Patch の「a * (1/b)」、「a * sin(360*10*b)/b」と、「Timelines (y = f(x) )」が追加された線のY 座標になります。

Timelines パッチは時間のコントロール(初回)で解説しました。時間に対応する出力をベジェ曲線で設定することができます。これを、任意信号発生器 (Arbitrary Waveform Generator) と見なすことができます。

この線のみ、左端が(t=0) です。その他は中央が(t =0) になるようにオフセットしています。

もう一つ、Mathematical Expression パッチで、横軸 x に対する関数 f(x)を書くことが出来ます。

例では小学校でやった反比例 (y = 1/x)と、情報系で基本となるSinc 関数 (y = sinc(x) = sin(x)/x) を表示しています。

どちらも0 に収束していく(が、0にはならない)様子が観察出来ます。

option -クリックで QTZ をダウンロード(ブラウザ内では動作しません)

option -クリックで QTZ をダウンロード(ブラウザ内では動作しません)

説明:

前回は、Patch Time のコントロールができることを説明しました。これを利用して、LFO Patch の動きをみることができる、オシロスコープを作ってみました。

動作:

・カーソルキー(↑)でスタートストップ、リセット

・「Oscillo Scope with SG」マクロのパラメータで表示する信号を調整

– SG(Signal Generator) の設定として、波形(Type), 色(Color), 周波数(Cycles), 振幅(Amplitude), デューティ比(PWM Ratio)

– Y Offset は信号にDCを載せるのではなく、表示位置の変更(Sig_1x2 の信号に影響しない)

– Sig_1 to Sig_2 Phase は表示位置の変更でなはく、信号の位相を変える(Sig_1x2 の信号に影響する)

・波形が移動する速度(Speed Factor)、横軸の点の数(Iterations) を設定可能

・Sig_1x2 信号を x-y プロットにすることが可能

X-Y プロット

X-Y プロット

見所:

まずはパラメータを調整して、信号波形や周波数を変えてみてください。LFO の波形を視覚的にみることができます。 PWM やRandom など容易に理解出来ます。

青い線は信号同士をMath パッチで掛け合わせたものです。こちらも、Math の演算を視覚的に見ることができます。かけ算(Multiply) はAM 変調になります。

解説:

波形の一点、例えば左端に注目すると、上下に振動しています。これが、LFO から出力される値です。(Speed Factor を1にすると、実際の周波数になります。)

LFO は発信器なので、同じ出力を周期的に繰り返します。一周期の中での位置を位相と呼び、角度や時間で表します。

「Oscillo Scope with SG」はIterator で構成しています。繰り返しの際、LFO の位相と、プロット位置をずらすことによって、横軸を時間とした波形表示を可能にしています。

option -クリックで QTZ をダウンロード(ブラウザ内では動作しません)

option -クリックで QTZ をダウンロード(ブラウザ内では動作しません)

説明:

Quartz Composer における、時間の概念とそのコントロール方法について説明します。QC で作業をしていると、一時停止ボタンが欲しくなりませんか?[STOP] を押すと全ての表示が消えてしまいます。

時間によって動きを変化させるときは、LFO (Low Frequency Oscillator) や、Stop Watch、Interpolation などのパッチを使います。これらはPatch Time という時間で管理されています。

通常は[Run] を開始してからの経過時間となりますが、Timebase という項目(各パッチを右クリック)で、参照する時間を変えることができます。

timeline-timebase

Timelines というパッチもあります。これはPatch Time の時間変化を、線で描くことができるパッチです。Timeline はInspector →Settings で設定します。「Option+Click」でコントロールポイントの追加、「Control+Drag」で接線の傾きを調整します。

timeline-inspector

動作:

・3つのボールがLFO (周期 3 sec のSin 波)によって上下します。

・↑キー:スタート、ストップ

・↓キー:リセット

見所:

中央(黄)はコンポジション全体のPatch Time によって動いています。(通常の動作)

左右は 「Controllable Patch Time マクロ」によって、Patch Time のスタート、ストップ、リセットを行うことができます。さらに、右側(赤)はTimelines パッチで駆動されています。

皆さんが作ったコンポジション全体を1つのマクロにして、そのマクロのTimebase を、「Controllable Patch Time マクロ」に接続すれば、一時停止が可能になります。

「Controllable Patch Time マクロ」は、Stop Watch Patch をカーソルキーでコントロールできるようにしたものです。

option -クリックで QTZ をダウンロード(ブラウザ内では動作しません)

option -クリックで QTZ をダウンロード(ブラウザ内では動作しません)

説明:

本blog の1番目に「電卓」があるのですが、中身(キー入力〜演算〜出力)はJavaScript です。これを論理回路で置き換えるべく、要素技術を作っています。

動作:

キーボードの1-9, 0, a-f .(dot) に 反応します。

見所:

0-F の16進数に対応する2進数4 bit を出力します。真理値表通りのシンプルなロジックです。0と入力無しを区別するためのKey Down 信号も出しています。

真理値表:

7seg LED と同じです。(Hex to Binary の部分)

option -クリックで QTZ をダウンロード(ブラウザ内では動作しません)

option -クリックで QTZ をダウンロード(ブラウザ内では動作しません)

時計 (Clock)

4月 23, 2009

説明:

2ヶ月ほど前に自分が作った時計(非公開)を作り直してみました。まだQC を始めたばかりで、無駄にJavaScript を使っていました。JavaScript を排して、秒針に残像効果をつけてみました。

動作:

アナログ×デジタルの時計です。

短針、長針、秒針のかわりに数字が回ります。

周囲を秒針に相当する画像がスムーズに回ります。

見所:

無理矢理ですが、音が出ます。(実用性は…?)

「残像」はイメージしたものを作ることはできたのですが、もっと上手いやり方がありそうです。今後レベルアップしたら、また作り直したいです。

Javascript のMath.Sin() と、Mathematical Expression のsin() は引数の単位が違うのですね。前者が (rad) で後者が(deg) でした。

option -クリックで ZIPファイル をダウンロード

option -クリックで ZIPファイル をダウンロード

説明:

7 セグ LED を使って複数桁の数字を表示します。QC の場合はコピー&ペーストで簡単に増やすことができます。しかし、実際の電子工作では、部品数は少ない方が助かります。

ダイナミック点灯は目の残像を利用し、各桁を切り替えながら順番に表示する手法です。実際は消灯時間があるため、光量が落ちますが、ちらつきはわかりません。(→実機はこちら)

QCにおいては、全く実用性はありません。やってみたかっただけです。

動作:

・上部 通常の表示

・下部 ダイナミック点灯制御の表示

見所:

7 seg LED マクロを若干変更。色を変えられるようにした。

下のLED はウインドウサイズに合わせてスケーリングするようにした。

option -クリックで QTZ をダウンロード(ブラウザ内では動作しません)

option -クリックで QTZ をダウンロード(ブラウザ内では動作しません)