roboforum.ru

Технический форум по робототехнике.

AVR - Генерация случайного числа

AVR - Генерация случайного числа

-= Александр =- » 21 окт 2009, 19:08

Я тут поглядел - а ведь rand() при включении питания всегда выплевывает одинаковую цепочку чисел... И без часов реального времени или какого-нить внешнего пинка получить разные (хоть и псевдослучайные) цепочки нельзя. Может как-нить шум АЦП для этого дела использовать? Кто сталкивался с такой проблемой?

Re: AVR - Генерация случайного числа

repository » 21 окт 2009, 19:18

Как в мк не знаю, на компе генератор нужно иниацилизировать перед использованием и сохранять значение
Вот например:
Код: Выделить всёРазвернуть
unsigned long GetRand(void) 
{
    static unsigned long t = 1;
    unsigned long k;
   
    k = t / 12773;
    t = 16807 * (t - k * 12773) - 2836 * k;
   
    return t;
}
Можно так же поступить на МК...
Или как то так:
Hardware Random Number Generator: http://www.cryogenius.com/hardware/rng/

Re: AVR - Генерация случайного числа

EdGull » 21 окт 2009, 19:31

нужно мерить последние знаки ацп по питанию

Re: AVR - Генерация случайного числа

contr » 21 окт 2009, 20:12

нужно мерить последние знаки ацп по питанию

диапазон будет маленьким
Можно подать на АЦП любой изменяющийся сигнал, в т.ч. и с амплитудой выше опорного. А можно с внешнего генератора прямоугольников и измерять длительность от включения МК. За счет неопределенности момента включения МК и получим случайное значение.

Re: AVR - Генерация случайного числа

boez » 21 окт 2009, 20:33

А большой диапазон и не нужен, 1 бита достаточно. Сделать 16 или 32 измерения и слить их в одно число. Если в использованном AVR у АЦП есть предусилитель - его тоже стоит включить, станет сильнее шуметь. Если вообще нету АЦП - то надо лепить что-то к компаратору.

Re: AVR - Генерация случайного числа

=DeaD= » 21 окт 2009, 20:51

А еще можно в EEPROMе считать сумму байт и брать за основу при включении девайса ;)
И дописывать туда естественно в обязательном порядке каждый раз что-нибудь эдакое.

Re: AVR - Генерация случайного числа

avr123.nm.ru » 21 окт 2009, 21:12

Может с XTAL2 через резистор 10 кОм сигнал на АЦП подать ? И по результату АЦП делать паузу до следующего АЦП - ИМХО довольно "случайно" получится.

Re: AVR - Генерация случайного числа

Сергей » 21 окт 2009, 21:15

сам не пробовал - может просто найти регистр в МК, значение которого по включению не определено и считать?

Re: AVR - Генерация случайного числа

Michael_K » 21 окт 2009, 22:23

Можно мерить расхождение частот RC и кварцевого генератора (можно даже без внешних компонентов через вотчдог - только долго через ресет летать...)

Re: AVR - Генерация случайного числа

contr » 21 окт 2009, 22:58

Сделать 16 или 32 измерения и слить их в одно число.

Хорошая идея! Для "орел-решка" просто бита хватит, а "кости" сливаем. И лишних деталек не надо. :good:

Re: AVR - Генерация случайного числа

avr123.nm.ru » 22 окт 2009, 10:52

Michael_K писал(а):Можно мерить расхождение частот RC и кварцевого генератора (можно даже без внешних компонентов через вотчдог - только долго через ресет летать...)


Можно просто конденсатор добавить к предложеному выше резистору с хтал2 на АЦП - получим ФНЧ с нестабильными параметрами.

Re: AVR - Генерация случайного числа

=DeaD= » 22 окт 2009, 11:11

Буржуи вот чего пишут:
If you need really true randomness you need to find real world source that could inject some entropy. This could be any noisy diode connected to ADC. Such random generators are so called Hardware Random Number Generators. They often use some microscopic phenomena like thermal noise, photoelectric effect, etc.


Добавлено спустя 31 секунду:
Сам не знаю что такое, но думаю авр123 легко разберет ;)

Re: AVR - Генерация случайного числа

avr123.nm.ru » 22 окт 2009, 11:12

Дак сигнал на кварце такой и есть - с шумами и прочими заплывами, а к нему еще шумы резитора добавятся.
Последний раз редактировалось avr123.nm.ru 22 окт 2009, 12:32, всего редактировалось 1 раз.

Re: AVR - Генерация случайного числа

SSG » 22 окт 2009, 12:24

Можно свою функцию написать на основе линейных сдвиговых регистров или более другую. 8)

Re: AVR - Генерация случайного числа

avr123.nm.ru » 22 окт 2009, 12:34

Вобщем сигнал с XTAL2 через резистор 10 ком подаем на АЦП и АЦП шунтируем парой последовательных диодов 1N4148 на землю и получаем кучу хаотичных гармоник на входе АЦП :D

А может просто "открытую" ножку АЦП оцифровывать к которой антенна в виде проводничка на плате подключена и брать младшие биты только - самые "шумные".


Rambler\'s Top100 Mail.ru counter