Mały mikrokontroler (8-bitowy Atmel) steruje wieloma światłami, aby zaprezentować pokaz świetlny z wieloma fantazyjnymi losowymi sekwencjami światła.
Odpowiedni pseudo-RNG dobrze sobie radzi, ale szukam dla niego dobrego ziarna. Ziarno będzie konieczne, ponieważ jeśli ktoś włączy jednocześnie wiele takich urządzeń, nie będzie dobrze wyglądać, jeśli wszystkie wygenerują te same sekwencje efektów, dopóki nie zaczną się powoli rozsuwać z powodu niewielkich różnic w poszczególnych źródłach zegara.
Bardzo dobra metoda wysiewu pseudo-RNG, której często używałem, jest możliwa w przypadku urządzenia, które należy uruchomić przez naciśnięcie przycisku lub naciśnięcie przełącznika. Zaraz po włączeniu µc można uruchomić bardzo szybki timer, a wartość tego timera uruchamia RNG, gdy tylko przycisk zostanie naciśnięty po raz pierwszy.
Problem polega na tym, że w tym scenariuszu nie ma przycisków. Program musi zostać uruchomiony natychmiast po włączeniu urządzenia.
Miejsce na płytce drukowanej jest bardzo ograniczone (może się zmieścić tylko kilka bardzo małych części SMD), więc szukam możliwie najmniejszego i najprostszego rozwiązania. Dlatego wykluczę wymyślne rozwiązania, takie jak prawdziwy sprzęt RNG, odbiorniki radiowe itp.
Wszystko, co mam, to 16-bitowy licznik timera w procesorze i nieużywany portpin, który ma dostęp do ADC.
Moje obecne rozwiązanie polega na użyciu rezystora (tak niedokładnego, jak to możliwe), aby dostarczyć około połowy napięcia zasilania na pin ADC i zaszczepić RNG pierwszą wartością konwersji AD. Jednak obecnie większość 10% rezystorów ma niedokładność znacznie poniżej 1% (fajnie byłoby wyobrazić sobie twarz dostawcy, gdy mówię im, że chcemy najgorszej jakości rezystorów SMD, jakie mogą znaleźć), więc istnieje bardzo duża szansa na wiele jednostek zaczynających się od tego samego ziarna.
Lepszą alternatywą byłoby wykonanie wielu konwersji i zbudowanie wartości z najmniej znaczących bitów tych pomiarów. Jednak wcześniej użyłem ADC tego typu µc i wiem, że jest bardzo dokładny. Pomocne może być uruchomienie ADC z najszybszą możliwą prędkością.
Czy ktoś ma lepszą sugestię? Nasiona nie muszą być idealnie równomiernie rozmieszczone, ale im bardziej równomierny jest rozkład, tym lepiej. 16-bitowe ziarno z idealnie jednolitym rozkładem byłoby snem zbyt pięknym, aby mogło być prawdziwe, ale myślę, że wystarczający może być w połowie przyzwoity rozkład na 5 lub 6 bitów.