Отправлено: 09.04.07 00:38. Заголовок: Случайный числа
Вопрос собственно вот в чем: Можно ли в mblab каким либо образом получить случайное число из определенного их количества? (генератор случайных чисел) Как в паскале х:=Random(10)
Пост N: 71
Зарегистрирован: 26.12.06
Откуда: Украина, Новомосковск
Рейтинг:
0
Отправлено: 09.04.07 20:30. Заголовок: Re:
Вопрос интересный и я думаю ветка тоже. У меня как-то проскакивал вопрос, а можно ли ПИКом сгенерировать случайное число но пока времени небыло найти ответ.
Я придумал как сделать генератор псевдо случайных чисел. Выбираем какой-нибудь регистр "Суч.Часл." и по ходу программы скидываем в него все данные, с которыми производились какие-либо операции, суммируя всю поступившую вновь информацию, да плюс периодически приплюсовывать показания таймера. Досчитав до 255 регистр"Суч.Часл." будет сбрасываться и продолжать счет. 230+33=8. Таким образом практически неизвестно какое число получится в итоге. А если еще выбирать какое действие производить с вновь полученой информацией, да плюс производить ли вообще какое-либо действие, то получим действительно случайное число.
Пост N: 131
Зарегистрирован: 12.02.07
Откуда: Argentina, Lincoln
Рейтинг:
0
Награды:
Отправлено: 12.04.07 13:51. Заголовок: Re:
Не думаю что это будет случайное число: если будут поступать одни и те же данные, плюс приплюсовывание данных из таймера (всегда в одном и том же месте программы, а значит и значение будет одно и то же, при одинаковых начальных условиях), то и выданное число будет тем же. Думаю лучше подумать об использовании генератора "белого шума" (на резисторе например), тогда у вас будет действительно случайное число.
Пост N: 62
Зарегистрирован: 25.12.06
Откуда: Россия, Липецк
Рейтинг:
0
Отправлено: 12.04.07 20:23. Заголовок: Re:
Согласен с Alberto. Действительно случайное число можно получить только из "природного явления" типа "белого шума". Все остальное это псевдослучайные события. У них может быть "огроменный" период, они могут иметь "мозгозаворотный" алгоритм и т.д., но эти события, формально, не считаются случайными. В большинстве случаев, для имитации того что связано со случайными событиями, используются рекуррентные сдвиговые регистры той или иной разрядности. Чем больше их разрядность (плюс, оптимальный, математический расчет обратных связей), тем больше псевдослучайное событие приближается к случайному, но не более того.
Пост 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(), борода приклеена по-другому. А в результате: после запуска программы эти числа появляются в определённом порядке со всеми вытекающими." "При аппаратном способе случайные или псевдослучайные числа вырабатываются специальной электронной приставкой - генератором, который является внешним устройством ЭВМ либо входит в состав процессора. Наибольшее распространение на практике нашли генераторы псевдослучайных чисел (ГПСЧ), построенные на основе регистра сдвига с реализацией некоторой логической функции в цепи обратной связи (ОС)." Последнее это то, о чем уже написал Евгений Александрович. У меня тут возникла еще одна идея по генерированию случайного числа только средствами МК, сейчас набросаю блок-схему и выложу для всеобщего пинания .
Пост 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 и тогда моя идея только коту под хвост . Ваше мнение?
Пост N: 7
Зарегистрирован: 29.07.08
Откуда: Россия, Саратов
Рейтинг:
0
Фото:
Отправлено: 21.08.08 16:20. Заголовок: На эту задачу можно ..
На эту задачу можно и иначе посмотреть.
Во-первых, ответим на вопрос, взаимодействует ли пользователь с устройством на МК? Уточним вопрос, пользователь смотрит на работу МК или цмыкает по органам управления? Думаю что цмыкает (жмет на кнопки); лишь примитивные устройства не имеют органов управления.
Во-вторых, вспомните проект "Эллектронные кости" на элементах жесткой логики. Т.е. в какой-то момент запускается генератор, а пользователь по очередному нажатию останавливает этот генератор и МК из генератора берет значение. Здесь по логике программы надо смотреть - в какое место это генератор вклинить.
Также есть и иная т.зр. Работа генератора случайных чисел предполагает, что получается некое уникальное число, котрое в последующем будет использовано. Исходя из предположения уникальности можно предложить использовать уникальное число из Touch Memory . Подсказку смотреть здесь http://www.accord.ru/museum.html
Пост N: 9
Зарегистрирован: 29.07.08
Откуда: Россия, Саратов
Рейтинг:
0
Фото:
Отправлено: 22.08.08 12:28. Заголовок: Меня еще одна идея т..
Меня еще одна идея торкнула вчера. Собираем на транзисторах мультивибратор, подключаем на счетный вход таймера. И этот мультивибратор наполняет/переполняет таймер, т.е. в каждый момент времени число будет разным. Конечно, можно предположить что частота генератора и частота МК будет иметь общее кратное число, но этим фактом можно пренебречь. Да и вообще, у автора темы надо спросить - а в каком приложении нужен этот генератор случайных чисел, т.к. в запасе у меня есть еще варианты решений.
Все даты в формате GMT
3 час. Хитов сегодня: 8
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет