目次
前
次
CWジェネレータ
CW(モールス符号)を、自動送信するCWジェネレータを
ROMシーケンサで実現してみます。
ブロック図は、以下。
ブロック図から起こした回路図は、以下のようにします。
ROMシーケンサは、指定されたアドレスから情報を取得して
音の長さに変換して、レジスタに記憶させます。音の長さ
を記憶させたなら、ワンショットマルチで指定した時間の
間、スピーカを鳴らしていきます。
CWは、長点と短点の組み合わせになるので、音の長さを示す
情報は、以下としました。
CWは、アルファベット26文字は符号長が1から4。
数字の場合、符号長は5で固定。
CWの1文字は、最長5符号になるので、レジスタの
サイズは10ビット。4ビットのレジスタを3個使い
12ビットにして処理できるようにしました。
ワンショットマルチからの出力は、ダイオードを使った
論理和を構成して、長点、短点のどちらでも発音可能に
してあります。
CW符号は、最大127文字にしています。
カウンタ4024を利用して、ひとつのアドレスにCW符号
をひとつ格納。
CW符号は以下ですが、この中のどれかをASCIIコード
にして1アドレスに1データとしてROMに格納します。
A . -
B - . . .
C - . - .
D - . .
E .
F . . - .
G - - .
H . . . .
I . .
J . - - -
K - . -
L . - . .
M - -
N - .
O - - -
P . - - .
Q - - . -
R . - .
S . . .
T -
U . . -
V . . . -
W . - -
X - . . -
Y - . - -
Z - - . .
1 . - - - -
2 . . - - -
3 . . . - -
4 . . . . -
5 . . . . .
6 - . . . .
7 - - . . .
8 - - - . .
9 - - - - .
0 - - - - -
ASCIIコードは、AからZは最大4文字の符号になるので
長点、短点の組み合わせを逆順にしておきます。
'A'(0x41) . - → - . → 00 00 11 01 (0x0D)
'B'(0x42) - . . . → . . . - → 01 01 01 11 (0x57)
'C'(0x43) - . - . → . - . - → 01 11 01 11 (0x77)
'D'(0x44) - . . → . . - → 00 01 01 11 (0x17)
'E'(0x45) . → . → 00 00 00 01 (0x01)
'F'(0x46) . . - . → . - . . → 01 11 01 01 (0x75)
'G'(0x47) - - . → . - - → 00 01 11 11 (0x1F)
'H'(0x48) . . . . → . . . . → 01 01 01 01 (0x55)
'I'(0x49) . . → . . → 00 00 01 01 (0x05)
'J'(0x4A) . - - - → - - - . → 11 11 11 01 (0xFD)
'K'(0x4B) - . - → - . - → 00 11 01 11 (0x37)
'L'(0x4C) . - . . → . . - . → 01 01 11 01 (0x5D)
'M'(0x4D) - - → - - → 00 00 11 11 (0x0F)
'N'(0x4E) - . → . - → 00 00 01 11 (0x07)
'O'(0x4F) - - - → - - - → 00 11 11 11 (0x3F)
'P'(0x50) . - - . → . - - . → 01 11 11 01 (0x7D)
'Q'(0x51) - - . - → - . - - → 11 01 11 11 (0xDF)
'R'(0x52) . - . → . - . → 00 01 11 01 (0x1D)
'S'(0x53) . . . → . . . → 00 01 01 01 (0x15)
'T'(0x54) - → - → 00 00 00 11 (0x03)
'U'(0x55) . . - → - . . → 00 11 01 01 (0x35)
'V'(0x56) . . . - → - . . . → 11 01 01 01 (0xD5)
'W'(0x57) . - - → - - . → 00 11 11 01 (0x3D)
'X'(0x58) - . . - → - . . - → 11 01 01 11 (0xD7)
'Y'(0x59) - . - - → - - . - → 11 11 01 11 (0xF7)
'Z'(0x5A) - - . . → . . - - → 01 01 11 11 (0x5F)
数字の場合'0'から'9'なので、展開は次のように変換。
'1'(0x31) . - - - - → - - - - . → 11 11 11 11 01 → (0x03 0xFD)
'2'(0x32) . . - - - → - - - . . → 11 11 11 01 01 → (0x03 0xF5)
'3'(0x33) . . . - - → - - . . . → 11 11 01 01 01 → (0x03 0xD5)
'4'(0x34) . . . . - → - . . . . → 11 01 01 01 01 → (0x03 0x55)
'5'(0x35) . . . . . → . . . . . → 01 01 01 01 01 → (0x01 0x55)
'6'(0x36) - . . . . → . . . . - → 01 01 01 01 11 → (0x01 0x57)
'7'(0x37) - - . . . → . . . - - → 01 01 01 11 11 → (0x01 0x5F)
'8'(0x38) - - - . . → . . - - - → 01 01 11 11 11 → (0x01 0x7F)
'9'(0x39) - - - - . → . - - - - → 01 11 11 11 11 → (0x01 0xFF)
'0'(0x30) - - - - - → - - - - - → 11 11 11 11 11 → (0x03 0xFF)
数字は5文字固定なので、10ビット必要。
2アドレスに1数字分のCW符号を格納する仕様。
アルファベット26文字に数字10文字を加えて
アドレスA1からA7をASCIIコードに接続します。
アドレスA0は、1か0を指定してROMシーケンサからの
信号で外部レジススタに12ビット分のデータを転送。
テーブルは、2アドレスで1文字なので、次のように
展開していきます。
'A'(0x41) . - → - . → 00 00 11 01 (0x00 0x0D)
'B'(0x42) - . . . → . . . - → 01 01 01 11 (0x00 0x57)
'C'(0x43) - . - . → . - . - → 01 11 01 11 (0x00 0x77)
'D'(0x44) - . . → . . - → 00 01 01 11 (0x00 0x17)
'E'(0x45) . → . → 00 00 00 01 (0x00 0x01)
'F'(0x46) . . - . → . - . . → 01 11 01 01 (0x00 0x75)
'G'(0x47) - - . → . - - → 00 01 11 11 (0x00 0x1F)
'H'(0x48) . . . . → . . . . → 01 01 01 01 (0x00 0x55)
'I'(0x49) . . → . . → 00 00 01 01 (0x00 0x05)
'J'(0x4A) . - - - → - - - . → 11 11 11 01 (0x00 0xFD)
'K'(0x4B) - . - → - . - → 00 11 01 11 (0x00 0x37)
'L'(0x4C) . - . . → . . - . → 01 01 11 01 (0x00 0x5D)
'M'(0x4D) - - → - - → 00 00 11 11 (0x00 0x0F)
'N'(0x4E) - . → . - → 00 00 01 11 (0x00 0x07)
'O'(0x4F) - - - → - - - → 00 11 11 11 (0x00 0x3F)
'P'(0x50) . - - . → . - - . → 01 11 11 01 (0x00 0x7D)
'Q'(0x51) - - . - → - . - - → 11 01 11 11 (0x00 0xDF)
'R'(0x52) . - . → . - . → 00 01 11 01 (0x00 0x1D)
'S'(0x53) . . . → . . . → 00 01 01 01 (0x00 0x15)
'T'(0x54) - → - → 00 00 00 11 (0x00 0x03)
'U'(0x55) . . - → - . . → 00 11 01 01 (0x00 0x35)
'V'(0x56) . . . - → - . . . → 11 01 01 01 (0x00 0xD5)
'W'(0x57) . - - → - - . → 00 11 11 01 (0x00 0x3D)
'X'(0x58) - . . - → - . . - → 11 01 01 11 (0x00 0xD7)
'Y'(0x59) - . - - → - - . - → 11 11 01 11 (0x00 0xF7)
'Z'(0x5A) - - . . → . . - - → 01 01 11 11 (0x00 0x5F)
'1'(0x31) . - - - - → - - - - . → 11 11 11 11 01 → (0x03 0xFD)
'2'(0x32) . . - - - → - - - . . → 11 11 11 01 01 → (0x03 0xF5)
'3'(0x33) . . . - - → - - . . . → 11 11 01 01 01 → (0x03 0xD5)
'4'(0x34) . . . . - → - . . . . → 11 01 01 01 01 → (0x03 0x55)
'5'(0x35) . . . . . → . . . . . → 01 01 01 01 01 → (0x01 0x55)
'6'(0x36) - . . . . → . . . . - → 01 01 01 01 11 → (0x01 0x57)
'7'(0x37) - - . . . → . . . - - → 01 01 01 11 11 → (0x01 0x5F)
'8'(0x38) - - - . . → . . - - - → 01 01 11 11 11 → (0x01 0x7F)
'9'(0x39) - - - - . → . - - - - → 01 11 11 11 11 → (0x01 0xFF)
'0'(0x30) - - - - - → - - - - - → 11 11 11 11 11 → (0x03 0xFF)
データ構成が確定したので、ROMシーケンサの1文字符号
出力の順序を考えます。
- アドレスA0に0出力
- ROMアドレス出力
- 時間待ち
- 下位8ビットをレジスタにラッチ
- アドレスA0に1出力
- ROMアドレス出力
- 時間待ち
- 上位4ビットをレジスタにラッチ
- レジスタのビットアドレス出力(0)
- 時間待ち
- レジスタのビットアドレス出力(1)
- 時間待ち
- レジスタのビットアドレス出力(2)
- 時間待ち
- レジスタのビットアドレス出力(3)
- 時間待ち
- レジスタのビットアドレス出力(4)
- 時間待ち
- ASCIIコードを踏んだROMのアドレスに+1
- 1にもどる
すべてのCW符号は、上のシーケンスを利用して
長点、短点を出力し、1文字分の処理を終了後
また上のシーケンスを繰り返します。
連続してメッセージ用CW符号を出力したいときは
20ステップ目に次のステップのアドレスを入れて
対応。
信号数とアドレス数が増えるので、「8ビットフィード
バックタイプROMシーケンサ」を使います。
目次
前
次