目次

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文字符号
 出力の順序を考えます。
  1. アドレスA0に0出力
  2. ROMアドレス出力
  3. 時間待ち
  4. 下位8ビットをレジスタにラッチ
  5. アドレスA0に1出力
  6. ROMアドレス出力
  7. 時間待ち
  8. 上位4ビットをレジスタにラッチ
  9. レジスタのビットアドレス出力(0)
  10. 時間待ち
  11. レジスタのビットアドレス出力(1)
  12. 時間待ち
  13. レジスタのビットアドレス出力(2)
  14. 時間待ち
  15. レジスタのビットアドレス出力(3)
  16. 時間待ち
  17. レジスタのビットアドレス出力(4)
  18. 時間待ち
  19. ASCIIコードを踏んだROMのアドレスに+1
  20. 1にもどる
 すべてのCW符号は、上のシーケンスを利用して  長点、短点を出力し、1文字分の処理を終了後  また上のシーケンスを繰り返します。  連続してメッセージ用CW符号を出力したいときは  20ステップ目に次のステップのアドレスを入れて  対応。  信号数とアドレス数が増えるので、「8ビットフィード  バックタイプROMシーケンサ」を使います。

目次

inserted by FC2 system