Перейти к содержанию
    

Сгенерировать случайное число

Есть пикпроцессор. Внешних устройств - нет.

Требуется после старта программы сгенерировать случайный байт.

Старт программы осуществляется присоединением батарейки.

Число требуется ровно одно.

 

У двух одинаковых устройств после подсоединения батарейки должны генерироваться 2 разных числа.

 

Возможно ли такое? :07:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С точки зрения теории, всегда существует хоть и малая, вероятность, что числа будут одинаковыми.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если имеется АЦП, то возможно произвести измерение "весящей" в воздухе ноги и взять младший бит. И таким образом добрать до нужного количества бит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня нет висящих ног. Но хотелось бы решить хитростью какой-нибудь. Там все очень стабильно (питание от батарейки). И АЦП даст слишком малую разницу.

 

У меня впечатление, что это невозможно. Поэтому и обратился к мировому сообществу. Все синхронно. Была надежда что запись в память EPROM случайна по времени - но нет. Как-то одинаково все.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть пикпроцессор. Внешних устройств - нет.

Требуется после старта программы сгенерировать случайный байт.

Старт программы осуществляется присоединением батарейки.

Число требуется ровно одно.

 

У двух одинаковых устройств после подсоединения батарейки должны генерироваться 2 разных числа.

 

Возможно ли такое? :07:

Не забывайте: Разных байтов бывает всего лишь 256.

Т.е. вероятность совпадения "случайных" чисел у двух разных устройств будет минимум 1/256.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Разумеется. Мне достаточно будет если ДВА разных устройства выдадут просто разные числа. Скажем от 1 до 10.

Т.е. подсоединяем батарейку у двух устройств. А они с вероятностью хотя бы 50% выдают разные числа. (Хотелось бы вероятность побольше, но на худой конец хватит и такой).

 

Поясню.

При первом подключении батарейки устройство должно сгенерировать свой адрес - 1 байт. И все.

При этом другое устройство (с понятной вероятностью) должно сгенерировать другой байт.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а слабо еще серийник присвоить и завести его в механизм генерации. Плюс еще в епром писать для следующей генерации.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Слабо.

 

Надеюсь, что это на самом деле невозможно без внешнего источника случайного события.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы бы дали информации побольше о своем устройстве. Возможно получилось бы откуда-нть достать это число

Поясню.

При первом подключении батарейки устройство должно сгенерировать свой адрес - 1 байт.

нужен адрес устройства? может тогда задержать их во времени и по порядку присваивать адреса (ессно между собой их придется связать)

гадать можно долго. Подробней расскажите

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Эти устройства никак не связаны друг с другом. Лежат себе на складе, никого не трогают.

Приходит человек, берет устройство и уходит. Вставляет батарейку. Бабах - устройство придумало себе адрес.

 

Потом, через год, этот человек берет другое устройство. Приходит к себе домой, вставляет батарейку - бабах - устройство придумало себе адрес. И с тем устройством, что уже у него имеется - не совпадает (с учетом вероятности).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня нет висящих ног. Но хотелось бы решить хитростью какой-нибудь. Там все очень стабильно (питание от батарейки). И АЦП даст слишком малую разницу.

Так есть АЦП или нет? Даже если его вход не висит в воздухе, все равно младший разряд скакать будет, поэтому делаете n измерений, в каждом из которых берете младший разряд, и их них составляете n-битное случайное число.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Идея такая.

На входе АЦП RC-цепочка, соединённая с питанием. При включении засекаем время и мерим напряжение.

Младший байт, я думаю, будет достаточно случайным.

Ещё есть алгоритмы псевдослучайных последовательностей, можно использовать измеренное напряжение с АЦП для инициализации ПСП

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Действительно, мало информации. Мои соображения: если не писать ничего уникального внутри контроллера и ничего не цеплять снаружи, то гарантировать случайность невозможно. Однако, автор вопроса лукавит. Ведь если устройство никуда не подключается, то зачем ему адрес?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно попробовать вычитывать содержимое ОЗУ перед инициализацией, теоретически оно будет случайно.

А часы реального времени присутствуют???Если да, то тогда при условии что устройства не будут включатся одновременно, то можно просто складывать месяц + день + часы + минуты + секунды или что-то вроде того

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо за идею составлять число из младшего бита АЦП.

То, что нужно.

 

Добавлю к нему считывание посередине преобразования. СПАСИБО.

(Хотя, нет. не добавлю).

Изменено пользователем DpInRock

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...