Генератор Случайных Чисел для проведения лотерей
Автор: Ермаков Алексей Генератор Случайных Чисел для проведения лотерей и розыгрышей призов. На работе мы каждую неделю разыгрываем ценный приз, (не спрашивайте, что за работа и что за приз, к данной статье это отношение не имеет). Среди нескольких претендентов надо выбрать одного, который и получит приз. Начинали с простого варианта, тянуть бумажки, спички, шарики от настольного тенниса, но всё это выглядело как-то не солидно. Потом стали возникать вопросы о счастливой и не счастливой руке, одинаковости бумажек и спичек, в общем, в хорошую идею конкурса попадала ложка дегтя сомнений, и я решил розыгрыш приза предоставить электронике. То, что получилось, коллективу понравилось. Этот прибор можно использовать в разных конкурсах и розыгрышах, а также выяснять, кто моет сегодня посуду, идёт за ребёнком в садик, выносит мусор и.т.д. Источником случайных чисел выступает человек, точнее сам момент нажатия кнопки. В микроконтроллере непрерывно, с частотой 4МГц инкрементируется Timer 1, в момент нажатия кнопки аппаратная схема захвата записывает в регистр текущее состояние Timer 1, счет таймера при этом не останавливается. Так как считывание текущего состояния Timer 1 происходит аппаратными средствами, решается проблема не одинаковых задержек при выборке и соответственно неравномерности получаемого вероятностного распределения. В программе реализовано два режима работы с одной и тремя выборками. Режим с одной выборкой интуитивно понятен, жмёшь кнопку во время бегущей двухцветной змейки по индикатору, получаешь случайное число от 1 до 64 отображаемое красным цветом. Режим с тремя выборками был придуман для того, чтобы сделать розыгрыш ещё азартнее. Претенденту на приз необходимо три раза нажать на кнопку во время бегущей двухцветной змейки, цифра текущей выборки (от 1 до 32) отображается зелёным цветом, также зелёной точкой отображается номер выборки. Правая точка – сделана первая выборка, левая – вторая, обе – третья. После отображения цифры полученной в третьей выборке, красным цветом отображается сумма трёх выборок. Побеждает тот, у кого сумма цифр больше. Во время каждого нажатия кнопки градус эмоций повышается. Почему число выборок в режиме с одной выборкой сделано от 1 до 64, потому что аппаратный режим захвата есть только у Timer 1, но в режиме захвата этот таймер считает до переполнения т.е. до 65535 . Чтобы не делать программное увеличение разрядности таймера до 64, а потом не вычислять остаток от деления на 100, я принял решение считать от 1 до 64, тогда никаких дополнительных мер предпринимать не надо, достаточно наложить маску 0x3F на младший байт регистра захвата и прибавить единичку. В режиме с тремя выборками счёт идет от 1 до 32, соответственно маска накладывается 0x1F. В этом случае сумма трёх цифр при выпадении каждый раз цифры 32 получается 96, и не выходит за рамки 2-х разрядов. Осталось добавить, что переключение между режимами происходит, если при включении питания кнопку удерживать нажатой. Режим с одной выборкой отображается одной зажженной точкой, режим с тремя выборками – двумя зажженными точками. Как только отпустите кнопку, по экрану побежит двухцветная змейка, можно начинать розыгрыш. Выбранный режим сохраняется в EEPROM и устройство при следующем включении, будет работать в выбранном режиме. На этом рисунке изображена схема устройства. В приборе использован двухцветный светодиодный индикатор большого размера с общим анодом, информация выводиться на него в режиме динамической индикации. Сегменты индикатора управляются микросхемой TPIC6B595. Она представляет из себя сдвиговый регистр с памятью 74HC595 с выходами на высоковольтных полевых транзисторах с открытым стоком, в случае её отсутствия, её можно заменить на микросхему 74HC595 установив на выходе ключи на полевых или биполярных транзисторах. Питать устройство можно от любого 5V источника питания с максимальным током 1А. Для питания индикатора в устройстве применена стандартная схема повышающего преобразователя на микросхеме MC33063A или MС34063A. Индуктивность RLB0914-101KL 100uH с током насыщения 1А. Печатная плата и разработана в программе Eagle, при изготовлении, слой TOP разведён проводами. Плата разводилась под корпус GAINTA G1816. В качестве кнопки я использовал кнопку с датчиком Холла от древнего терминала, кнопку можно применить любого типа, подкорректировав печатную плату. Резистор R27 и конденсатор C3, в случае с механической кнопкой, устанавливать не нужно. Кнопка должна замыкать вывод 5 микроконтроллера на землю. И в конце, небольшое видео, что бы посмотреть как это всё работает.
Файлы: Все вопросы в Форум.
|
|
|||||||||||||||
|
||||