Оглавление:
- Шаг 1: Крэс
- Шаг 2: отображение наличных денег у дилера
- Шаг 3: Краткое содержание программы
- Шаг 4: Главный коммуникационный код
- Шаг 5: окончательный код и видео
Видео: Учебник по ассемблеру AVR 11: 5 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:47
Добро пожаловать в Урок 11!
В этом коротком руководстве мы, наконец, собираемся построить первую часть нашего финального проекта.
Первое, что вам нужно сделать, это перейти к самому последнему шагу этого урока и посмотреть видео. Тогда вернись сюда. [пауза, пока вы это делаете…] Хорошо. Теперь приступим.
Если вы еще не догадались, мы создаем игру в кости! Конечно, то, что я создаю игру в кости, не означает, что вы должны это делать. Надеюсь, это само собой разумеется. В любом случае полезно использовать микроконтроллеры для управления сегментированными дисплеями и т. Д., А также для связи друг с другом - это в основном то, что мы здесь делаем. Вы можете написать код, чтобы использовать их в любом случае. А пока я собираюсь закодировать их для игры в кости, хотя позже я могу решить переназначить сегментированные дисплеи для чего-то другого.
Причина, по которой я строю это, заключается в том, что я думаю, что в конечном итоге мне может понадобиться полноразмерный стол для игры в кости Vegas в моей "мужской пещере" в подвале моего дома. Однако никто из моих друзей не имеет ни малейшего представления о том, как разыгрывать, оценивать или выплачивать крэпс-ставки и броски. Так что я подумал, что было бы здорово, если бы стол делал за нас всю работу дилера! Когда мы делаем ставку на столе, мы также можем нажать небольшую кнопку рядом с квадратом, на котором находятся наши фишки, показывая, сколько там размещено, а затем микроконтроллер может рассчитать выплату для этого квадрата после броска кости и отобразить ее. Я все еще не совсем уверен, как я буду организовывать этот аспект. Одна мысль, которая у меня была, заключалась в том, что каждого человека попросят по очереди сделать все свои ставки, чтобы контроллер записывал, где у каждого человека деньги, прежде чем записывать следующего игрока и так далее. Затем, после броска, компьютер может показать выплаты на каждом квадрате, а также сохранить текущую «общую сумму наличных» для каждого игрока.
Для одной из обложек этого урока мне просто пришлось использовать фотографию, на которой я вытаскивал 5 тузов за покерным столом в Вегасе этим летом. Хе-хе. Побалуйте меня.
Вот ссылка на полную коллекцию моих руководств по ассемблеру AVR:
Шаг 1: Крэс
В этом уроке мы будем строить только самую простую часть финальной игры Craps. Это называется «Линия передачи», и на нее можно делать ставки. Вы можете узнать все, что вам нужно знать о «проходной» части игры, посмотрев короткий 2-минутный обучающий видеоролик, который я приложил к этому шагу.
Мы построим еще один четырехзначный дисплей, который будет отслеживать денежные средства дилера так же, как наш текущий четырехзначный дисплей отслеживает денежные средства игрока. Дилер начнет с 20 долларов, а игрок - с 20 долларов (общая сумма возможных денег в игре составляет 9999 долларов - максимум из наших 4-значных дисплеев, но нам понадобится только 20 долларов для этой первой части игры или в противном случае. было бы крайне утомительно, и было бы трудно выиграть или проиграть за приличное количество времени). Если игрок забирает все деньги дилера, игрок выигрывает. Если игрок теряет все свои деньги, то выигрывает дилер.
Как выиграть или проиграть деньги? Что ж, те из вас, кто играл в крэпс, видел, как люди «бросали кости» на улице, или видел, как это играли против казино в Вегасе, уже знают. Для остальных, позвольте мне дать вам краткое описание той части игры, которая является «проходной», которую мы будем кодировать сегодня.
В кости играют сотни лет, начиная со времен крестовых походов. В нее играли войска в окопах Второй мировой войны, в нее играли на улицах, в нее играли в казино и игровых залах. Все началось только с линии прохода, а все остальное было добавлено к ней позже. Мы будем следовать тому же прогрессу.
Линия прохода работает следующим образом. Вы делаете ставку и бросаете кости. Первый бросок называется «броском на выход». Если вы получаете 2 (змеиные глаза), 3 (туз-двойка) или 12 (бокс-кары) при выпадении броска, вы теряете свою ставку, и это называется «крэпс». Если вы выбросите 7 (естественный результат) или 11 (йо или йо-левен), вы выиграете. Если вы выбрасываете любое другое число, оно становится вашим «очком». Как только «очко» установлено, вы продолжаете бросать кости с целью снова попасть в точку перед тем, как выбросить 7. Если вы набрали очко до того, как выпадет 7, вы выиграете равные деньги. Таким образом, долларовая ставка приносит вам доллар у дилера. Если вы получите 7 до того, как выпадет ваше очко, это называется «семь аут», и вы проиграете свою ставку дилеру.
После этого вы начинаете снова. Сделайте ставку на проходной линии и бросьте кости: 7 или 11 выигрышей, 2, 3 или 12 проигрышей.
Есть еще много видов ставок: «не проходите», «не проходите», «не проходите», «сделайте ставку», «не делайте ставки», «поле», «рог», » трудные пути »и т. д. и т. д. Вы можете найти подробности здесь:
en.wikipedia.org/wiki/Craps
Как я сказал выше, на данный момент мы будем кодировать только часть игры с проходной линией, а это все, что у них было в тот день, когда дети бросали кости друг другу в стену в обмен на деньги на обед, и именно с этого мы начнем..
Однако, прежде чем мы начнем кодировать, давайте построим дисплей кассы дилера. Для этого я хочу использовать один из более крупных 4-значных дисплеев, которые вы можете получить от Sparkfun или где-либо еще. В дальнейшем я не буду перечислять материалы по этим урокам. Если вы действительно все строили вместе со мной, то вы уже знаете, где взять материалы и что они из себя представляют. Для меня бессмысленно перечислять их или сколько они стоят.
Итак, давайте возьмем одну из наших макетных плат, большой 4-значный дисплей, еще один ATmega328p для управления этим дисплеем и построим его, как мы делали с роликом для игры в кости и дисплеем игрока раньше. Мы также будем прикреплять заголовки для питания, программирования и связи TWI, как и другие.
Шаг 2: отображение наличных денег у дилера
Мы строим дисплей дилера так же, как мы делали с 4-значным дисплеем игрока в предыдущем уроке. Единственное отличие состоит в том, что он больше и имеет меньше контактов, поэтому мы будем располагать его и подключать по-другому.
Я приложил изображение проводки этого дисплея. Вы можете видеть, что он больше и на нем меньше контактов, чем на нашем игровом дисплее. Изображение взято со страницы sparkfun, где я получил дисплей, и он показывает, какие контакты являются источником питания для каждой цифры, а какие контакты управляют каждым из сегментов в цифре.
Как обычно, вы должны начать с подключения дисплея к макетной плате и протестировать каждый сегмент, чтобы убедиться, что вы понимаете, как он подключен. Затем вы должны подключить его к контактам микроконтроллера AVR на макете и запускать оттуда, пока весь наш код не будет работать в этом руководстве. Наконец, в конце вы должны собрать внешнюю плату и припаять ее. Затем, когда вы протестируете конечный продукт, вы узнаете, что любые проблемы связаны с вашей пайкой и резкой, а не с кодом. Кроме того, не забывайте хорошо известную аксиому из столярного дела «дважды отмерь и один раз отрежь» или, в случае изготовления печатных плат: «дважды отрежь, один раз припаяй». Как видно на картинке, я наконец сломался и купил идеальную насадку Dremel для такого рода работ. «Набор алмазных точек». Это стоило 5 баксов, но это намного меньше, чем стоимость терапии по управлению гневом, которая заключается в том, что я слишком много раз подряд теряю работу по резке.
Я использую резисторы 330 Ом для этого дисплея. Контакты COM проходят через резистор к GND, и питание поступает на тот сегмент, который вы хотите отобразить. Я собираюсь использовать от PC0 до PC3 для контактов COM и PB0, PB1, PB2, PB3, PB4, PD5, PD6 и PD7 для сегментов.
Вот ключ к максимальному увеличению ваших шансов сделать все правильно:
- наметить схему
- отключить цепь
- проверьте вашу проводку
- присоедините резисторы, колпачки и кварцевый генератор
- еще раз проверьте соединения и проводку
- прикрепите внешние провода
- прикрепить микроконтроллер
- еще раз проверьте проводку
- прикрепить 4-х значный дисплей
- проверьте каждую цифру парой проводов от макета
- отложите его в сторону и напишите код, зная, что вам, вероятно, придется что-то настраивать позже, и надеясь, что вы не закрыли соединение, которое нужно разорвать.
Я показал серию фотографий своей электромонтажной работы. Пожалуйста, поймите, что вы можете подключить свой как угодно. Скорее всего, вы сможете найти лучшую карту, чем я, и вам следует ее использовать. Ничто в этих руководствах не зависит от того, как ваши компоненты подключены, если у них есть правильные выходные порты. Что мне напомнило. Обратите внимание, что теперь два заголовка отправляются в SDA, а два - в SCL? Как вы думаете, почему мы это сделали?
Теперь, как вы можете видеть по приложенному коду в конце урока, я просто вырезал и вставил код с дисплея плеера из последнего урока в новый файл для дисплея дилера. Затем я просмотрел и изменил таблицу поиска «сегментов», чтобы она соответствовала новой карте контактов, отметив, что для этого дисплея контакты «com» заземлены, а контакты сегмента - 5 В, а не наоборот, как это было для другого дисплея.. Я также изменил инициализацию портов, чтобы отразить новую проводку, я изменил адрес дисплея денежных средств дилера на 0b1000000, чтобы игра в кости могла разговаривать с ним, я изменил подпрограмму "цикла", чтобы она отключила Контакты PC0 - PC3 "com", когда он хочет запитать определенный сегмент, и я изменил "цифру", которая отображается, так как новая проводка имеет цифры в обратном порядке (если вы оставили все как есть и попытались отобразить 1234 это вместо этого отобразился бы как 4321).
Вот новая карта регистров:
(PD7, PD6, PD5, PB4, PB3, PB2, PB1, PB0) = (десятичная точка, c, g, b, f, a, e, d)
где 1 - ВКЛ, а 0 - ВЫКЛ.
Теперь протестируйте дисплей, сначала установив для инициализированного значения дисплея различные числа, чтобы при включении он отображал их. Это скажет вам, все ли работает правильно.
Затем измените код diceroller так, чтобы он использовал новый адрес для ведомого устройства, соедините их вместе и запустите его. Он должен действовать точно так же, как мы делали в предыдущем уроке, за исключением того, что броски кубиков теперь отображаются на новом дисплее.
Большой! Теперь мы готовы написать новый код ролика для игры в кости, чтобы он взаимодействовал как с дисплеем игрока, так и с дисплеем дилера.
Шаг 3: Краткое содержание программы
В нашей игре код будет работать следующим образом: мы оставим ролик для игры в кости в качестве главного и добавим дисплей дилера в качестве дополнительного подчиненного устройства. Ролик для игры в кости будет управлять игрой, и он будет отправлять полученные изменения наличными дилеру, а игрок отображает их после каждого броска. На данный момент у нас будет просто ставка на проходную линию, составляющую 10 долларов каждый раз, поэтому нам не нужно слишком усложнять, пока игрок меняет свою ставку. Позже, когда у нас заработает механика, мы добавим еще один контроллер, который будет дополнительным мастером, который будет управлять ставками и выплатами, а наш ролик для игры в кости останется основным, но будет использоваться только для броска кубиков. Это позволит нам получить доступ к арбитражу TWI, коллизиям и другим важным аспектам последовательной связи, когда у вас есть несколько ведущих и ведомых устройств. Мы также добавим ряд одиночных 7-значных дисплеев с кнопками под ними, которые позволят нам делать ставки на другие типы рулонов, но все это будет в следующих уроках. На данный момент нам просто нужен ролик для игры в кости в качестве главного, а два - в качестве подчиненных. Когда мы нажимаем кнопку, код решает, выплачивать ли обычную выплату, брать деньги из крэпса или переходить к серии «точечных» бросков до выигрыша или семи аутов.
Давайте сначала напишем подчиненные процедуры. Они просты в том, что все, что они будут делать, это следить за строкой SDA в поисках своего адреса, если они будут вызваны, они прочитают новый номер, чтобы отобразить и отобразить его. Это все! Им даже не нужно разговаривать с мастером, поскольку мастер будет отслеживать их общие суммы и производить все расчеты выплат перед их обновлением. В будущих уроках у нас будут подчиненные устройства, которые будут писать ответ главному устройству (например, когда у нас есть одиночные 7-значные дисплеи с кнопками для суммы ставки, они должны будут сообщить мастеру, сколько ставится на каждом дисплее, и поэтому мы будем обращайтесь к ним с помощью обращения + чтения с мастером в "режиме основного приемника"), но мы вернемся к этому в свое время.
На данный момент все запускается нажатием кнопки броска кубиков, за которым следует вычисление или дополнительные нажатия кнопок и, наконец, сообщение на каждый из дисплеев с их новыми итогами. После каждой выплаты будет проводиться проверка, чтобы определить, выиграл ли игрок или проиграл, другими словами, если денежные средства дилера становятся нулевыми после броска, или если денежные средства игрока становятся равными нулю после броска (ни дилер, ни игрок может стать отрицательным, так как им будет разрешено ставить только 10 долларов или все остальное, если сумма меньше 10 долларов).
Вот как это будет работать. Приступим к кодированию.
Шаг 4: Главный коммуникационный код
Теперь мы можем написать процедуру связи ролика для игры в кости. Он также почти идентичен тому, что мы написали в прошлый раз, за исключением того, что мы будем общаться с двумя разными ведомыми устройствами, а не только с одним. Обратите внимание, что для каждого из ведомых мы используем разные адреса. Вы должны изменить код самостоятельно, а затем просто протестировать его с каждым адресом и убедиться, что он работает так же, как в предыдущем руководстве, за исключением каждого отдельного дисплея.
Я прикреплю код для каждого компонента, который просто отображает результат рулона, чтобы его можно было использовать для правильной работы дисплеев и проверки проводки.
Кодирование игры не вводит ничего нового в том, что касается команд на языке ассемблера или компонентов микроконтроллера AVR, и поэтому я не чувствую, что мне нужно проходить его построчно. Вы, наверное, заметили, что, когда мы представляем что-то новое, я просматриваю каждую строчку в мельчайших подробностях до такой степени, что раздражаю вас, если не усыпляю. С другой стороны, я не буду этого делать, если не будет ничего нового. Так обстоит дело сегодня. Итак, я думаю, что к настоящему моменту вы готовы поиграть с кодом, прочитать код, проанализировать его, понять код, критиковать код, высмеивать код и смеяться над парнем, написавшим код. Так что я позволю вам сделать это. Почти наверняка вы найдете много мест, где вы можете улучшить или, по крайней мере, упростить то, что я написал.
Я, как обычно, прикрепил окончательную версию кода для двух дисплеев и дикероллера на следующем этапе вместе с видео, в котором я тестирую это.
Шаг 5: окончательный код и видео
Я приложил видео и 3 программы. Вы заметите, что вы можете зафиксировать ставку и начальные деньги дилера и игрока в верхней части программы с помощью операторов.equ.
В следующем уроке мы добавим возможность делать ставки на разные вещи, что сделает игру более увлекательной. В современных крэпсах интересно то, что у вас есть множество различных способов делать ставки и пытаться максимизировать свои шансы. Фактически, крэпс - это игра с самыми высокими шансами в казино! … ЕСЛИ вы знаете, как в нее играть. С другой стороны, если вы не умеете играть, это становится одной из игр с самыми низкими шансами.
Как только у нас будет больше вещей, на которые можно поставить наши деньги, я увеличу общую сумму денег в игре.
Мне должно быть весело!
Увидимся в следующий раз!
Рекомендуемые:
Учебник по ассемблеру AVR 2: 4 шага
Учебник 2 по ассемблеру AVR: Это руководство является продолжением «Учебного пособия 1 по ассемблеру AVR»; Если вы еще не прошли Урок 1, вам следует остановиться сейчас и сделать это в первую очередь. В этом уроке мы продолжим изучение программирования на языке ассемблера atmega328p u
Учебник по ассемблеру AVR, 1: 5 шагов
AVR Assembler Tutorial 1: Я решил написать серию руководств о том, как писать программы на языке ассемблера для Atmega328p, который является микроконтроллером, используемым в Arduino. Если люди останутся заинтересованными, я буду продолжать выпускать по одному в неделю или около того, пока у меня не закончатся
Учебник по ассемблеру AVR 7:12 шагов
Учебник 7 AVR Assembler: Добро пожаловать в Урок 7! Сегодня мы собираемся сначала показать, как очистить клавиатуру, а затем показать, как использовать порты аналогового ввода для связи с клавиатурой. Мы сделаем это, используя прерывания и один провод в качестве Вход. Мы подключим клавиатуру так, чтобы
Учебник по ассемблеру AVR 9: 7 шагов
AVR Assembler Tutorial 9: Добро пожаловать в Урок 9. Сегодня мы покажем, как управлять как 7-сегментным, так и 4-значным дисплеем, используя наш код языка ассемблера ATmega328P и AVR. В ходе этого нам придется отвлечься от того, как использовать стек
Учебник по ассемблеру AVR 3: 9 шагов
Учебник 3 по AVR Assembler: Добро пожаловать в учебник №3! Прежде чем мы начнем, я хочу высказать несколько философских соображений. Не бойтесь экспериментировать со схемами и кодом, которые мы создаем в этих уроках. Поменяйте провода, добавьте новые компоненты, возьмите компонент