Мазмуну:

BloodBowl Turn Counter 7-сегменттүү диоддорду колдонуу: 5 кадам
BloodBowl Turn Counter 7-сегменттүү диоддорду колдонуу: 5 кадам

Video: BloodBowl Turn Counter 7-сегменттүү диоддорду колдонуу: 5 кадам

Video: BloodBowl Turn Counter 7-сегменттүү диоддорду колдонуу: 5 кадам
Video: Better one turn touchdowns defences in Blood Bowl? 2024, Ноябрь
Anonim
BloodBowl Turn Counter 7 сегменттүү диоддорду колдонуу
BloodBowl Turn Counter 7 сегменттүү диоддорду колдонуу

Бул долбоор алты Charlieplexed 7 сегменттүү LEDди колдонуп, BloodBowl оюнун эсептегич үчүн болгон.

1 -кадам: Түшүнүк

Түшүнүк
Түшүнүк

Бир досум менден өзүнүн оюнуна Bloodbowl Turn эсептегичин куруу идеялары жөнүндө сурады. Бул эмне экенин жана ал эмнени каалаарын билбей туруп, мен муну кантип жасаарымды чечиш үчүн бир аз убакыт өттү. Мен биринчи кезекте анын эмнени каалап жатканын түшүнүшүм керек болчу, ошондуктан концепция искусствосу менен баштадым (сүрөт). Негизги идея - 3 баскычты басып, ар биринде 3 светодиодду башкарып туруу жана ал атайын курулган мунаранын ичине жайгаштырылат. Бир гана чоң суроо - бул 4 дисплейдин 0дон 8ге чейин санап, баштапкы абалга келтирүү, жана төмөнкү 2 дисплейлер 8ден 0гө чейин кайра эсептешет жана мен кайра айлампаны бүтүрмөкмүн, ал мунараны бүтүрмөк.

2 -кадам: Дизайн жана тетиктердин тизмеси

Дизайн жана тетиктердин тизмеси
Дизайн жана тетиктердин тизмеси

Концепция 7 7-сегменттүү LEDди талап кылгандыктан, менде 8-бит Microchip PIC колдо болгон, мен LEDдерди башкаруу үчүн PICти колдонуу жолдорун изилдедим. /picbook/7_08chapter.htm "6 дисплейге ар бир дисплейдин жарыктыгы таасирин тийгизбестен кирүүгө болот." Мен муну проектимдин бир бөлүгү катары иликтей турган кыйынчылык деп ойлодум. Биринчи кылган нерсе, кутучамдагы 7-сегменттүү дисплейлерди алып, алар кандай иштээрин көрдүм. Жаман кабар. Мен тандаган бөлүктөр мен каалагандай эмес болчу. Сегмент керек болгондо, нан тактасында күймөк, бирок агуу агымы башка 6 сегментке бөлүштүрүлгөн. Мен кызытуучу дисплейлердин жолу болбошу мүмкүн экенин түшүндүм же аларды башкача колдонуу керек болчу. Жөнөкөйлүк үчүн мен 7-сегменттүү LED диапазондору үчүн иштээрин тастыктадым жана аноддук дисплейге заказ кылдым. Экинчи нерсе-менин дизайнымды түзүү жана коддун үстүндө иштөө. Сүрөт менин айланам. Бул анча деле маанилүү эмес, анткени PICтеги код мультиплекстөө жөнүндө кам көрөт … ката Charlieplexing. Эскертүү: БАРДЫК 6 дисплейде айдоочу ICден бирдей саптар бар. Селектордук IC ар бир дисплейди иштетет, бир убакта 1 жана 7 сегменттик линиялар ошого жараша PIC тарабынан жаңыртылат. Абдан жөнөкөй идея. Андан кийин, код менен аппараттык жабдууну бүтүрүү керек болгон нерселердин баары. Бөлүктөрдүн тизмеси Digi-Keyден 3 кичинекей буйрутмадан кийин, конкреттүү компоненттерди чечүүдө мага керектүү нерселердин баары бар болчу (колумда кээ бир нерселер бар); 1 ~ 3 "x4 "PCB6 кичине баскыч баскычтары (NO) 1 74LS47, 7 сегменттүү дисплей IC1 PIC16F627 1 CD4028, 10дун ичинен 1 селектор IC 6 10KOhm резисторлору 1 470Ohm каршылыгы1 зымдын катушкасы. Мен ар кандай түстөрдү жана көрсөтмөлөрдү колдондум, бирок бул жөн эле мен болчумун. 78L05 5V регулятору 1 9В батарейка клипи 9 9 батарея 1 кичине которуштуруу (күйгүзүү/өчүрүү үчүн) Мен муну орточо татаал долбоор деп эсептейм; breadboarding 3) Дизайн оптимизациясы. Бул маселелердин эч бири өтө эле татаал эмес, бирок алардын баарын эч кандай тажрыйбасы жок эле кабыл алуу башталгыч үчүн көп нерсе болушу мүмкүн. Аппаратты, ширетүүчү станцияны ж. Тез чечүүгө уруксат бериңиз, менин баштапкы дизайнымды айтып бердим … бирок түшүндүрүү үчүн кийинки кадамды окуңуз!

3 -кадам: Breadboarding & Micro Code

Breadboarding & Micro Code
Breadboarding & Micro Code

Breadboard бул үчүн зарыл болгон. Көрсөтүлгөн менин жалпы панелим, бирок бул долбоордун чоңдугу үчүн мен чындыгында ушул жана кичине нанды колдондум, анткени аралыкты ажыратуу керек болгон көптөгөн зымдар бар болчу. Биринчиден, мен баштапкы кодду колдонуу менен бир 7 сегменттүү LEDди сынап көрдүм. Бул 3 нерсени тастыктады; 1) ICдин зымдары жакшы текшерилди! 2) Мени кодумду оптималдаштырууга жана аягына чыгарууга алып келди.3) Мага учурдагы чектөөчү резисторлордун кереги жок экенин түшүндүм! 1 WIRINGA айтылгандай, менин схемалык дизайным табылды Менин кодум менен иштөө үчүн, LED бир баскычты баскычты колдонуп сандар аркылуу өтөт, ошондуктан менин кодумду жана жайгашуумду ырастады. Көп нерсе талап кылынган жок, бирок breadboarding менин жакшы абалда экенимди ырастады.2 CODEI башында коддорумду баскычтарды издөөнүн негизги тартиби менен белгиленген жана ISR (Interrupt Service Routine) сандарды көрсөтөт. Банборд тесттеринен кийин мен күн тартибимди тескерисине өзгөрттүм, ошондуктан көпчүлүк учурда сандар жана ISR баскычтарды текшерүү үчүн дайыма көрсөтүлүп турчу. Менин муну жасашымдын себеби, дайыма дисплейге ээ болуу болчу, анткени PIC ички 4Mhz сааты менен иштеп жаткандыктан, мен баскычтарды издөөгө өтө аз убакыт жоготуп жатам. Эч кандай чоң көйгөй жок … жөн гана кодду кантип жасоону каалаганыңыздан жана ар бир тиркеме үчүн эң мааниси бар нерседен көз каранды. Бул үчүн дисплей маанилүү, ошондуктан мен муну негизги күн тартибине койдум. Биринчи бөлүктөрүм келгенде (баардыгы 6 дисплей!), Мен панель зымдарын бүтүрүп, башка маселени таптым. Баскычты басканда, менин кодум тазаланбай жаткан кээ бир шалаакы реестрлерге ээ болчу жана ISR дисплейдеги кичинекей каталарды алып келди.; ======================== ================================================= =====; Turn Counter;; -----------; Dsply3 Dsply2; Dsply4 Dsply1; Led1 Led3; A5 | 4 15 | A6 - Led2; Vss | 5 14 | Vdd; Button1 B0 | 6 13 | B7; B1 | 7 12 | B6; B2 | 8 11 | B5; B3 | 9 10 | B4; -----------;; LED1-3-BCD-dec IC -LEDSeg's1-6; Dsply1-3-BCD-7seg IC -Dsply#1-9;; ================================ =============================================; Revision History & Notes:; V1.0 Баштапкы Баш аты, Code 3/30/09;;; (C) 5/2009; Бул код жеке үйрөнүү/колдонуу/өзгөртүү үчүн колдонулушу мүмкүн.; Бул кодду коммерциялык продукцияда колдонуу бул бекер чыгарууну бузат..; ------------------------------------------------ -------------------------------#P16F627A. INC кирет; ============= ================================================== =================; Аныктайт; ------------------------------------------------ -------------------------------; ================== ================================================= ===========; Маалымат; ------------------------------------------------ -------------------------------; Убакыт сактоо өзгөрмөлөрү1 барабар 20 эсеп2 барабар 21 дис1 барабар 22дис2 барабар 23дис3 барабар 24дис4 барабар 25дис5 барабар 26дис6 барабар 27w_temp барабар 28status_temp барабар 29ISRCNTR барабар 2A; ===================== ================================================== =======; Векторлорду кайра коюу;; Конфигурацияны текшерүү. КҮЙГӨНГӨ ЧЕЙИН !!!; INTOSC; MCLR: ENABLED; PWRUP: ENABLED; БАШКАЛАР: ӨЧҮРҮҮ !!;; ------------------------------------------ ------------------------------------- RESET_ADDR EQU 0x00 ISR_ADDR EQU 0x04 org RESET_ADDR баштоо керек; == ================================================== ============================; ISR;; ----------------------------------------------- -------------------------------- уюм ISR_ADDR movwf w_temp swapf STATUS, w movwf status_temp;; ISR БУЛ ЖЕРДЕ; PB0-PB5 которгучтарын текшерүү btfsc PORTB, 0; SW1 чалуусун текшерүү sw1debounce btfsc PORTB, 1; SW1 чалуусун текшерүү sw2debounce btfsc PORTB, 2; SW1 чалуусун текшерүү sw3debounce btfsc PORTB, 3; SW1 чалуусун текшерүү sw4debounce btfsc PORTB, 4; SW1 чалуусун текшерүү sw5debounce btfsc PORTB, 5; SW1 чалуусун текшерүү sw6debounce goto endisrsw1debounce чалуу дебунга; Күтө туруңуз 0.2 сек чалуу debounce incf dis1; Жаңыртуу movf dis1, W; Xorlw 0x1A толушун текшериңиз; 7 боюнча 7? btfss STATUS, Z кайтуу; Жок, скандоого кайтыңыз. movlw h'10 '; Ооба, дисплейди баштапкы абалга келтирүү. movwf dis1 returnw2debounce чакырууну четтетүү; Күтө туруңуз 0.2 сек чалуу debounce incf dis2; Movf dis2, W эсептегичтерин жаңыртуу; Xorlw 0x4A ашуусун текшерүү; 7 боюнча 7? btfss STATUS, Z кайтуу; Жок, скандоого кайтыңыз. movlw h'40 '; Ооба, дисплейди баштапкы абалга келтирүү. movwf dis2 returnw3debounce чалуудан чыгуу; Күтө туруңуз 0.2 сек чалуу debounce incf dis3; Жаңыртуу counter movf dis3, W; Xorlw 0x5A ашуусун текшериңиз; 7 боюнча 7? btfss STATUS, Z кайтуу; Жок, скандоого кайтыңыз. movlw h'50 '; Ооба, дисплейди баштапкы абалга келтирүү. movwf dis3 returnw4debounce чалууну четтетүү; Күтө туруңуз 0.2 сек чалуу debounce incf dis4; Жаңыртуу counter movf dis4, W; Xorlw 0x8A ашуусун текшериңиз; 7 боюнча 7? btfss STATUS, Z кайтуу; Жок, скандоого кайтыңыз. movlw h'80 '; Ооба, дисплейди баштапкы абалга келтирүү. movwf dis4 returnw5debounce чалууну четтетүү; Күтө туруңуз 0.2 сек чалуу debounce incf dis5; Жаңыртуу counter movf dis5, W; Xorlw 0x9A ашуусун текшериңиз; 7 боюнча 7? btfss STATUS, Z кайтуу; Жок, скандоого кайтыңыз. movlw h'90 '; Ооба, дисплейди баштапкы абалга келтирүү. movwf dis5 returnw6debounce чалуудан чыгуу; Күтө туруңуз 0.2 сек чалуу debounce incf dis6; Жаңыртуу counter movf dis6, W; Xorlw 0xCA толушун текшериңиз; 7 боюнча 7? btfss STATUS, Z кайтуу; Жок, скандоого кайтыңыз. movlw h'C0 '; Ооба, дисплейди баштапкы абалга келтирүү. movwf dis6 returnendcr bcf INTCON, T0IF swapf status_temp, w movwf STATUS swapf w_temp, f swapf w_temp, wretfie; ========================= ================================================= =; Бул жерден башта!;---------------------------------------------- --------------------------------- баштоо; Config I/O port clrf PORTA movlw 0x07 movwf CMCON bcf STATUS, RP1 bsf STATUS, RP0 movlw h'00 '; RA Outts, RA5 Movwf TRISA bcf STATUS, RP0 clrf PORTB bsf STATUS, hPF movlf; RB Кириштери movwf TRISB; Ички таймерди коюу bsf PCON, 3; 4 МГцке коюңуз. movlw h'CF '; Tmr0 Ички булак, алдын ала эсептөө TMR0 1: 256 movwf OPTION_REG movlw h'A0 'movwf INTCON; TMR0 үзгүлтүктөрүн иштетүү, bcf STATUS, RP0; Реестрлерди баштоо clrf PORTA; Тазалоо PortA clrf PORTB; Clear PortB чыгымдары clrf count1 clrf count2 movlw h'10 'movwf dis1 movlw h'40' movwf dis2 movlw h'50 'movwf dis3 movlw h'80' movwf dis4 movlw h'90 'movwf dis5 movlw h'C0' movwf dis6 call четтетүү; 0.2 сек; сыноо LED, 8 дисплей ???; =================================== =========================================; Негизги; Коммутаторлордон, дебордон жана дисплейлерден киргизүүлөрдү алат.;; Бул дисплейлерди @4Mhz TMR0 prescal 1: 4 менен 1Кц ылдамдыкта жаңыртат.; 0 дисплейи колдонулбаган дисплейге бөлүштүрүү үчүн колдонулат. Дисплей 1-6 зымдуу.; Биринчиден, BCD-7Seg IC дисплей мааниси менен жүктөлөт, жана BCD-Dec IC активдештирилет; дисплей тандоо.; Экинчиден, дисплей үчүн мс кечиктирүү өткөрүлөт. IC өчүрүлгөн… дисплейди өчүрүү үчүн display0 тандалган;; Бул 6 дисплейдин ар бири үчүн кайталанат жана илинет. -------------------------------------------------- --------------- негизги; Disp1 movf dis1, 0 movwf PORTA чалуу ledon goto main; ===================== ================================================== ========; Ледон; LED энергиясын күйгүзүү убактысы; 6 дисплей-1Khz = 166 цикл боюнча 1/6 милдет цикли; ----------------------------------- -------------------------------------------- ledon movlw.54 movwf count1ledloop decfsz count1, F goto ledloopreturn; ======================================== ====================================; Сигналды ажыратуу; Жүктөө жана чалуу үчүн 4 цикл, кайтуу үчүн 2 цикл.; 4Mhz Tc:: count2 = 255-> 0.2 сек; -------------------------------------- ----------------------------------------- deblu movlw.255; 1/5 секунданын кечигүүсү. movwf count2 чалуу pon_wait кайтаруу; -------------------------------------------- -----------------------------------; count1 = 255d:: 775 цикл 0, + 3 цикл кайтаруу үчүн.; --------------------------------- ---------------------------------------------- pon_waitbig_loopS movlw.255 movwf count1short_loopS decfsz count1, F goto short_loopS decfsz count2, F goto big_loopSreturnend3 CIRCUITI башында 74LS47 жана CD4028 иштетүү линиясынан ар бир дисплей айдоочу линиясынан 470Ohm резисторлору болгон. Бирок, мен өзүмдүн схемамдын учурдагы тартылышын сынап көрдүм жана ал ~ 31mA гана тартылып жатканын байкадым. Дисплейлер үчүн чыныгы драйвер түздөн -түз 74LS47ден жана иштетүү башка ICден болгондуктан, орточо жана эң жогорку талаптардын тез иштеши жана тиешелүү маалымат баракчалары….. Мен резисторлорду нан тактасынан сууруп чыгып, 1мА айырмачылыкты таптым. ! Бардык сегменттерди түз айдап бара жатканда CA линиясын 4028ден түз айдап баруу жарашат окшойт! …сыяктуу.:) Менде коддо ката бар болчу, ал баскыч басылганда менин регистрлеримди тазалабады, бул акыркы дисплейде 2 сегмент абдан басылганда, баскыч басылганда. Бул жаман болчу. Бирок, реестрди тазалоо бул көйгөйдү чечти жана үзгүлтүксүз кубаттуулукту текшерүү анын дайыма 30mA чегине жакын экенин тастыктайт. Бул мага (окшош схемалардагы мурунку тажрыйбанын негизинде) ~ 20 саат иштөө убактысын бериши керек 1 9V батарейканы (5V жөнгө салуу боюнча 500mAH/30mAH)… Мен үмүттөнөм! Мен LEDди түз башкарууну чечтим, бирок аларды розеткаларга салдым бир нерсе болгон болсо, узак мөөнөттүү.

4 -кадам: PCB менен ширетүү

PCB Soldering
PCB Soldering

Долбоорумдун ушул пунктуна жеткен сайын мен abitти кечиктирем. Башында мен бул нерсени зым менен ороюн деп жаткам, бирок бул идеяны тез эле таштадым. Башында "Бир нече зымдарды ширетүү керек, анча деле маанилүү эмес" деп ойлойм … андан кийин, менин долбоорум ширетүүгө даяр болгондо, мен ойлоп жатам, " Мен прото тактаны жасатышым керек же өзүмдүн тактайымды чийип салышым керек эле ". Мен ПКБ чегүүгө кире элекмин (жана азырынча) тактай жасаш үчүн $$ төлөгүм келген жок, ошондуктан…. Ооба ….. Мен бул нерсени 3 сааттай ширеттим. Бул болжол менен 150 зым, ошондуктан бул 300 ширетүү пункттары, жана кошуу көпүрөлөр үчүн контакттар. Баары бир, бул жерде тактанын арткы бети сүрөттөлгөн ….. Дисплей туура эмес #логикалык үлгүдө көрсөтүлүп жатканын көрсөткөндөн бери 20 мүнөт ойлондум. Андан кийин, мен кыска жайгашкан, жана bam! Бул кемчиликсиз иштеген.

5 -кадам: Жыйынтык

Жыйынтык
Жыйынтык

Бул иштеди! Бул проект жөнүндө; ~ 2 жума ойлонуп, суроо берүүчүгө жакшы пункттарды электрондук почта менен жөнөтүү үчүн, ~ 3 саат кодду толтуруу жана мүчүлүштүктөрдү оңдоо, ~ 4 саат нан табуу жана мүчүлүштүктөрдү оңдоо, ~ 3 саат ширетүү 3 ICди колдонуу мүмкүн Charlieplex 6 7-сегменттүү LED. Power тартуу бул дизайн менен болжол менен 30mA болот, эгерде мен өзүм айтсам жаман эмес. Мен дагы 7 сегменттүү LEDди колдонууга болот деп шектенем, бирок конвертти түрткөн жокмун. 7-сегменттүү диоддорду колдонуп, дээрлик бардык колдонмолорго колдонулат; термометр, саат, текст дисплейи, ж.б.у.с. Кээ бир татаал коддор менен сизде кыймылдуу дисплей же сүрөттөр болушу мүмкүн … балким ал тургай POV (көрүнүштүн туруктуулугу) долбоору үчүн база. Акыркы ишке ашыруу досума өзүнүн мунарасын курууга калтырылган. жана тактаны өзү каалагандай жайгаштырыңыз. Эгерде/Бул бүткөндө, мен жүктөлгөн сүрөттү алам. Бирок схемага келсек, бул заказ үчүн курулган окшойт!

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