roboforum.ru

Технический форум по робототехнике.


Генерация случайного числа

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Генерация случайного числа

Сообщение EdGull » 03 мар 2007, 21:31

Народ, подскажите как на МК сгенерировать случайное число (СЧ)?
Смысл, подключаем какое-то кол-во МК в одну шину, например RS485.
Все МК питаются от одного источника.
Подаем питание, на основе этого СЧ генерируем временную задержку и каждый МК (у всех МК код одинаковый) в шину кидает свою посылку.
Гипотетически  посылки не должы сталкиваться.
Теперь вопрос, какую схему прикрутить к МК чтобы он генерировал СЧ?
Аватара пользователя
EdGull
 
Сообщения: 10211
Зарегистрирован: 28 дек 2004, 20:33
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович

Сообщение 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
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Сообщение avr123.nm.ru » 03 мар 2007, 22:25

И стандартные функции в CVAVR например

int rand (void)
generates a pseudo-random number between 0 and 32767.

в BASCOM наверняка тоже есть.

=======

Настоящие случайные числа делают генератором шума подаваемого на ногу МК и чтением несколько раз того что на ноге.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Сообщение EdGull » 03 мар 2007, 22:27

вот я и хотел эту схему, говорят что она на одном транзисторе собирается.
Аватара пользователя
EdGull
 
Сообщения: 10211
Зарегистрирован: 28 дек 2004, 20:33
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович

Сообщение avr123.nm.ru » 03 мар 2007, 22:42

С одинаковой прошивкой ?   псевдослучайное и означает что оно псевдо.  т.е.  кореляция есть конечно.

==========

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

Ну или RC генератор на инверторе типа 74hc14 на чатоту не совпадающую с кварцем и не крfтную с ним.  

Или на компараторе если он не занят в МК или на ОУ внешнем, куча вариантов.

Детали имеют разброс и очевидно закономерности между устройствами в партии не будет.

==========

либо на АЦП подать даже такт от кварца через резистор 10 КОм !  с XTAL2 и оцифровывать его - т.е. черти что будет мерить и получатся случайные числа.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Сообщение EdGull » 03 мар 2007, 22:52

с XTAL2 мне понравилась идея.
в понедельник обязательно попробую
Аватара пользователя
EdGull
 
Сообщения: 10211
Зарегистрирован: 28 дек 2004, 20:33
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович

Сообщение avr123.nm.ru » 03 мар 2007, 23:12

только ИМХО когда не меряеш этот вход АЦП нужно в "0" выход  переводить. а то будет шум во весь АЦП гнать.  Вобщем резистор побольше желателен.

Сообщи о результатах пожалуйста.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Сообщение EdGull » 03 мар 2007, 23:24

естественно сообщу.
для этого мы здесь и собрались чтобы делится опытом
Аватара пользователя
EdGull
 
Сообщения: 10211
Зарегистрирован: 28 дек 2004, 20:33
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович

Сообщение EdGull » 06 мар 2007, 11:37

С xtal2 получить нормальный сигнал на ацп не получилось.
Частота 16Мгц для ацп слишком быстрая, разброс чисел получается очень маленьким :-(
Аватара пользователя
EdGull
 
Сообщения: 10211
Зарегистрирован: 28 дек 2004, 20:33
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович

Сообщение avr123.nm.ru » 06 мар 2007, 14:10

Тогда RC генератор на 1.5 МГц примерно на 1 элементной логике типа как hc14 с самыми хреновейшими по стабильности R и C из доступных.  Можно на ногу МК подать сигнал.

А можно на АЦП завести сигнал с конденсатора генератора. Тогда частоту сделать низкую 200 - 400 КГц.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Сообщение EdGull » 06 мар 2007, 15:11

с конденсатора какого генератора?
Аватара пользователя
EdGull
 
Сообщения: 10211
Зарегистрирован: 28 дек 2004, 20:33
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович

Сообщение avr123.nm.ru » 06 мар 2007, 16:28

с RC генартора. можно его на 4093 сделать. резистор с выхода инвертора на вход, а вход заземлен конденсатором.

На конденсаторе будет "пила с фигурными зубцами" - ее и цифровать.

А генератор можно питать ножкой МК - т.е. включать когда нужно.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8


Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 15