一個小型微控制器(8位Atmel)控制許多燈光,以呈現具有許多精美隨機燈光序列的燈光錶演。
一個合適的偽RNG可以很好地完成其工作,但是我正在尋找一個好的種子。種子是必須的,因為如果有人同時打開多個這樣的設備,那麼如果它們都產生了相同的效果序列,直到它們由於各自的時鐘源的微小差異而緩慢地分開,效果就不好了。 / p>
對於我必須經常使用的偽RNG種子,一種非常好的方法是可能的,如果該設備必須通過按下按鈕或按下開關來啟動。 µc上電後,就可以啟動一個非常快速的計時器,並且第一次按下該按鈕時,該計時器的值就會觸發RNG。
問題是,在這種情況下,沒有按鈕。該程序必須在設備加電後立即啟動。
PCB上的位置非常有限(最多只能容納幾個最小的SMD零件) ),因此我正在尋找最小,最簡單的解決方案。因此,我將排除像真正的RNG硬件,無線電接收器之類的奇特解決方案。
我所擁有的只是CPU中的一個16位計時器,還有一個未使用的可訪問ADC的端口引腳。
我當前的解決方案是僅使用一個電阻(盡可能不准確)為ADC引腳提供大約一半的電源電壓,並為RNG注入第一個AD轉換值。但是,如今大多數10%的電阻器的誤差都遠低於1%(當我告訴他們我們想要他們能找到的質量最差的SMD電阻器時,想像供應商的面孔會很有趣),因此,同一種子開始的多個單位。
更好的選擇是進行多次轉換,並從這些測量的最低有效位中建立一個值。但是,我之前使用過這種µc類型的ADC,我知道它非常準確。以最快的速度運行ADC可能會有所幫助。
有人有更好的建議嗎?種子不需要完全均勻地分佈,但是分佈越均勻越好。一個16位種子且分佈完全均勻的夢想太好了,以至於無法實現,但是我認為在5位或6位上進行一半的體面分配可能就足夠了。