|
Инициализация псевдослучайной последовательности, как это сделать? |
|
|
|
Mar 11 2011, 05:42
|

Профессионал
    
Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581

|
Отправная точка: миниатюрное устройство, где каждый новый компонент - лишний. устройство формирует ряд "случайных" сигналов, используя rand(). в сущности, алгоритм генерации ПСПЧ не принципиален. но есть большая проблема: два одинаковых устройства, включенные одновременно, генерируют абсолютно одинаковые "случайные" последовательности, что очень плохо. более того, после подачи питания устройство всегда стартует с одного и того же "места", что тоже очень плохо.
есть, конечно, функция srand(), которая могла бы помочь, но для нужного результата эту функцию нужно передать случайное число... круг замкнулся.
вопрос знатокам: посоветуйте, какими простыми и дешевыми средствами реализовать получение хотя бы одного-единственного, но на самом деле случайного числа в программе?
сразу ограничу круг советов: надежда на то, что после включения питания ячейки ОЗУ содержат случайные данные, не срабатывает, в подавляющем большинстве у одного и того же контроллера при более-менее одинаковых условиях содержимое ОЗУ после подачи питания так же более-менее одинаковое, вариации крайне недостаточные для того, чтобы считать их действительно случайными - проверено на некотором количестве atmega32.
--------------------
Я бы взял частями... но мне надо сразу.
|
|
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 14)
|
Mar 11 2011, 06:53
|

Профессионал
    
Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581

|
пока что не нашел такого апноута... с АЦП я пробовал, но что-то не очень хорошо вышло... вроде поначалу показалось есть случайность, а потом она куда-то пропала... правда, я использовал "веру" в то, что младший бит АЦП шумит, и поэтому мерял 8 раз небольшой уровень и младший бит результата задвигал в байт... а вот время записи EEPROM - оно же может зависеть от питания, температуры, частоты встроенного генератора, но для одинаковых условий будет неизменным, как мне кажется... 2 девайса могут получиться с разными последовательностями, но каждое будет всегда стартавать однотипно...
--------------------
Я бы взял частями... но мне надо сразу.
|
|
|
|
|
Mar 11 2011, 07:52
|

Профессионал
    
Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581

|
Цитата(Petka @ Mar 11 2011, 10:24)  На самом деле "действительно случайное" число не нужно. Нужно всего-лишь навсего при каждом запуске в srand подсовывать ДРУГОЕ число. Получить его достаточно просто. При каждом запуске инкрементируйте какую-нибудь ячейку EEPROM и данным значением инициализируйте srand. да, действительно  спасибо, что натолкнули на эту мысль, хотя я уже получил аналогичный совет на телесиськах http://530.ru/wwwboards/mcontrol/2979/messages/1182899.shtmlесли вдруг кому потребуется действительно случайный генератор чисел, то я нашел целый трактат по этой теме (может, это его посчитали за апноут атмеля?) http://www.avrfreaks.net/index.php?name=PN...pic&t=59417
--------------------
Я бы взял частями... но мне надо сразу.
|
|
|
|
|
Mar 11 2011, 08:07
|
Гуру
     
Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047

|
Цитата(ARV @ Mar 11 2011, 08:42)  вопрос знатокам: посоветуйте, какими простыми и дешевыми средствами реализовать получение хотя бы одного-единственного, но на самом деле случайного числа в программе? Уникального серийника нет ? Ну, еще можно воспользоваться тем, что WDT тактируется от RC-генератора, и при основном тактировании от кварца можно измерить время срабатывания WDT и плясать от него. Думаю, достаточно случайное значение, при высокой дискретизации счета.
|
|
|
|
|
Mar 11 2011, 08:20
|

Профессионал
    
Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581

|
Цитата(rx3apf @ Mar 11 2011, 11:07)  Уникального серийника нет ? Ну, еще можно воспользоваться тем, что WDT тактируется от RC-генератора, и при основном тактировании от кварца можно измерить время срабатывания WDT и плясать от него. Думаю, достаточно случайное значение, при высокой дискретизации счета. да, этот метод рассматривался в числе прочих в вышеупомянутом мною трактате  спасибо, я считаю, что на данном этапе я свою проблему решил. P.S. на счет 1,2,3,4,5 и т.д. - я вообще молчу (звездавшоке)
--------------------
Я бы взял частями... но мне надо сразу.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|