Шрифт:
Интервал:
Закладка:
В завершение подайте 5 В через резистор номиналом 330 Ом на центральный светодиод и сравните его яркость со светодиодами, подключенными попарно. Возможно, вам придется увеличить номинал резистора, чтобы центральный светодиод визуально не отличался от других.
Подключите светодиоды к логической схеме, нажмите и удерживайте кнопку, а затем отпустите ее, и вы получите результат броска игрального кубика.
Рис. 4.150. Подключение семи светодиодов (шесть из них – попарно, последовательно) для отображения конфигураций точек на игральном кубике
Как удостовериться в случайности результата? Единственный способ проверить это – многократно протестировать устройство и записать, сколько раз выпало каждое число. Для хорошей проверки вам придется запустить схему тысячу раз. Поскольку эта схема основана на действии человека, который нажимает кнопку, автоматизировать процесс проверки не представляется возможным. Все, что я могу сказать – результат на самом деле должен быть случайным.
Хорошие новости
В этой схеме число использованных микросхем больше, чем в предыдущих проектах из этой книги, но, как говорит мой любимый персонаж из мультсериала «Футурама», профессор Фарнсворт: «Хорошие новости, друзья!»
Хорошие новости заключаются в том, что вы можете улучшить созданную схему, чтобы имитировать два игральных кубика вместо одного, просто добавив провода и светодиоды. Вам не понадобятся дополнительные микросхемы.
У нас осталось много неиспользованных логических элементов И, ИЛИ-HE и ИЛИ. Остались свободными три элемента И, два элемента ИЛИ-НЕ и два элемента ИЛИ. Кроме того, есть еще один счетчик в микросхеме 74НС393. Это именно то, что нам нужно.
Вопрос в том, как создать вторую последовательность случайных чисел, отличающуюся от первой? Может быть, путем добавления еще одного таймера 555, работающего с другой скоростью?
Мне не нравится эта идея, потому что два таймера будут совпадать и расходиться по фазе друг с другом, и некоторые пары значений будут появляться чаще, чем другие. Я полагаю, было бы лучше, чтобы первый счетчик считал от двоичного значения 000 до 101, а затем запускал второй счетчик для счета от 000 до 001. Первый счетчик снова считает от 000 до 101 и запускает отсчет на втором счетчике до 010. И так далее.
Второй счетчик будет работать на скорости в 1/6 от скорости первого, но если вы запустите их достаточно быстро, то смена значений будет происходить незаметно. Главное преимущество такого решения в том, что все возможные комбинации будут отображаться одинаковое количество раз, и таким образом у них есть почти равные шансы появления, как у настоящих игральных кубиков.
Почему я сказал «почти равные»? Нужно учесть небольшую задержку, когда счетчик выполняет сброс с двоичного значения 101 до 000. Но если первый счетчик работает на частоте около 5 кГц, то задержка менее чем в одну миллионную долю секунды будет незначительной.
Соединение счетчиков
Остается последний вопрос – как первый счетчик будет увеличивать значение на втором, когда дойдет до 101 и переключится обратно на 000?
Очень просто. Рассмотрим, что происходит, когда выход первого счетчика меняется с 011 на 101, а затем на 110. Последнее значение длится только мгновение, прежде чем сбросится до 000. После того как выход С достигнет высокого состояния, он переходит в низкое.
Что необходимо тактовому входу второго счетчика, чтобы увеличить значение на единицу? Вы уже знаете ответ. Ему требуется высокое состояние, которое переходит в низкое. Все, что вам осталось сделать – подключить выход С первого счетчика к тактовому входу второго счетчика. На самом деле, микросхема приспособлена для работы таким образом, чтобы спад от одного счетчика играл роль сигнала для увеличения значения следующего счетчика.
На рис. 4.151 изображена схема устройства для имитации двух игральных костей. Я не привожу еще одно изображение макетной платы, поскольку вы сможете выполнить новую компоновку самостоятельно. Она является почти зеркальным отображением уже существующей, только не забудьте сдвинуть ее на макетной плате на один ряд вниз, чтобы оставить место для источника питания каждой микросхемы.
Рис. 4.151. Схема для запуска двух светодиодных игральных кубиков
Идем дальше
Можно ли упростить эту схему? Как я упоминал в самом начале, логика работы десятичного счетчика проще, чем двоичного. Вам не понадобился бы элемент И, чтобы выполнять счет с коэффициентом пересчета 6, поскольку достаточно подключить седьмой вывод в десятичном счетчике обратно к сбросу.
Тем не менее, если вы хотите «бросать» два кубика, вам необходимы два десятичных счетчика, а это подразумевает две отдельные микросхемы. Еще две микросхемы необходимы для управления логическими схемами формирования двух конфигураций точек. Чтобы понять почему, поищите в онлайн-источниках примеры устройств, реализующих цифровые игральные кости. На данный момент вы уже способны разобраться в схемах, которые найдет для вас сервис «Картинки Google».
Единственное упрощение, которое можно внести в описанную схему, – заменить каждый элемент ИЛИ двумя диодами. Такое решение часто можно встретить в схемах, найденных в Сети, но учтите, что в конечном итоге вы получите сигнал, проходящий по очереди через два диода, а это будет уменьшать напряжение ниже уровня, который я считаю приемлемым.
Проблема замедленного отображения
В устройстве, описанном в первом издании книги Make: Electronics, была замечательная дополнительная функция. Когда вы убирали палец с кнопки запуска, отображение точек кубика постепенно замедлялось, а потом останавливалось. Это увеличивало напряженность при ожидании окончательного результата.
Данная функция была реализована при помощи управления питанием таймера 555. Таймер был всегда включен, но напряжение на его резистивно-емкостной цепочке отключалось, когда игрок прекращал нажимать кнопку запуска. С этого момента конденсатор большой емкости медленно разряжался, и таймер замедлялся по мере уменьшения напряжения.
Читатель по имени Жасмин Патри (Jasmin Patry) прислал мне электронное письмо, в котором сообщил, что когда он исследовал эту схему, слишком часто возникало значение «1», и он заподозрил, что это как-то связано с функцией замедления.
Оказалось, что Жасмин является разработчиком видеоигр и гораздо больше разбирается в теме случайных распределений, чем я. Он произвел впечатление вежливого и терпеливого человека, который знает, о чем говорит, и заинтересован помочь решить проблему, которую обнаружил.
После того как он прислал мне графики относительной частоты появления каждого числа, я вынужден был согласиться, что проблема существует. Я предложил множество возможных объяснений, и все они оказались неправильными. В итоге Жасмин доказал, что низкое потребление мощности единственным светодиодом