реклама на сайте
подробности

 
 
5 страниц V  < 1 2 3 4 > »   
Reply to this topicStart new topic
> Сгенерировать случайное число, Возможно ли?
rv3dll(lex)
сообщение Aug 12 2008, 12:42
Сообщение #16


Полное ничтожество
*****

Группа: Banned
Сообщений: 1 991
Регистрация: 20-03-07
Из: Коломна
Пользователь №: 26 354



1 на ацп завести напряжение батареи, через делитель из неточных резисторов немаркированных, которые будут ставить как попало.

разобраться с контроллером с его битовым файлом на загрузку и отвести там область, в которую писать ключ текущее время например - просто файл прошивки надо обработать программой перед каждой прошивкой.
Go to the top of the page
 
+Quote Post
Amper25
сообщение Aug 12 2008, 12:57
Сообщение #17


Местный
***

Группа: Свой
Сообщений: 215
Регистрация: 10-04-07
Пользователь №: 26 929



Можно сделать гораздо проще, без всяких АЦП и пр.

При первом подключении батарейки, запустить программный 8-бит счетчик и инкрементировать его по возможности с наибольшей частотой. Одновременно записывать его значение в ячейку(или поочередно в 2 ячейки) EEPROM. Потом выдернуть батарею и опять вставить.
Если время записи в EEPROM составляет 5-8мс, то если разница во временах удержания батареи разных устройств больше 5-8мс(что логично) то и "RANDOM" числа будут отличатся.

Единственное что можно добавить, лучше писать в 2 ячейки поочередно, и если питание обрывается на процессе стирания ячейки, то хотябы в одной из них будет число отличное от 0xFF.
Ну и само значение 0xFF надо считать не RANDOMOM.
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Aug 12 2008, 13:44
Сообщение #18


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Попробую. Хотя думаю, что запись в епром синхронная.
А АЦП стоит как вкопаный гад. Вот когда не надо, дергается. А тут железно меряет. Даже удивительно. И младший разряд стоит.

А может можно программатор научить ячейку образа памяти инкрементировать?
Точно. Просто напишу программку, которая раз в секунду увеличивает содержимое ячейки в нужном месте хексфайла. Правда, там еще надо будет контрольную сумму фиксить...
А программатор всегда проверяет файл на свежесть (ПикКит2).

Вот самый удобный наверное способ. Спасибо всем за участие.
Как оказывается ен просто не на IBM число сгенерить.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
one_man_show
сообщение Aug 12 2008, 13:47
Сообщение #19


Помогу, чем смогу
******

Группа: Админы
Сообщений: 2 786
Регистрация: 28-05-04
Из: Москва
Пользователь №: 25



Может быть ошибаюсь, давно не работал с пИками, но вроде была раньше какая-то возможность программировать область памяти так, чтобы получить неустойчивое значение, тогда достаточно при запуске читать известные ячейки памяти программ


--------------------
С уважением,
Ваган Саруханов
Проекты|Форум|Facebook|Linkedin
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Aug 12 2008, 14:09
Сообщение #20


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Да сложно все получается, если программно решать вопрос.
Дело копеечное.
Все-таки правильнее сделать процесс управляемым. Т.е. снаружи писать прогу, которая правит хекс. По крайней мере надежно и точно. И числа будут точно не совпадать.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Aug 12 2008, 15:25
Сообщение #21


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Может кому пригодится.
Опробованы все способы.

Самым надежным и приятным в реализации оказался озвученный тут совет суммирования памяти.

Тесты показали, что память инициализируется действительно случайными числами. Даже не FF 00 F0 0F. А нормальными такими числами. Там, 18, 75, 36....

Полсотни раз порпобовал - числа не повторились. Хотя могли бы.

А реализация - всего одна строка.

Рад в усмерть. Спасибо еще раз.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
Amper25
сообщение Aug 12 2008, 15:45
Сообщение #22


Местный
***

Группа: Свой
Сообщений: 215
Регистрация: 10-04-07
Пользователь №: 26 929



Цитата
Рад в усмерть. Спасибо еще раз.


Не стоит устраивать преждевременных празднований. С Пиками много не работал, не могу сказать. Но на AVR с tiny26 были случаи когда в L(Low voltage) версии память инициализировалась случайными числами, а в обычной версии контроллера - сплошными нулями.

Вообщем, может полуцчится так, что на некоторых версиях это не сработает.

Сообщение отредактировал Amper25 - Aug 12 2008, 15:46
Go to the top of the page
 
+Quote Post
kurtis
сообщение Aug 12 2008, 16:01
Сообщение #23


Местный
***

Группа: Свой
Сообщений: 466
Регистрация: 21-06-05
Пользователь №: 6 205



Возможно вы использовали разные версии компилятора. Т.к. обнуление ОЗУ это задача программы, и например в WinAVR процедуры "обнуления" ОЗУ находятся в модуле crtxxxx.o, и можно увидеть как в начале программы, еще перед вызовом main(), выполняется код, который обнуляет секцию bss (т.е. ОЗУ)
Go to the top of the page
 
+Quote Post
Amper25
сообщение Aug 12 2008, 16:09
Сообщение #24


Местный
***

Группа: Свой
Сообщений: 215
Регистрация: 10-04-07
Пользователь №: 26 929



Для tiny26 я писал на ASM, и никаких процедур обнуления там не было.
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Aug 12 2008, 16:13
Сообщение #25


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Я делаю все из МСС18. Не стал вмешиваться в стартапные вещи (еще чего, нам, боярам не с руки ковыряться). У компилятора действительно есть неинициализируемые области, которые он явно указывает.
Но так как я суммирую вообще ВСЮ память, то все нормально получится.
На самый худой конец (самый худой) - последствия не очень фатальны. Это не прицел баллистической ракеты.

Действительно, почему я не стал в первую очередь ориетироваться на память, ибо опыт работы с осталными процами говорил, что память чаще всего именно обнуляется аппаратно (в смысле, сама по себе). ....


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
Rst7
сообщение Aug 12 2008, 16:35
Сообщение #26


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



На память я бы полагаться не стал. А вот использовать тот факт, что тактовая частота WDT и тактовая самого проца - суть разные генераторы, вполне можно. Для этого достаточно запустить TMR0 по сбросу от PowerUp и по сбросу от WDT взять несколько младших битов TMR0. При необходимости повторить до получения нужного количества бит. Кстати, какой основной генератор используется, внутренний RC, внешний RC или кварц?


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Aug 12 2008, 17:00
Сообщение #27


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Внутренний.
Не хотелось бы строить еще один автомат. Хотя так можно, конечно.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Aug 12 2008, 19:25
Сообщение #28


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



Цитата(DpInRock @ Aug 12 2008, 11:10) *
Требуется после старта программы сгенерировать случайный байт.

Нужны стабилитрон, в качестве генератора шума, резистор и АЦП на борту, желательно с усилителем.
Я использовал дифференциальный и дополнительно RC цепочку для выделения постоянной составляющей, для подключения второго входа.
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Aug 12 2008, 20:39
Сообщение #29


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Как вообще генерировать случайные числа я себе представляю.
Как генерировать их без внешних устройств - вот в этом вопрос.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
DeadMoroz
сообщение Aug 12 2008, 23:22
Сообщение #30


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 3-02-05
Пользователь №: 2 391



Соглашусь с Amper25:
"Можно сделать гораздо проще, без всяких АЦП и пр.

При первом подключении батарейки, запустить программный 8-бит счетчик и инкрементировать его по возможности с наибольшей частотой. Одновременно записывать его значение в ячейку(или поочередно в 2 ячейки) EEPROM. Потом выдернуть батарею и опять вставить.
Если время записи в EEPROM составляет 5-8мс, то если разница во временах удержания батареи разных устройств больше 5-8мс(что логично) то и "RANDOM" числа будут отличатся.

Единственное что можно добавить, лучше писать в 2 ячейки поочередно, и если питание обрывается на процессе стирания ячейки, то хотябы в одной из них будет число отличное от 0xFF.
Ну и само значение 0xFF надо считать не RANDOMOM."

Если есть кнопка или свободный вход, то можно поступить так: перед включением устройства нажимаем кнопку/устанавливаем вход в нужный уровень и после включения питания в процессе инициализации проверяем ее состояние - если активно, то инкриментируем 1/2 байта, далее, после того как пользователь отпустит кнопку/деактивирует вход, считываем текущее значение переменной. Проверено - работает.
Go to the top of the page
 
+Quote Post

5 страниц V  < 1 2 3 4 > » 
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 21:06
Рейтинг@Mail.ru


Страница сгенерированна за 0.01488 секунд с 7
ELECTRONIX ©2004-2016