Технический форум по робототехнике.
EdGull » 03 мар 2007, 21:31
Народ, подскажите как на МК сгенерировать случайное число (СЧ)? Смысл, подключаем какое-то кол-во МК в одну шину, например RS485. Все МК питаются от одного источника. Подаем питание, на основе этого СЧ генерируем временную задержку и каждый МК (у всех МК код одинаковый) в шину кидает свою посылку. Гипотетически посылки не должы сталкиваться. Теперь вопрос, какую схему прикрутить к МК чтобы он генерировал СЧ?
avr123.nm.ru » 03 мар 2007, 22:13
В моем FAQ по микроконтроллерам в кратком курсе:
http://avrfaq.narod.ru/ есть такое:
_77 псевдоСлучайное число получить.txt
Делал я простенький генератор... — Bill 17.08.2005
Код: Выделить всё • Развернуть typedef union _random { long number; char bytes[4]; } Random; Random random; static void rand(char seed) { char _temp; if (seed) // Initialize the generator random.number = seed; _temp = (random.bytes[0] ^ random.bytes[3]) & (1<<6); random.number <<= 1; if (_temp) random.bytes[0] |= 0x01; }
=======================
Еще вариант:
Берем число сдвигаем на один разряд вправо(влево). XOR крайнего правого(левого) и какого нить другого битов пишем в крайний левый(правый) бит.
Из конфы Телесистем, как и почти весь FAQ.
http://telesys.ru/wwwboards/mcontrol/index.shtml
avr123.nm.ru » 03 мар 2007, 22:25
И стандартные функции в CVAVR например int rand (void) generates a pseudo-random number between 0 and 32767. в BASCOM наверняка тоже есть. ======= Настоящие случайные числа делают генератором шума подаваемого на ногу МК и чтением несколько раз того что на ноге.
EdGull » 03 мар 2007, 22:27
вот я и хотел эту схему, говорят что она на одном транзисторе собирается.
avr123.nm.ru » 03 мар 2007, 22:42
С одинаковой прошивкой ? псевдослучайное и означает что оно псевдо. т.е. кореляция есть конечно. ========== А настоящее случайное только из шума - т.е. наиболее просто. шм делают из транзистора одного и включать его можно по необходимости. Ну или RC генератор на инверторе типа 74hc14 на чатоту не совпадающую с кварцем и не крfтную с ним. Или на компараторе если он не занят в МК или на ОУ внешнем, куча вариантов. Детали имеют разброс и очевидно закономерности между устройствами в партии не будет. ========== либо на АЦП подать даже такт от кварца через резистор 10 КОм ! с XTAL2 и оцифровывать его - т.е. черти что будет мерить и получатся случайные числа.
EdGull » 03 мар 2007, 22:52
с XTAL2 мне понравилась идея. в понедельник обязательно попробую
avr123.nm.ru » 03 мар 2007, 23:12
только ИМХО когда не меряеш этот вход АЦП нужно в "0" выход переводить. а то будет шум во весь АЦП гнать. Вобщем резистор побольше желателен. Сообщи о результатах пожалуйста.
EdGull » 03 мар 2007, 23:24
естественно сообщу. для этого мы здесь и собрались чтобы делится опытом
EdGull » 06 мар 2007, 11:37
С xtal2 получить нормальный сигнал на ацп не получилось.
Частота 16Мгц для ацп слишком быстрая, разброс чисел получается очень маленьким
avr123.nm.ru » 06 мар 2007, 14:10
Тогда RC генератор на 1.5 МГц примерно на 1 элементной логике типа как hc14 с самыми хреновейшими по стабильности R и C из доступных. Можно на ногу МК подать сигнал. А можно на АЦП завести сигнал с конденсатора генератора. Тогда частоту сделать низкую 200 - 400 КГц.
EdGull » 06 мар 2007, 15:11
с конденсатора какого генератора?
avr123.nm.ru » 06 мар 2007, 16:28
с RC генартора. можно его на 4093 сделать. резистор с выхода инвертора на вход, а вход заземлен конденсатором. На конденсаторе будет "пила с фигурными зубцами" - ее и цифровать. А генератор можно питать ножкой МК - т.е. включать когда нужно.