DpInRock 0 12 августа, 2008 Опубликовано 12 августа, 2008 · Жалоба Идея с Eprom мне не нра по одной причине. Бывали случаи ( в практике), когда портилось не только то куда пишешь. Т.е. снятие питания во время записи в общем случае чревато траблами в других местах. С кнопками - да. Но на устройстве нет ни одного элемента индикации. Очень неприятно давить кнопки наугад. Тем более - неспециалисту. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rx3apf 0 12 августа, 2008 Опубликовано 12 августа, 2008 · Жалоба Идея с Eprom мне не нра по одной причине. Бывали случаи ( в практике), когда портилось не только то куда пишешь. Т.е. снятие питания во время записи в общем случае чревато траблами в других местах. Я на 100% уверен, что время записи байта в EEPROM не может совпадать у разных экземпляров с точностью до такта процессора (точнее, дискретность будет равна времени цикла опроса флага завершения). А время записи (единицы mS) достаточно велико, чтобы прокрутить цикл по крайней мере пару сотен раз при разумной тактовой частоте... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
domowoj 0 13 августа, 2008 Опубликовано 13 августа, 2008 · Жалоба Как вообще генерировать случайные числа я себе представляю. Как генерировать их без внешних устройств - вот в этом вопрос. А поиском в инете пользовался? Встречал генерирование как случайных так и псевдослучайных чисел, если интересно, вечером дам ссылки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DpInRock 0 13 августа, 2008 Опубликовано 13 августа, 2008 · Жалоба Согласен, что задержка для флэшки не должна зависить от тактовой процессора. По идее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ledmaster 0 13 августа, 2008 Опубликовано 13 августа, 2008 (изменено) · Жалоба Конечно, обсуждаемая тема имеет некий общеобразовательный смысл, но такое решение очень ненадежно, поскольку велика вероятность совпадения "случайных" чисел, сгенерированных по одному и тому же алгоритму на почти идентичном "железе". Вы же не собираетесь производить Ваш девайс миллионами экземпляров, так почему бы просто не прошить в каждый, намертво, уникальный (в рамках предполагаемог количества экземпляров) серийный номер? За всех не поручусь, но возможность автоматического инкрементального присвоения серийного номера достаточно часто встречающаяся в средах разработки функция (обычно находится во вкладке флэш лоадера). Изменено 13 августа, 2008 пользователем Ledmaster Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DpInRock 0 13 августа, 2008 Опубликовано 13 августа, 2008 · Жалоба Решение достаточно. Ибо случайные числа любого диапазона имеют право совпадать. Даже самые настоящие случайные числа. Посему - все нормально. Когда не хотят, чтобы что-то совпадало, как например MAC адреса сетевых карт, то не используют случайные числа. Мое устройство просто в радиусе своего действия - 50 метров, не должно сталкиваться по адресам с другим устройством. И все. А устройств в одном радиусе действия ожидается не больше двух трех. Поэтому 65536 адресов - вполне достаточно. За глаза. (Где генерируется одно случайное число, там генерируется и второе - задача эквивалентная). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rv3dll 0 13 августа, 2008 Опубликовано 13 августа, 2008 · Жалоба Мое устройство просто в радиусе своего действия - 50 метров, не должно сталкиваться по адресам с другим устройством. когда микрочип разрабатывал свой модуль шифрования сигналов автосигнализаций он не надеясь на случайность и количество сделал их все разными алгоритм шифрования там достаточен чтобы поменять батарейку и после этого не ломать дверь. как будете разруливать ситуацию разряда батареи??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Ivan_ 0 13 августа, 2008 Опубликовано 13 августа, 2008 · Жалоба простите что вмешиваюсь ... #include <stdlib.h> и использовать rand(); при этом указать rand_max Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rx3apf 0 13 августа, 2008 Опубликовано 13 августа, 2008 · Жалоба простите что вмешиваюсь ... #include <stdlib.h> и использовать rand(); при этом указать rand_max "Шутку понял. Смешно" © Ну и какие результаты будут при выполнении на одинаковых кристаллах с одинаковой растактовкой и одинаковыми исходными данными ? Очень-очень условно можно _предполагать_ случайное состояние ячеек оперативной памяти, но не более того. Без привлечения дополнительных аппаратных средств можно полагаться либо на время записи в EEPROM данных (у PIC16 - можно, у MSP430 - нельзя), либо на разные тактовые частоты опорного генератора и RC-тактируемого WDT (как уже было предложено). Других вариантов я, например, вообще не представляю... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xemul 0 13 августа, 2008 Опубликовано 13 августа, 2008 · Жалоба Запустить таймер, дождаться сброса по собаке, прочитать таймер. А с прескейлером, назначенным на таймер собаки, даже 16-битный таймер успеет несколько раз переполниться. В новых пиках точность таймера собаки подняли, поэтому стОит или перемешивать биты, или пропустить считанное значение через CRC-образный алгоритм. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DpInRock 0 13 августа, 2008 Опубликовано 13 августа, 2008 · Жалоба когда микрочип разрабатывал свой модуль шифрования сигналов автосигнализаций он не надеясь на случайность и количество сделал их все разными алгоритм шифрования там достаточен чтобы поменять батарейку и после этого не ломать дверь. как будете разруливать ситуацию разряда батареи??? Адрес генерируется раз в жизни. И пишется во флэшку. Устройство крайне маленькое, потреблять должно не более 5 микроампер (в среднем). Достаточно сделать генерацию нового адреса по подсоединению батарейки, как все проблемы с совпадениями снимаются. Если совпало - просто переткни батарейку еще раз. Но я так не сделал. Ибо на пиковый случай, когда в одном месте собираются очень много устройств (сложная система), то там присутсвует управление устройством через RS232? где ты можешь в ручную задать все параметры. А для простых случаев - сойдет и так. Это устройство - просто радиокнопка на 10 выключателей. Типа умный дом и все такое. Просто встала задача при массовом тираже (всего 1000 шт. в год) упростить задачу записи разных адресов по умолчанию. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rx3apf 0 13 августа, 2008 Опубликовано 13 августа, 2008 (изменено) · Жалоба А для простых случаев - сойдет и так. Это устройство - просто радиокнопка на 10 выключателей. Типа умный дом и все такое. Просто встала задача при массовом тираже (всего 1000 шт. в год) упростить задачу записи разных адресов по умолчанию. И все же я бы подумал и о дополнительном "аппаратном" решении. В виде хоть какого джампера/кнопки на плате, выполняющего начальный сброс устройства. Т.е. при установке батареи хоть каким из предложенных способов генерируем некоторое "суррогатное" "случайное" число, а потом в течении какого-то разумного времени пользователь должен сделать сброс. А вот в течении этого времени до сброса крутить счетчик с максимальной скоростью. Момент сброса будет вполне случайным и результат (сохраняемый в оперативной памяти) - тоже. Ну, а если все ж сброса не было, то по истечении таймаута (а то цикл сожрет много электропитания) будет то, что сгенерировалось в момент включения. В конце концов, возможность аппаратного сброса есть практически везде и повсеместно, начиная от наручных часов... Стоп-стоп... Радиокнопка, говорите ? Т.е. кнопка уже есть ? Ну так от включения и до первого нажатия на кнопку можно медленно и печально, не особо расходуя питание, крутить какой-нибудь таймер. И по нажатию на кнопку сохранить полученный результат, который и будет требуемым "случайным числом". Или я чего-то в логике работы недопонял ? Изменено 13 августа, 2008 пользователем rx3apf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xelax 0 13 августа, 2008 Опубликовано 13 августа, 2008 · Жалоба Ставте DS2411 и не мучайтесь ненужными проблемами. Кнопки, еепром, ацп, память и прочее... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 13 августа, 2008 Опубликовано 13 августа, 2008 · Жалоба А слабо внимательно перечитать пост Rst7? И не заниматся народным творчеством? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ledmaster 0 13 августа, 2008 Опубликовано 13 августа, 2008 · Жалоба Ставте DS2411 и не мучайтесь ненужными проблемами. Кнопки, еепром, ацп, память и прочее... Да, дополнительные пару долларов себестоимости, это как раз то, что нужно для радиобрелка! :) А все таки, как насчет банальной сериализации? В конце концов, можно успокоится на внешней проге, которая непосредственно в .hex файл будет прописывать серийный номер и править CRC (если нужно) перед каждой прошивкой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться