АвторСообщение



Пост N: 1
Зарегистрирован: 09.04.07
Рейтинг: 0
ссылка на сообщение  Отправлено: 09.04.07 00:38. Заголовок: Случайный числа


Вопрос собственно вот в чем:
Можно ли в mblab каким либо образом получить случайное число из определенного их количества?
(генератор случайных чисел)
Как в паскале
х:=Random(10)

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 10 [только новые]


постоянный участник


Пост N: 71
Зарегистрирован: 26.12.06
Откуда: Украина, Новомосковск
Рейтинг: 0
ссылка на сообщение  Отправлено: 09.04.07 20:30. Заголовок: Re:


Вопрос интересный и я думаю ветка тоже. У меня как-то проскакивал вопрос, а можно ли ПИКом сгенерировать случайное число но пока времени небыло найти ответ.

Чюдес не бывает, особенно когда касается электроники. Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 9
Зарегистрирован: 09.04.07
Рейтинг: 0
ссылка на сообщение  Отправлено: 12.04.07 06:37. Заголовок: Re:


Я придумал как сделать генератор псевдо случайных чисел.
Выбираем какой-нибудь регистр "Суч.Часл." и по ходу программы скидываем в него все данные, с которыми производились какие-либо операции, суммируя всю поступившую вновь информацию, да плюс периодически приплюсовывать показания таймера. Досчитав до 255 регистр"Суч.Часл." будет сбрасываться и продолжать счет. 230+33=8. Таким образом практически неизвестно какое число получится в итоге. А если еще выбирать какое действие производить с вновь полученой информацией, да плюс производить ли вообще какое-либо действие, то получим действительно случайное число.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 131
Зарегистрирован: 12.02.07
Откуда: Argentina, Lincoln
Рейтинг: 0

Награды: Отлично!',
ссылка на сообщение  Отправлено: 12.04.07 13:51. Заголовок: Re:


Не думаю что это будет случайное число: если будут поступать одни и те же данные, плюс приплюсовывание данных из таймера (всегда в одном и том же месте программы, а значит и значение будет одно и то же, при одинаковых начальных условиях), то и выданное число будет тем же. Думаю лучше подумать об использовании генератора "белого шума" (на резисторе например), тогда у вас будет действительно случайное число.

Не ошибается только тот, кто ничего не делает. Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 62
Зарегистрирован: 25.12.06
Откуда: Россия, Липецк
Рейтинг: 0
ссылка на сообщение  Отправлено: 12.04.07 20:23. Заголовок: Re:


Согласен с Alberto. Действительно случайное число можно получить только из "природного явления" типа "белого шума". Все остальное это псевдослучайные события. У них может быть "огроменный" период, они могут иметь "мозгозаворотный" алгоритм и т.д., но эти события, формально, не считаются случайными.
В большинстве случаев, для имитации того что связано со случайными событиями, используются рекуррентные сдвиговые регистры той или иной разрядности. Чем больше их разрядность (плюс, оптимальный, математический расчет обратных связей), тем больше псевдослучайное событие приближается к случайному, но не более того.



Евгений Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 135
Зарегистрирован: 12.02.07
Откуда: Argentina, Lincoln
Рейтинг: 1

Награды: Отлично!',
ссылка на сообщение  Отправлено: 13.04.07 14:02. Заголовок: Re:


А вот еще (нарыл в интернете за 2-3 минуты):
"RND - это псевдослучайное число (от "Random" - случайный). В языке Бейсик и многих других языках более высокого уровня, чем C++, есть функция RND(n), которая генерит псевдослучайное число в диапазоне 0<X<1... Да, "ненастоящее" случайное число! Так когда-то и было - по крайней мере в программируемых калькуляторах и том же Бейсике. Делалось это так - составлялась таблица из истинно случайных чисел и навсегда зашивалась в ПЗУ (в МК) или файл (в ПК). Далее - далеко не случайно - из этой таблицы брались числа, обычно просто по очереди, сдвигая некий указатель на единицу после каждого запроса RND программой. Или составлялась мутная формула с участием 3 и 5 цифры дробной части числа, сильно зависящего от констант (!) - экспоненты или числа пи.
Сомневаюсь, что в современных языках, имеющих встроенную функцию RND(), борода приклеена по-другому. А в результате: после запуска программы эти числа появляются в определённом порядке со всеми вытекающими."
"При аппаратном способе случайные или псевдослучайные числа вырабатываются специальной электронной приставкой - генератором, который является внешним устройством ЭВМ либо входит в состав процессора. Наибольшее распространение на практике нашли генераторы псевдослучайных чисел (ГПСЧ), построенные на основе регистра сдвига с реализацией некоторой логической функции в цепи обратной связи (ОС)."
Последнее это то, о чем уже написал Евгений Александрович.
У меня тут возникла еще одна идея по генерированию случайного числа только средствами МК, сейчас набросаю блок-схему и выложу для всеобщего пинания .

Не ошибается только тот, кто ничего не делает. Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 138
Зарегистрирован: 12.02.07
Откуда: Argentina, Lincoln
Рейтинг: 1

Награды: Отлично!',
ссылка на сообщение  Отправлено: 13.04.07 15:37. Заголовок: Re:


Идея состоит вот в чем: все устройства ПИКа (в данном случае 84-ый) работают от генератора с кварцем на 4МГц (я не беру случай с внешним тактом или RC-генератором, хотя и для этого случая это подойдет, с некоторыми оговорками) и только "сторожевая собака" имеет свой собственный RC-генератор, т.е. он нестабильный, зависит от конкретной м/с, температуры, напряжения питания и т.д. Вот я и подумал, а нельзя ли использовать его для генерации случайного числа... и вот идея.

В случае если нам нужно случайное число, делаем переход на ветку программы где с предварительно назначенным для этого дела регистром (Random, например) выполняем всего одну операцию инкрементирования с последубщим безусловным переходом на нее же. Т.к. WDT срабатывает через время от 8 до 33 мс, то регистр Random будет переполняться и опять начинать счет с нуля и т.д., пока программа в результате работы WDT не сбросится. Далее идет анализ регистра Random и если результат не равен нулю, программа выйдет на другую ветку работы (сброс WDT обязателен!), где в регистре Random будет находиться случайное число. При необходимости получения другого случайного числа сбрасываем Random в ноль и на следующем витке работы программы будет сгенерировано другое число, а с учетом того, что температура меняется и сама по себе, и меняется температура кристалла м/с, и т.д., то, я думаю, будут получаться случайные числа. Правда в этом случае число никогда не будет равно нулю, но введя еще один регистр, можно сделать контроль необходимости генерации случайного числа по нему. Идея пришла сегодня утром, поэтому в железе не проверял (может микрочиповцы сделали очень стабильный RC-генератор на WDT и тогда моя идея только коту под хвост . Ваше мнение?

Не ошибается только тот, кто ничего не делает. Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 142
Зарегистрирован: 12.02.07
Откуда: Argentina, Lincoln
Рейтинг: 1

Награды: Отлично!',
ссылка на сообщение  Отправлено: 16.04.07 13:35. Заголовок: Re:


Проверил, не годится идея: все числа лежали в интервале от 248 до 253. Увы ..., пойду искать кота .

Не ошибается только тот, кто ничего не делает. Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 7
Зарегистрирован: 29.07.08
Откуда: Россия, Саратов
Рейтинг: 0
Фото:
ссылка на сообщение  Отправлено: 21.08.08 16:20. Заголовок: На эту задачу можно ..


На эту задачу можно и иначе посмотреть.

Во-первых, ответим на вопрос, взаимодействует ли пользователь с устройством на МК?
Уточним вопрос, пользователь смотрит на работу МК или цмыкает по органам управления?
Думаю что цмыкает (жмет на кнопки); лишь примитивные устройства не имеют органов управления.

Во-вторых, вспомните проект "Эллектронные кости" на элементах жесткой логики.
Т.е. в какой-то момент запускается генератор, а пользователь по очередному нажатию
останавливает этот генератор и МК из генератора берет значение.
Здесь по логике программы надо смотреть - в какое место это генератор вклинить.

Также есть и иная т.зр. Работа генератора случайных чисел предполагает, что получается
некое уникальное число, котрое в последующем будет использовано.
Исходя из предположения уникальности можно предложить использовать уникальное число
из Touch Memory . Подсказку смотреть здесь http://www.accord.ru/museum.html

Лучше скажи мало, но хорошо. Козьма Прутков Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 554
Зарегистрирован: 06.05.07
Откуда: Россия, Липецк
Рейтинг: 4
ссылка на сообщение  Отправлено: 21.08.08 20:10. Заголовок: Программно, "кр..


Программно, "крутейший" генератор псевдослучайных чисел, реализуется довольно-таки просто.
Если руки дойдут, опишу.

Безумству храбрых поем мы песню (А.М.Горький) Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 9
Зарегистрирован: 29.07.08
Откуда: Россия, Саратов
Рейтинг: 0
Фото:
ссылка на сообщение  Отправлено: 22.08.08 12:28. Заголовок: Меня еще одна идея т..


Меня еще одна идея торкнула вчера.
Собираем на транзисторах мультивибратор, подключаем на счетный вход таймера.
И этот мультивибратор наполняет/переполняет таймер, т.е. в каждый момент времени
число будет разным. Конечно, можно предположить что частота генератора и частота МК
будет иметь общее кратное число, но этим фактом можно пренебречь. Да и вообще,
у автора темы надо спросить - а в каком приложении нужен этот генератор случайных
чисел, т.к. в запасе у меня есть еще варианты решений.

Лучше скажи мало, но хорошо. Козьма Прутков Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 8
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет



Создай свой форум на сервисе Borda.ru
Текстовая версия