AVR AT90S2323利用 擬似ランダムノイズ・ジェネレータ
線形帰還シフトレジスタ(Linear Feedback Shift Register, LFSR)を用いて実装する擬似ランダムノイズ列の生成にしばしば用いられる。
ハードウェアで実装する場合にはシフトレジスタとXORゲートをもってきて構成するのだが、ここでは ATMELのAVR AT90S2323 を用いてソフトウェア実装を行ってみた。8pinのAVRであり、無駄のない非常にシンプルな構成となることが期待される。
実装その1
16bitのシフトレジスタを定義した。ビット15, 14, 6, 0 でタップしてXORに突っ込みパリティを生成する。一連の操作が終わったらシフトレジスタをシフトする。以上を1単位としてループで繰り返し実行するという処理内容となる。
ハードウェアは非常に単純なものである(回路図)。AT90S2323は外部に水晶かセラロックが必要であるため、このような構成になった。ここでは 10MHzのセラロックを使用した。
ソフトウェアもとても小さい(ソースコード)。
実際どのような音であるか、サウンドサンプルをここに示す (WAV, 1sec)。
よく聞くとバタバタバタとなにか変調されたような音が耳につく。ビート的でもある。インパクト性のリズム音源にはじゅうぶんであるが、長い持続音には向かない感じである。さらなる検討が必要だろう。
(初出 2003-07-21)
実装その2
実装その1で生じていた変調性の音は、LFSRの周期の更新で変調されていたと考えられる。バタバタ音を避けるために、システムクロックを10MHzから1MHzに変更した。
これでバタバタ音はかなり目立たなくなった(サウンドサンプル, 1MHz clock version, WAV, 1sec)。そして 新回路図。クロック周波数を変更しただけのものである。ソフトウェアは実装その1のものと同じ。
(2003-08-16)
実装その3
さらにバタバタ変調音の問題を避けるためにLFSRのレジスタ長をこれまでの16ビットから24ビットに伸ばしてみた。
結果は上々でバタバタ音がすっかりなくなった。
ここに24ビットLFSR版の新ソースコードとサウンドサンプル (24bit LFSR version, WAV, 1sec) を示す。回路図は実装その2のものと同一である。
(2003-08-17)
成果物
最終的な実装仕様は、クロック1MHz, 24ビット LFSR となった。その成果物をここにまとめる。
PIC12C509A利用 擬似ランダムノイズ・ジェネレータ
AVRで擬似ランダムノイズ・ジェネレータを実現できたので、PICでもやってみようと考えた。
実装
PICとして、PIC12C509Aを採用した。これはwrite onceデバイスである。ワンタイムのデバイスを敬遠するムキには、フラッシュ版のPIC12F629を利用することをお勧めする。なお最近は 12C509 のフラッシュ版として PIC12F509 という石もあるようなので、試みられたい。
ここに挙げたPICは内部発振回路をもっているために、外部に水晶発振子やレゾネータを必要としない。このため部品点数を減らすことができ、有用である。 上記PICの内部発振周波数は 4MHzである。しかしPICでは4クロックで1つの実行サイクルとなるために、4MHzで動作するPICは1MHz動作のAVRと等価となる。
実装では 24ビットのシフトレジスタを用い、bit 23、22、14、0 からパリティを生成している。
こちらに サウンドサンプル (WAV, 1sec) を示す。良いノイズサウンドで、AVRによる実装のものと同じような音となっている。
PICの内部発振回路とリセット回路を使用しているために、ハードウェアは究極にシンプルなものとなっている(回路図)。 ソフトウェアも小さい (ソースコード Microchip MPLAB用)。 ひとつ装備されてはいかがでしょうか。
(2003-08-24)
成果物
内部発振クロック4MHz, 24ビット LFSR となった。その成果物をここにまとめる。
AVR ATtiny13利用 擬似ランダムノイズ・ジェネレータ
ながらくPIC版にその座を譲っていた擬似ランダムノイズ・ジェネレータだが、AVRにおいても内部発振回路を持った8pin品が充実してきた。そこで ATtiny13を利用したものを製作してみた。
実装
ATtiny13は内部にクロック発振回路を持っている。工場出荷時に 9.6MHz で発振したクロックを8分周したものがCPUクロックとして供給されているとのことである。またリセット回路も内蔵している。これらをそのまま用いることによって、AT90S2323版では外部に必要だった部品を省略することが可能となった。
ATtiny13版であるが、その実装はAT90S2323版の実装その3をそのまま用いている。ソースコードのインクルードファイル名を書き換えただけでそのまま動作させることができた。
実現例
非常に小さく収めることができることを利用して、ノイズ発生冶具を小さく作ってみた。AVRにATtiny13Vを使用し これを3V(単5電池2本)で動作させ、ガムのケースに収めてみた。

成果物
内部発振クロック 1.2MHz, 24ビット LFSR となった。その成果物をここにまとめる。
(2006-05-22)
