小型のマイクロコントローラー(8ビットAtmel)は、多くの派手なランダム化されたライトシーケンスでライトショーを提示するために、多数のライトを制御します。
適切な擬似RNGがうまく機能しますが、私はそれのための良い種を探しています。誰かが複数のそのようなデバイスを同時にオンにした場合、個々のクロックソースのわずかな違いのためにゆっくりと離れるまで同じ効果のシーケンスをすべて生成した場合、見た目が悪くなるため、シードが必要になります。
よく使用する擬似RNGをシードする非常に良い方法は、ボタンを押すかスイッチを押すことで起動する必要があるデバイスの場合に可能です。µcの電源がオンになるとすぐに、非常に高速のタイマーを開始できます。このタイマーの値は、ボタンが初めて押されるとすぐにRNGをシードします。
問題は、このシナリオではボタンがないことです。デバイスの電源を入れたらすぐにプログラムを開始する必要があります。
PCB上の場所は非常に限られているため(非常に小さなSMDパーツがいくつか収まることはありません)、可能な限り最小で最もシンプルなソリューションを探しています。そのため、真のRNGハードウェア、ラジオ受信機などの派手なソリューションは除外します。
私が持っているのは、CPUの16ビットタイマーカウンターと、ADCにアクセスする未使用のポートピンだけです。
私の現在の解決策は、抵抗を使用して(できるだけ不正確)、ADCピンに約半分の電源電圧を供給し、RNGに最初のAD変換値をシードすることです。ただし、最近ではほとんどの10%抵抗器の精度が1%を大幅に下回っているため(見つけることができる最悪の品質のSMD抵抗器が必要だと伝えると、サプライヤーの顔を想像するのは楽しいでしょう)、非常に高い確率で同じシードで始まる複数のユニット。
より良い代替策は、複数の変換を行い、これらの測定値の最下位ビットから値を構築することです。ただし、以前はこのµcタイプのADCを使用しましたが、非常に正確であることはわかっています。ここでは、ADCを可能な限り速い速度で実行すると役立つ場合があります。
誰かより良い提案がありますか?シードは完全に均一に分布する必要はありませんが、分布が均一であればあるほど良いです。完全に均一な分布を持つ16ビットシードは、あまりにも良い夢ですが、5ビットまたは6ビットの中間のまともな分布で十分だと思います。