Съдържание:
- Стъпка 1: Настройка на разделителя на часовника
- Стъпка 2: Създаване на машина с крайни състояния (FSM)
- Стъпка 3: Картиране на седемсегментния дисплей
- Стъпка 4: Създаване на компаратора
- Стъпка 5: Настройване на таймер
- Стъпка 6: Проектиране на генератора на псевдо произволни числа
- Стъпка 7: Създаване на конвертор
- Стъпка 8: Обединяване на всичко в модула на играта
- Стъпка 9: Срещат се допълнителни проблеми
- Стъпка 10: Изходни файлове и ограничения
Видео: Двоична към десетична игра за съвпадение: 10 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:50
Тази инструкция ще покаже процеса и модулите, необходими за създаването на нашата игра за съвпадение на двоично към десетично. В рамките на 60 секунди потребителите ще преведат и въведат възможно най -много произволно генерирани десетични числа на дисплея със седем сегмента в двоичен, като превключат превключвателите и изпратят с бутон за предположение. След като приключи, ще се покаже краен резултат и след това ще се нулира, за да играе отново.
Разбирането на бинарни и бързи рефлекси е полезно, но бутонът за нулиране е предоставен в случай, че човек иска незабавно да опита отново.
Стъпка 1: Настройка на разделителя на часовника
Гръбнакът на целия този проект идва от правилната синхронизация на всички части в този гадже. Нашата машина с крайни състояния използва вътрешния часовник, но седемсегментният дисплей и таймерът трябва да използват променена версия на часовника.
Този "нов часовник" идва от разделянето на вътрешния часовник на желания период, за да се постигне определена честота, необходима за всеки конкретен компонент. Това е правено в предишни лаборатории и от опит знаем, че таймерът има цифрата "единият", зададена на 0,1 Hz, а цифрата "десетки" е 1 Hz
Входове: ClkIn, делител (32 бита)
Изходи: ClkOut
Стъпка 2: Създаване на машина с крайни състояния (FSM)
В нашата машина с крайни състояния решихме, че ще са необходими пет състояния (старт, дисплей, проверка, оценка и край) с пет входа (старт, нулиране, предположение, равно, таймаут). Единственият изход в нашия State Machine е 3 -битово число, което представлява в какво състояние е потребителят (000, 001, 011, 101, 100) по отношение на състоянията по -долу.
Не забравяйте, че машина за крайни състояния всъщност не формира функциите по -долу, а просто казва в какво състояние е програмата и какво. Какво всъщност се случва, се определя от горния модул, обяснен по -долу.
Стартово състояние (000)
Стартовото състояние е мястото, където потребителят ще започне, докато входът за стартиране е висок, това е и състоянието, което ще бъде достигнато всеки път, когато се натисне бутонът за нулиране.
Състояние на играта (001)
Състоянието на играта е началото на играта, където случайното число се генерира и потребителят превключва превключвателите, за да създаде вход. След като бутонът за познаване е натиснат, играта се премества в състояние на проверка.
Проверка на състоянието (011)
Това състояние е мястото, където се използва сравнителят, който ще сравнява стойностите на въведените от потребителя данни и произволно генерираното число. Ако изпращането е правилно, равната стойност е висока и FSM отива в Score State; въпреки това, ако изпращането е неправилно, FSM се връща обратно към състоянието на дисплея, докато изпращането е правилно.
Това състояние на проверка се случва сравнително бързо в сравнение с останалите, тъй като се случва само докато бутонът за проверка е натиснат
Оценка (101)
Тъй като равната стойност е висока, подаването е правилно. В това състояние стойността на резултата ще се увеличи с едно и ще бъде генерирано ново число, което потребителят да въведе. Този нов номер ни връща към началното състояние, където потребителят отново ще превключи превключвателите.
Крайно състояние (100)
След като таймерът от 60 секунди изтече, входът за изчакване ще бъде висок и потребителят достига крайното състояние, където се показва крайният резултат. След това входът за нулиране ще бъде натиснат и FSM отново ще започне от началното състояние.
Входове: Clk, rst, start, предположение, равно, timeout
Изход: състояние (3 бита)
Стъпка 3: Картиране на седемсегментния дисплей
Дисплеят със седем сегмента е ключова част от целия проект, тъй като първите две цифри на екрана се използват като изход на генератора на случайни числа, докато последните две цифри са таймерът. Въпреки че сме приложили пример за това в последната лаборатория по отношение на наличието на цифри на екрана, той беше показан в шестнадесетично число. За да разрешим този проблем, използвахме конвертор и разделител на часовника, който е обяснен по -долу.
Дисплеят показва всички 0, докато FSM влезе в състоянието на играта; в крайно състояние обаче дисплеят трябва да показва само резултата на потребителя.
Тъй като използваме четирите цифри на седемсегментния дисплей, трябва да преминем през всеки анод достатъчно бързо при 300 Hz, за да се възприеме като винаги светещ.
Входове: Clk, седемсегмент
Изходи: катоди (7 бита), аноди (4 бита)
Стъпка 4: Създаване на компаратора
Този подмодул се използва в Check State по отношение на това как сравнява 7 -битовото двоично въведено предположение спрямо действителната десетична стойност.
Имахме оператор if, който оценяваше и входовете, и двата изхода в зависимост от това дали еднаква стойност е висока или ниска. Колкото и да е важен този модул, той далеч е една от по -простите програми за проектиране в този проект.
Входове: превключватели (8 бита), номер (8 бита)
Изход: EQ
Стъпка 5: Настройване на таймер
Нашият таймер е по същество два различни брояча, които се увеличават с различни темпове. Един брояч в стойността "единият" (първият седемсегментен дисплей) и един брояч за стойността "десет" (втората цифра на седемсегментния дисплей). Всяка цифра се основава на нарастващия ръб на часовника и след като броячът достигне 60 секунди, time_out ще бъде висок и играта ще приключи и ще се върне в началното състояние.
Входове: Clk, състояние (3 бита), старт
Изходи: Ток (8 бита), таймаут
Стъпка 6: Проектиране на генератора на псевдо произволни числа
Друг алтернативен метод за генератор на числа специално за този случай е да има повтарящ се брояч от 0-99 (в двоичен формат), който извежда броеното число, когато входът е висок, тъй като това би премахнало необходимостта от използване на LFSR.
Числото се променя всеки нарастващ ръб на вътрешния часовник (10 наносекунди) и преминава през всичките 100 числа за една микросекунда. Всеки път, когато потребителят иска нов номер от генератора на числа, той извежда номера, на който е бил, Въпреки че този процес не е съвсем случаен, вероятността да се намерят свързани резултати от този процес е достатъчно ниска, за да бъде псевдослучайна.
Входове: Clk, changenum, равни
Изходи: номер (8 бита)
Стъпка 7: Създаване на конвертор
Необходим компонент е конверторът, който използвахме за показване на десетични числа на седемсегментния дисплей вместо оригиналния шестнадесетичен. Въпреки че и двете числа са базирани на 7 -битово двоично число, ние създадохме цял модул, предназначен за преобразуване на шестнадесетичен в десетичен.
Например, ако крайният ни резултат за резултата беше 0010001 (седемнадесет), седемсегментният дисплей щеше да показва шестнадесетичната стойност 11, вместо десетичното число 17.
Вход: Numin (8 бита)
Изход: Numout (8 бита)
Стъпка 8: Обединяване на всичко в модула на играта
За нашите компоненти използвахме необходимите превключватели 0-6, за да може потребителят да превключва, с трите бутона, които да действат като потребителски входни данни за стартиране, нулиране и отгатване. Компонентите на седем сегментния дисплей и часовник също са компоненти, които сме направили от предишни лаборатории, но трябваше да ги променим, за да отговарят на този проект.
Разделихме този проект на шестте модула, показани по -горе, за да разбием целия гадже на много работни части, но начинът, по който те са свързани, е доста сложен и е показан от приложената снимка на черната кутия.
Докато играта се случва, светят 7 светодиода, за да уведомят потребителя кой преминава към употреба, а когато играта приключи, ние също програмираме светодиодите да мигат
Входове: превключватели (8 бита), Clk, нулиране, стартиране, предположение
Изходи: катоди (7 бита), аноди (4 бита), светодиоди (7 бита)
Стъпка 9: Срещат се допълнителни проблеми
Въпреки че в тази игра се използват само седем превключвателя, кодът го е задал като 8 -битово число. Направихме това, за да имаме по -удобен сравнител, който да сравнява тези 8 бита с 8 -битовото число, което генерирахме от генератора на случайни числа.
Резултатът също ни създаде малко проблеми в началото, защото го настроихме да увеличи една точка, когато FSM беше в състояние на оценка; вместо това се случи, че резултатът продължава да нараства, докато състоянието е включено, което ни дава неоправдано висок резултат, с който не можем да се справим. Поправихме това, като добавихме импулсен сигнал, който беше синхронизиран с нарастващия ръб на часовника, както се вижда в кода в стъпка 8.
И накрая, таймерът отне много време за отстраняване на грешки, тъй като би изкривил нашия седемсегментен дисплей, когато отброяваше, така че трябваше да го променим от отброяване от 60 на броене от 0.
Стъпка 10: Изходни файлове и ограничения
Ако предпочитате да изтеглите от нашите изходни файлове, вместо да създавате свои, ето ги. Включен е и файлът с ограничения.
Препоръчано:
Октарин: Игра за съвпадение на цветовете с WS2812 RGB светодиоди: 6 стъпки
Октарин: игра за съвпадение на цветовете с WS2812 RGB светодиоди: Октарин, цветът на магията. Той беше жив и сияещ и беше безспорен пигмент на въображението, защото където и да се появи, това беше знак, че обикновената материя е слуга на силите на магическия ум. Това бяха чаровници
I2C / IIC LCD дисплей - Използвайте SPI LCD към I2C LCD дисплея, използвайки SPI към IIC модул с Arduino: 5 стъпки
I2C / IIC LCD дисплей | Използвайте SPI LCD към I2C LCD дисплея Използване на SPI към IIC модул с Arduino: Здравейте момчета, тъй като нормалният SPI LCD 1602 има твърде много кабели за свързване, така че е много трудно да го свържете с arduino, но на пазара има един модул, който може конвертирате SPI дисплея в IIC дисплей, така че тогава трябва да свържете само 4 проводника
Flash AT Command Firmware към ESP01 модул (изисква USB към TTL адаптер): 5 стъпки
Flash AT Command Firmware to ESP01 Module (изисква USB към TTL адаптер): От Jay Amiel AjocGensan PHfacebook.com/geeamealyoutube.com/jayamielajoc
Двоична игра: 9 стъпки (със снимки)
Двоична игра: Това е игра, която създадох на Tinkercad Circuits, за да науча двоични числа. https://www.tinkercad.com/things/erDquXcpyW8 Ако искате да следвате това ръководство и да създадете свой собствен, файловете и кодът могат да бъдат намерени в моя github на адрес https://github.com/kee
Изградете двоична LED декорация на сърцето (Blinkenheart): 6 стъпки
Изградете двоична LED декорация на сърцето (Blinkenheart): Това е първата ми инструкция, така че определено ми изпратете обратна връзка. Ако мога да направя схема, която не е ужасна, ще я добавя тук. Тъкмо започвам да уча основна електроника и една приятелка искаше да вземе нещо специално за годеника си за Вал