Мазмуну:

AVR Assembler үйрөткүчү 11: 5 кадамдар
AVR Assembler үйрөткүчү 11: 5 кадамдар

Video: AVR Assembler үйрөткүчү 11: 5 кадамдар

Video: AVR Assembler үйрөткүчү 11: 5 кадамдар
Video: Лекция 4. Архитектура AVR. Ассемблер 2024, Июль
Anonim
AVR Assembler үйрөткүчү 11
AVR Assembler үйрөткүчү 11
AVR Assembler үйрөткүчү 11
AVR Assembler үйрөткүчү 11
AVR Assembler үйрөткүчү 11
AVR Assembler үйрөткүчү 11

Tutorial 11ге кош келиңиз!

Бул кыска үйрөткүчтө, биз акыры акыркы долбоорубуздун биринчи бөлүгүн курганы жатабыз.

Биринчи кылышыңыз керек болгон нерсе - бул үйрөткүчтүн эң акыркы баскычына барып, видеону көрүү. Анда бул жакка кайра кел. [муну кылып жатканда тыныгуу….] Макул. Эми улантыңыз.

Эгерде сиз буга чейин ойлобосоңуз, биз Craps оюнун куруп жатабыз! Албетте, мен craps оюнун куруп жатам, албетте, сизге керек дегенди билдирбейт. Мен муну айтпай кетет деп үмүттөнөм. Кандай болбосун, микроконтроллерди сегменттелген дисплейлерди ж.б. башкаруу үчүн жана бири -бири менен баарлашуу пайдалуу - бул негизинен биз бул жерде кылып жатабыз. Сиз каалаган учурда аларды колдонуу үчүн код жаза аласыз. Азырынча мен аларга код ойнотууну пландап жатам, бирок кийинчерээк сегменттелген дисплейлерди башка нерсеге кайра багыттоону чече алам.

Муну куруп жатканымдын себеби, мен акыры үйүмдүн жер төлөсүндөгү "адам үңкүрүмдө" толук көлөмдөгү Вегас крапс столун каалап калышы мүмкүн деп ойлоп жатам. Бирок, менин досторумдун эч кимиси кантип күрөшүү, упай топтоо, же ставкалар менен роллдорду төлөөнү билишпейт. Ошентип, столдун биз үчүн бардык дилердик жумуштарды жасоосу сонун болорун түшүндүм! Биз столго ставка койгондо, биздин чиптер ал жерде канча экенин көрсөткөн квадраттын жанына бир аз баскычты басса болот, андан кийин микроконтроллер бул чарчы үчүн төлөмдөрдү чүчү кулагандан кийин эсептеп, аны көрсөтө алат. Бул жагын кантип уюштурарымды азырынча так айта албайм. Мен ойлогом, ар бир адам өз ставкаларын кезеги менен жайгаштырууну суранат, ошондо контролер кийинки оюнчуну жазуудан мурун ар бир адамдын акчасы кайда экенин жазат. Андан кийин, ролл бүткөндөн кийин, компьютер төлөмдөрдү ар бир чарчыда көрсөтө алат жана ар бир оюнчу үчүн иштеп жаткан "жалпы акчаны" сактай алат.

Бул окуу куралынын мукабасындагы сүрөттөрдүн бири үчүн мен ушул жайда Вегастагы покер столунда 5 эйс тарткан сүрөтүмдү колдонууга туура келди. Хехе. Мага көңүл бур.

Бул жерде менин AVR ассемблер окуу куралдарымдын толук коллекциясына шилтеме бар:

1 -кадам: Кап

Craps!
Craps!
Craps!
Craps!
Craps!
Craps!

Бул үйрөткүчтө биз акыркы Craps оюнунун эң жөнөкөй бөлүгүн гана курабыз. Бул "Pass Line" деп аталат жана сиз ага ставка коё аласыз. Сиз бул кадамга тиркелген кыска 2 мүнөттүк нускоочу видеону көрүү менен оюндун "өтмө линия" бөлүгү жөнүндө билишиңиз керек болгон нерселердин бардыгын биле аласыз.

Биз дагы 4 орундуу дисплей курабыз, ал Дилердин Акчасын эсепке алат, азыркы 4 орундуу дисплейибиз Оюнчунун Акчасын эсепке алат. Дилер 20 доллардан башталат жана оюнчу 20 доллардан башталат (оюндагы мүмкүн болгон акчанын жалпы суммасы 9999 доллар-биздин 4 орундуу дисплейлерибиздин максимуму, бирок оюндун биринчи бөлүгү үчүн бизге 20 доллар гана керек болот. татыктуу убакытта утуп же жоготуп алуу өтө оор жана кыйын болмок). Эгерде оюнчу дилердин бардык акчасын алса, оюнчу жеңет. Эгерде оюнчу бардык акчасын жоготсо, анда дилер утат.

Кантип акчаны утуп же жоготосуз? Ооба, Craps ойногон, көчөдө "чүкө аткандарды" көргөн же Вегастагы казиного каршы ойногондорду көргөндөр билишет. Калганыныздар үчүн, биз оюндун "өтмө линия" бөлүгүнүн бүгүн биз коддой турган кыскача сүрөттөмөсүн берейин.

Craps кресттүүлөр мезгилине таандык жүздөгөн жылдар бою ойнолуп келген. Муну Экинчи дүйнөлүк согуштун траншеясында аскерлер ойногон, көчөлөрдө ойногон, казинолордо жана оюн залдарында ойногон. Бул жөн эле өтмөк линиясынан башталды жана калган нерселердин баары кийинчерээк ага кошулду. Биз ушул эле прогрессти ээрчийбиз.

Өтмөктүн иштөө тартиби мындай. Сиз коюмду коюп, анан чүчү кулак саласыз. Биринчи түрмөк "чыгуучу түрмөк" деп аталат. Эгерде сиз 2 (жылан көзү), 3 (ace deuce) же 12 (кутуча унаасы) чыксаңыз, анда коюмуңузду жоготосуз жана ал "craps" деп аталат. Эгер 7 (табигый) же 11 (йо, же йо-левен) тоголосоңуз, анда сиз утасыз. Эгерде сиз башка номерди жылдырсаңыз, анда бул номер сиздин "чекитиңизге" айланат. "Пункт" түзүлгөндөн кийин, сиз 7ди тоголото туруп, чекитти дагы бир жолу уруу үчүн чүчү тоголото берүүнү уланта берсеңиз. Ошентип, доллар коюму дилерден бир доллар утуп алат. Эгерде сиз упайыңыз жетпей калганда 7 алсаңыз, бул "жети чыгып" деп аталат жана сиз дилерге коюмду жоготосуз.

Андан кийин кайра баштайсыз. Өтмөктө ставка коюп, чүчү кулак кармаңыз, 7 же 11 жеңиш, 2, 3 же 12 жеңилүү.

Дагы көптөгөн коюмдардын түрлөрү бар, "өтпө", "коэффициенттен өт", "коэффициенттен өтпө", "коюмга кел", "келбе", "талаа", "мүйүз", " оор жолдор ", ж.б.у.с. деталдарды бул жерден таба аласыз:

en.wikipedia.org/wiki/Craps

Мен жогоруда айткандай, азырынча, биз оюндун пас сызыгынын бир бөлүгүн гана коддойбуз, ал кезде балдар бири -биринин түшкү акчасы үчүн дубалга дубал ыргытып жиберишкен, ошондо биз баштайбыз.

Бирок, биз нерселерди коддоону баштоодон мурун, дилердин накталай дисплейин курууга мүмкүнчүлүк беребиз. Бул үчүн мен Sparkfunдан же башка жерден ала турган чоң 4 орундуу дисплейлердин бирин колдонгум келет. Мындан ары мен бул окуу куралдары боюнча материалдарды тизмектебейм. Эгерде сиз чындыгында мени менен бирге баарын куруп жатсаңыз, анда сиз материалдарды кайдан алууну жана алар эмне экенин билесиз. Аларды тизмектөө же алардын баасы канча экенин мен үчүн маанисиз.

Ошентип, биздин прототипдөөчү такталарыбыздын бирин, 4 орундуу чоң дисплейди, дагы бир ATmega328pди алып, ошол дисплейди башкарып, биз аны мурунку кубик ролигиндегидей жана оюнчу дисплейинде куралы. Биз ошондой эле башкаларга окшоп, бийликке, программалоого жана TWI байланыштарына аталыштарды тиркейбиз.

2 -кадам: Дилердин акча дисплейи

Дилердин акчалай дисплейи
Дилердин акчалай дисплейи
Дилердин акчалай дисплейи
Дилердин акчалай дисплейи
Дилердин акчалай дисплейи
Дилердин акчалай дисплейи

Биз дилердик дисплейди акыркы үйрөткүчтөгү оюнчунун 4 орундуу дисплейиндей кылып курабыз. Жалгыз айырмачылыктар - бул чоңураак жана анча -мынча төөнөгүчтөрү бар, ошондуктан биз аны башкача уюштуруп, зымдап өткөрөбүз.

Мен бул дисплейдин зымдарынын сүрөтүн тиркеп койгом. Сиз көрө аласыз, бул биздин playercash дисплейибизге караганда чоңураак жана түйрүктөрү азыраак. Сүрөт мен дисплейге ээ болгон sparkfun баракчасынан алынган жана анда кайсы казыктар ар бир цифр үчүн күч экенин жана кайсы казыктар сегменттердин ар бирин цифрада башкарарын көрсөтөт.

Адаттагыдай эле, сиз дисплейди прототиптөөчү панелге туташтырып, анын кандай зым экенин түшүнгөнүңүзгө ишенүү үчүн ар бир сегменти сыноодон өткөрүшүңүз керек. Андан кийин, сиз аны панелиңиздеги AVR микроконтроллеринин казыктарына туташтырып, бул окуу куралында биздин бардык коддор иштей электе, ошол жерден иштетишиңиз керек. Акыр -аягы, аягында, сиз тышкы тактаны куруп, аны ширетишиңиз керек. Анан акыркы продуктту текшергенде, сиз көйгөйлөр коддон эмес, сиздин ширетүү жана кесүү жумушуңуздан келип чыгарын билесиз. Ошондой эле, жыгач усталыктан белгилүү аксиоманы "эки жолу өлчөп, бир жолу кесүүнү", же схемаларды жасоодо: "эки жолу кесип, бир жолу ширетүүнү" унутпаңыз. Сүрөттөн көрүнүп тургандай, мен акыры иштебей калдым жана мындай жумуш үчүн эң сонун Dremel тиркемесин сатып алдым. "Diamond Point Set". Бул 5 долларга турду, бирок бул менин кесүү жумушумду бир нече жолу катары менен кетирүү менен келген Ачууну башкаруу терапиясынын баасынан бир топ аз.

Мен бул дисплей үчүн 330 Ом резисторлорун колдонуп жатам. COM пиндери резистор аркылуу GNDге өтөт жана күч сиз каалаган сегментке өтөт. Мен PC3 аркылуу PC3 аркылуу COM казыктарын жана PB0, PB1, PB2, PB3, PB4, PD5, PD6 жана PD7 сегменттерин колдоном.

Бул жерде сиздин туура мүмкүнчүлүгүңүздү максималдаштыруунун ачкычы:

  1. схеманы картага түшүрүү
  2. схеманы кесүү
  3. зымыңызды текшериңиз
  4. резисторлорду, капкактарды жана кристалл осцилляторун тиркеңиз
  5. байланыштарды жана зымдарды кайра текшериңиз
  6. тышкы зымдарды туташтыруу
  7. микроконтроллерди тиркөө
  8. зымдарды кайра текшериңиз
  9. 4 орундуу дисплейди тиркөө
  10. ар бир санды нан тактасынан бир жуп зым менен текшериңиз
  11. аны бөлүп коюп, кодду жазыңыз, кийинчерээк нерселерди өзгөртүүгө туура келерин билип, үзүлүшү керек болгон байланышты жапкан жоксуз деп үмүттөнөбүз.

Мен зым тартуу жумушумдун сүрөттөрүнүн сериясын көрсөттүм. Сураныч, сиз каалагандай түрдө өзүңүздүн зым менен байланышууга акысыз экениңизди түшүнүңүз. Сиз менден жакшыраак картаны таба аласыз жана сиз аны колдонушуңуз керек. Бул окуу куралдарында эч нерсе компоненттериңиздин кантип туташканына көз каранды эмес, анткени алар туура чыгаруу портторуна ээ. Бул мага эстетет. Байкаңыз, азыр SDAга бараткан эки баш жана SCLге бараткан эки баш барбы? Эмне үчүн биз муну жасадык деп ойлойсуз?

Эми, сиз үйрөткүчтүн аягындагы тиркелген коддон көрүп тургандай, мен кодду акыркы үйрөткүчтүн дисплейинен дилердин дисплейи үчүн жаңы файлга кесип, чаптап койдум. Андан кийин мен өтүп, "сегменттерди" издөө таблицасын жаңы пин картага ылайыкташтырып өзгөрттүм, бул дисплей үчүн "com" казыктары негизделген жана сегменттин пиндери 5V башка дисплейдегидей эмес.. Мен дагы жаңы зымдарды чагылдыруу үчүн порттордун инициализациясын өзгөрттүм, дилердик дисплейдин дарегин 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 -кадам: Master Communication Code

Master Communication Code
Master Communication Code

Биз азыр сүйрөө ролигинин байланыш тартибин жаза алабыз. Бул дагы биз акыркы жолу жазганга окшош, бирок биз бир эмес, эки башка кул менен баарлашабыз. Көңүл бургула, кулдардын ар бири үчүн биз башка даректи колдонобуз. Сиз кодду өзүңүз өзгөртүшүңүз керек, андан кийин аны ар бир дарек менен сынап көрүңүз жана ал ар бир өзүнчө дисплейден башка акыркы окуу куралы сыяктуу иштээрин текшериңиз.

Мен ар бир компоненттин кодун тиркеп коем, ал жөн гана түрмөктүн жыйынтыгын көрсөтөт, аны дисплейлердин туура иштеши жана зымдарды текшерүү үчүн колдонсо болот.

Оюнду коддоо ассамблея тилинин буйруктарына же AVR микроконтроллеринин компоненттерине чейин жаңы эч нерсе киргизбейт, ошондуктан мен аны сап-сап аркылуу өтүүнүн кажети жоктой сезем. Балким, сиз жаңы нерсени киргизгенде, мен ар бир сапты майда -чүйдөсүнө чейин уктап калбасам, кыжырданууңузга чейин жеткирерин байкадыңыз. Экинчи жагынан, эгерде жаңы эч нерсе киргизилбесе, мен андай кылбайм. Бүгүнкү күндө ушундай. Демек, сиз азырынча код менен ойноого, кодду окууга, кодду талдоого, кодду түшүнүүгө, кодду сындоого, кодду шылдыңдоого жана кодду жазган жигитке күлүүгө даярсыз деп ойлойм. Ошентип, мен муну кылышыңа уруксат берем. Мен жазгандарымды жакшырта турган же жок дегенде жөнөкөйлөтө турган көптөгөн жерлерди таба турганыңыз анык.

Мен, адаттагыдай эле, эки дисплейдин кодунун акыркы версиясын жана кийинки кадамда дицероллерди тиркеп койгом, бул нерсени сынап жаткан видео.

5 -кадам: Акыркы код жана видео

Мен видеону жана 3 программаны тиркеп койдум. Сиз.equ билдирүүлөрү менен программанын жогору жагындагы ставканы жана баштапкы дилерди жана оюнчунун акчасын оңдой алаарыңызды байкайсыз.

Кийинки үйрөткүчтө биз оюнду кызыктуу кыла турган ар кандай нерселерге коюмду кошобуз. Заманбап Crapsтын кызыктуу жери, сизде ставкалардын ар кандай жолдору бар жана мүмкүнчүлүктөрүңүздү максималдаштырууга аракет кылыңыз. Чындыгында, Craps - бул казинодогу эң жогорку коэффициент оюну! … ЭГЕР сен аны кантип ойногонду билсең. Башка жагынан алганда, эгер сиз кантип ойногонду билбесеңиз, анда бул эң төмөнкү коэффициентке ээ болгон оюндардын бири болуп калат.

Акчабызды коё турган нерселерибиз көп болгондон кийин, мен оюндагы акчанын жалпы суммасын көбөйтөм.

Мен көңүлдүү болушум керек!

Кийинки жолу көрүшкөнчө!

Сунушталууда: