Мазмұны:

7 сегментті жарықдиодты қолданатын BloodBowl есептегіші: 5 қадам
7 сегментті жарықдиодты қолданатын BloodBowl есептегіші: 5 қадам

Бейне: 7 сегментті жарықдиодты қолданатын BloodBowl есептегіші: 5 қадам

Бейне: 7 сегментті жарықдиодты қолданатын BloodBowl есептегіші: 5 қадам
Бейне: How to use LED seven segment display and calculate its resistors value 2024, Қараша
Anonim
BloodBowl бұру санағышы 7 сегментті жарықдиодты қолданады
BloodBowl бұру санағышы 7 сегментті жарықдиодты қолданады

Бұл жоба Charlieplexed 7 сегментті алты жарықдиодты қолданатын BloodBowl ойынының есептегіші болды.

1 -қадам: Тұжырымдама

Тұжырымдама
Тұжырымдама

Менің бір досым маған өзінің тақта ойынына арналған Bloodbowl Turn есептегішін құру идеялары туралы сұрады. Бұл не екенін және ол нені қалайтынын білмей, мен мұны қалай және қалай жасау керектігін шешу үшін біраз уақыт қажет болды. Алдымен мен оның не қалайтынын түсінуім керек еді, сондықтан мен концепция өнерінен бастадым (сурет). Негізгі идея - әрқайсысында 3 жарықдиодты басқаратын 3 түйменің болуы және ол арнайы салынған мұнараның ішіне орналастырылады. Жалғыз үлкен сұраныс - жоғарғы 4 дисплейдің 0 -ден 8 -ге дейін есептелуі және қалпына келтірілуі, ал төменгі 2 -сінің болуы. дисплейлер 8 -ден 0 -ге дейін кері санайды және кері айналады, мен тізбекті аяқтаймын, ал ол мұнараны аяқтайды.

2 -қадам: Дизайн мен бөлшектер тізімі

Дизайн мен бөлшектер тізімі
Дизайн мен бөлшектер тізімі

Тұжырымдамада 7 сегментті 6 жарық диоды қажет болғандықтан, менде 8-разрядты микрочипті PIC-тер бар болғандықтан, мен светодиоды басқару үшін PIC-ті қолдану әдістерін зерттедім. Мен бұл сілтемені таптым https://www.mikroe.com/kz/books /picbook/7_08chapter.htm «Әр дисплейдің жарықтығына әсер етпестен 6 дисплейге осылай қол жеткізуге болады» дейді. Мен бұл мәселені өзімнің жобамның бір бөлігі ретінде қарастырдым және бірінші кезекте 7 сегментті қыздырылған дисплейлерді алып, олардың қалай жұмыс істейтінін көрдім. Жаман жаңалықтар. Мен таңдаған бөліктер мен қалағандай болмады. Сегмент қажет болған жағдайда, тақтада жанып тұрады, бірақ ағып кету тогы басқа 6 сегментке таратылды. Мен қыздыру дисплейлері дұрыс емес екенін түсіндім немесе оларды басқаша пайдалану керек болды. Мен қарапайымдылық үшін қолымда бар 7 сегментті жарық диодтарының жұмыс жасауын тексердім және анодтық дисплейге тапсырыс бердім. Екіншіден, мен дизайнды орналастырып, кодпен жұмыс жасауды бастадым. Суретте менің схемам. Бұл маңызды емес, өйткені 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 шағын қосқыш (қуатты қосу/өшіру үшін) Мен мұны орташа күрделі жоба деп санаймын; 1) Микропроцессордың коды қажет 2) Дәнекерлеу және 3) Дизайнды оңтайландыру. Бұл мәселелердің ешқайсысы тым күрделі емес, бірақ олардың барлығын тәжірибесіз қабылдау жаңадан бастаушы үшін өте қиын болуы мүмкін. Құрылғыны, дәнекерлеу станциясын және т. Маған тез арада шешуге рұқсат етіңіз, мен олардың түпнұсқалық дизайнын айттым … бірақ түсіндіру үшін келесі қадамды оқыңыз!

3 -қадам: Breadboard және микро код

Breadboard және микро код
Breadboard және микро код

Нан тақтасы бұл үшін қажет болды. Менің жалпы табақшам көрсетілген, бірақ бұл жобаның өлшемі үшін мен осы және одан да кішірек тақтаны қолдандым, себебі аралықты ажырату қажет болатын көптеген сымдар болды. Біріншіден, мен 7 кодты бір жарықдиодты бастапқы кодты қолдана отырып сынап көрдім. Бұл 3 нәрсені растады; 1) IC -дің сымдары жақсы тексерілді! 2) мені кодты оңтайландыруға және аяқтауға мәжбүр етті.3) Маған ағымдағы шектеуші резисторлар қажет емес екенін түсіндім! 1 WIRINGA айтылғандай, менің схемалық дизайным табылды менің кодымен жұмыс істеу үшін, себебі светодиод бір батырмалы қосқышты пайдаланып сандар бойынша айналады, осылайша менің коды мен орналасуын тексерді. Көп нәрсе талап етілмеді, бірақ мен жақсы күйде екенімді растады. Банкте тестілеуден кейін мен күн тәртібін өзгерттім, сондықтан уақыттың көп бөлігі батырмаларды тексеру үшін үнемі сандар мен ISR көрсетіп тұрды. Менің мұны істеуімнің себебі - үнемі дисплейде болу, себебі PIC ішкі 4 МГц сағатпен жұмыс істейтіндіктен, мен түймелерді іздеуге өте аз уақыт жоғалтамын. Маңызды емес … тек сіз кодты қалай жасағыңыз келетініне және әр қосымша үшін неғұрлым мағыналы екеніне байланысты. Бұл үшін дисплей маңызды, сондықтан мен оны негізгі тәртіпке қойдым. Менің бірінші бөліктерім келгенде (барлығы 6 дисплей!), Мен тақтаның сымын аяқтадым және басқа мәселені таптым. Түймені басқан кезде менің кодымда тазартылмаған кейбір регистрлер болды, ал ISR дисплейде кішкене ақаулар тудырды.; ======================== =================================================== =====; бұру санағышы;; -----------; Dsply3 Dsply2; Dsply4 Dsply1; Led1 Led3; A5 | 4 15 | A6 - Led2; Vss | 5 14 | Vdd; Button1 B0 | 6 13 | B7; В1 | 7 12 | B6; В2 | 8 11 | B5; В3 | 9 10 | B4; -----------;; LED1-3-BCD-dec IC -LEDSeg's1-6; Dsply1-3-BCD-7seg IC -Dsply#1-9;; =============================== ==============================================; Қайта қарау тарихы мен ескертулер:; V1.0 Бастапқы тақырып, 30.03.09 коды;;; (C) 5/2009; Бұл кодты жеке оқу/қолдану/өзгерту үшін пайдалануға болады.; Коммерциялық өнімдерде бұл кодты кез келген қолдану осы тегін бағдарламалық қамтамасыз етуді бұзады.; Сұрақтар/түсініктемелер үшін yahoo dot com мекенжайындағы нүктелік сиқырмен байланысыңыз..; ------------------------------------------------ ------------------------------#құрамында P16F627A. INC; ============= ================================================== =================; Анықтайды; ------------------------------------------------ -------------------------------; ================== =================================================== ============; Деректер; ------------------------------------------------ -------------------------------; Уақыт сақтайтын айнымалылар саны1 тең 20 санау 2 теңдеу 21 дис1 тең болу 22 диссо теңдік 23dis3 тең болу 24dis4 тең болу 25dis5 тең болу 26dis6 тең болу 27w_temp equ 28status_temp equ 29ISRCNTR equ 2A; ===================== =================================================== =======; Векторларды қалпына келтіру; КОНФИГРАЦИЯНЫ ҚАРАҢЫЗ. КҮЙІКТІҢ АЛДЫНДА БІТТЕР !!!; INTOSC; MCLR: ENABLED; PWRUP: ENABLED; БАСҚАЛАР: МҮГЕДІ !!;; ------------------------------------------ ------------------------------------- RESET_ADDR EQU 0x00 ISR_ADDR EQU 0x04 org RESET_ADDR бастау керек; == ================================================== ============================; ISR;; ----------------------------------------------- -------------------------------- ұйым ISR_ADDR movwf w_temp 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 секунд күтіңіз, қоңыраудан бас тарту incf dis1; Movf dis1, W есептегішін жаңарту; Xorlw 0x1A толып кетуін тексеріңіз; 7 сегментте 10? btfss STATUS, Z қайтару; Жоқ, сканерлеуге оралыңыз. movlw h'10 '; Иә, дисплейді қалпына келтіру. movwf dis1 қайтарады w2debounce қоңыраудан бас тарту; 0.2 секунд күтіңіз, қоңыраудан бас тарту incf dis2; Mov2 dis2, W есептегішін жаңарту; Xorlw 0x4A толып кетуін тексеріңіз; 7 сегментте 10? btfss STATUS, Z қайтару; Жоқ, сканерлеуге оралыңыз. movlw h'40 '; Иә, дисплейді қалпына келтіру. movwf dis2 қайтарады w3debounce қоңыраудан бас тарту; 0.2 секунд күтіңіз, қоңыраудан бас тарту incf dis3; Movf dis3, W есептегішін жаңарту; Xorlw 0x5A толып кетуін тексеріңіз; 7 сегментте 10? btfss STATUS, Z қайтару; Жоқ, сканерлеуге оралыңыз. movlw h'50 '; Иә, дисплейді қалпына келтіру. movwf dis3 қайтарады w4debounce қоңыраудан бас тарту; 0.2 секунд күтіңіз, қоңыраудан бас тарту incf dis4; Mov4 dis4, W есептегішін жаңарту; Xorlw 0x8A толып кетуін тексеріңіз; 7-сегменде 10? btfss STATUS, Z қайтару; Жоқ, сканерлеуге оралыңыз. movlw h'80 '; Иә, дисплейді қалпына келтіру. movwf dis4 қайтарады w5debounce қоңыраудан бас тарту; 0.2 секунд күтіңіз, қоңыраудан бас тарту incf dis5; Movf dis5, W есептегішін жаңарту; Xorlw 0x9A толып кетуін тексеріңіз; 7 сегментте 10? btfss STATUS, Z қайтару; Жоқ, сканерлеуге оралыңыз. movlw h'90 '; Иә, дисплейді қалпына келтіру. movwf dis5 қайтарадыw6debounce қоңыраудан бас тарту; 0.2 секунд күтіңіз, қоңыраудан бас тарту incf dis6; Movf dis6, W есептегішін жаңарту; Xorlw 0xCA толып кетуін тексеріңіз; 7-сегменде 10? btfss STATUS, Z қайтару; Жоқ, сканерлеуге оралыңыз. movlw h'C0 '; Иә, дисплейді қалпына келтіру. movwf dis6 returnendisr bcf INTCON, T0IF swapf status_temp, w movwf STATUS swapf w_temp, f swapf w_temp, wretfie; ========================== ================================================== =; Осы жерден бастаңыз!; ---------------------------------------------- --------------------------------- бастау; I/O порттарын теңшеу clrf PORTA movlw 0x07 movwf CMCON bcf STATUS, RP1 bsf STATUS, RP0 movlw h'00 '; RA Шығысы, 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 секунд; сынақ диодтары, 8 дисплейі ???; ==================================== ==========================================; Негізгі; Коммутаторлардан кірістерді алады, дисконттан шығарады және ақауды шығарады.;; Бұл @4Mhz дисплейлерін TMR0 prescal 1: 4 режимінде 1КГц жиілігімен жаңартады. 0 дисплейі пайдаланылмаған дисплейге бөлу үшін қолданылады. 1-6 дисплейі сымды.; Біріншіден, BCD-7Seg IC дисплей мәнімен жүктеледі, ал BCD-Dec IC қосылады; дисплейді таңдау.; Екіншіден, дисплей үшін ms кідірісі сақталады.; Үшіншіден, BCD-Dec IC өшірулі… дисплейді өшіру үшін display0 таңдалды;; Бұл 6 дисплейдің әрқайсысы үшін қайталанады және циклмен орындалады. -------------------------------------------------- --------------- негізгі; Disp1 movf dis1, 0 movwf PORTA call ledon goto main; ===================== =================================================== ========; Ледон; Жарықдиодты қуат көзінің қосылу уақыты.; 6 дисплей-1 Гц = 166 циклдегі 1/6 жұмыс циклы; ----------------------------------- -------------------------------------------- ledon movlw.54 movwf count1ledloop decfsz count1, F goto ledloopreturn; ======================================== =====================================; Шығу сигналы; Жүктеуге және шақыруға 4 цикл, қайтаруға 2 цикл.; 4Mhz Tc:: count2 = 255-> 0,2 сек; -------------------------------------- ----------------------------------------- debl 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 қосу жолынан әр дисплей драйверінің 470 Ом резисторларына ие болды. Дегенмен, мен тізбектің ағымдағы тартылуын сынап көрдім және ол тек ~ 31мА тартатынын анықтадым. Дисплейлердің нақты драйвері тікелей 74LS47 -ден және қосылу басқа IC -ден болғандықтан, орташа және максималды талаптардың тез төмендеуі және сәйкес деректер парақтары …. мен резисторларды тақтадан алып тастадым және 1мА айырмашылықты таптым. ! Барлық сегменттерді тікелей жүргізу кезінде 4028 -ден CA желісін тікелей жүргізу жақсы сияқты! … түрі.:) Менде кодта түйме басылған кезде регистрлерімді тазартпаған қате болды, бұл соңғы дисплейде түймені басқан кезде 2 сегмент өте жарқын болды. Бұл жаман болды. Алайда, реестрді тазарту бұл мәселені шешті, ал қуатты үздіксіз тексеру оның 30мА шамасында тұрақты екенін растайды. Бұл маған (ұқсас схемалардағы бұрынғы тәжірибеге негізделген) 1 9В батареяны (5V реттеу бойынша 500 мАч/30 мАч) қолдана отырып ~ 20 сағат жұмыс уақытын беруі керек … Мен светодиодты тікелей жетектеуді шештім, бірақ оларды розеткаға бірдеңе болған жағдайда, ұзақ мерзімді.

4 -қадам: ПХД дәнекерлеу

ПХД дәнекерлеу
ПХД дәнекерлеу

Мен өз жобамның осы нүктесіне жеткен сайын, мен кешіктіремін. Алдымен мен бұл нәрсені сыммен орамақ болдым, бірақ бұл ойды тез арада тастадым. Алдымен мен ойлаймын: «Бірнеше сымдарды дәнекерлеуге болады, маңызды емес» … содан кейін, менің жобам дәнекерлеуге дайын болған кезде, мен ойлаймын » Мен прото тақтаны жасау үшін жіберуім керек еді, немесе өз тақтамды ойып алуым керек еді. «Мен ПХД оюға әлі қатысқан жоқпын және тақтаны жасау үшін $$ төлегім келмеді, сондықтан ….. Иә ….. Мен бұл затты дәнекерлеуге шамамен 3 сағат жұмсадым. Бұл шамамен 150 сым, бұл 300 дәнекерлеу нүктелері, сонымен қатар дәнекерлеу көпірлеріне арналған ілмектер. Қалай болғанда да, тақтаның артқы жағы суретте бейнеленген ….. Дисплейде логикалық үлгіде #дұрыс көрсетілмегенін көрсету үшін мен 20 минут ойландым. Осыдан кейін мен қысқартуды таптым, және бам! Ол мінсіз жұмыс істеді.

5 -қадам: Қорытынды

Қорытынды
Қорытынды

ЖОБА ЖҰМЫС БОЛДЫ! Бұл жобаға шамамен 2 апта уақыт кетті; тапсырыс берушіге жақсы ұпайларды жіберуге ~ 2 апта, кодты толтыруға және жөндеуге ~ 3 сағат, ~ 4 сағатқа нан пісіру мен күйін келтіруге, ~ 3 сағатқа дәнекерлеуге. Charlieplex 6 7 сегментті светодиодтар. Қуат 30 мА шамасында, бұл мен айтатын болсам жаман емес. Мен 7 сегментті жарықдиодты көбірек қолдануға болады деп ойлаймын, бірақ конвертті итермедім. 7 сегментті жарықдиодты қолдана отырып, кез келген дерлік қосымшаға қолданылады; термометр, сағат, мәтіндік дисплей және т. және тақтаны өз қалауы бойынша орналастырыңыз. Егер/Бұл орындалса, маған сурет жүктеледі. Бірақ схемаға келетін болсақ, бұл тапсырыс бойынша салынған сияқты!

Ұсынылған: