Свежие обсуждения
Микроконтроллеры

Random !?

1 2 4

Уточняю!
Есть МК, а к нему подключена система светодиодов.
Матрица 16*16. 256 штук. Надо генерировать случайное число 0-255. Что бы определить какой светодиод зажечь/погасить.

 

Тогда однозначно подойдет псевдослучайный генератор на "регистрах с обратными связями".
Воплощение зависит от того, какой микроконтроллер вы собираетесь использовать. Некоторые уже имеют аппаратный генератор, вам останется только считывать псевдослучайные числа из его регистра.

Если делать программным способом, то минимум кода и максимум быстродействия получится при использовании 15-разрядного слова (понадобится только 1 "отвод" -- например, от 14-го разряда): делаете опреацию "исключающее или" над 15-м и 14-м битами, сдвигаете слово на один разряд влево, а результат записываете в 0-й бит. Псевдослучайное число 0...255 считываете из восьми младших бит. Не забудьте предварительно проинициализировать вашу 15-разрядную переменную любым ненулевым значением.

Либо воспользуйтесь языком высокого уровня, который имеет готовую библиотечную функцию.

 

Звёздное небо на деревянной логике представляю следующим образом:

Два счётчика ИЕ4(ИД4)
Защелка ИР22/23/27
Два дешифратора ИД3
Шестнадцать инверторов для столбца/строки (можно транзисторы)
Генератор шума - заставлять считать счётчики.
Мультивибратор - на защелку: зажигание светодиода

(Извините если не в тему)

 

ИМХО - "однорукий бандит".
Времена "звёздного неба" прошли...

 

Для ПСП длинной 255 бит нужен 8-разрядный регистр сдвига, можно выбирать из 16 разных образующих полиномов. Но меньше, чем 3 элементами "исключающее ИЛИ" в обратных связях обойтись не получится. IDiod, вы предлагаете не вполне работоспособный вариант, ведь ваша последовательность будет длинной 32767 бит; если брать "восемь младших бит", то будут мометы, когда на всех выходах установятся нули, а это противоречит условию задачи. Более того, перебор всех возможных вариантов на выходах, кроме всех нулей - одно из основных свойств ПСП.

 

А если просто взять много мигающих светодиодов и соединить параллельно?

 

Mastak: Для ПСП длинной 255 бит нужен 8-разрядный регистр сдвига, можно выбирать из 16 разных образующих полиномов. Но меньше, чем 3 элементами "исключающее ИЛИ" в обратных связях обойтись не получится. IDiod, вы предлагаете не вполне работоспособный вариант, ведь ваша последовательность будет длинной 32767 бит; если брать "восемь младших бит", то будут мометы, когда на всех выходах установятся нули, а это противоречит условию задачи. Более того, перебор всех возможных вариантов на выходах, кроме всех нулей - одно из основных свойств ПСП.

Насколько я понял, Tim18-у ПСП максимальной длины (с их специф.свойствами) не нужны. Младший байт действительно будет иногда принимать значение "0" -- это как раз и соответствует условию задачи (светодиодов-то 256, а не 255!). Если не верите в перебор всех возможных вариантов у этого байта -- можете проверить
А большой период повторения последовательности как раз есть плюс. Впрочем, выбирать Tim18-у.

Для звездного неба такой алгоритм не очень-то подойдет, так как гореть будет всего 1 светодиод из 256 (Num Lock предлагает вариант, лишенный этого недостатка).

 

Правильно! Звёздное НЕБО...

 

А как, кстати технически реализовано ? В смысле сама матрица светодиодов, соединение, крепление ?

Кстати при равномерном распределении 0-256 не интересно - большое изменение яркости, нодо получать число 2^256 порядка причем с условием что одновременно зажжено не менее N и не более M светодиодов.

 

Tim18

Я вас умоляю - не делайте звёздное небо на микроконтроллере. Во первых - он для этого не подходит: большая чувствительность к внешним раздражителям. Таким как статика и шумы по питанию. Во вторых - он слишком правильный: не может нормально заниматься бредом (ваш рандом). В третьих - неадекватность программы + возможные зависания.

Короче, в любом случае - не рекомендую.