Სარჩევი:

BloodBowl Turn Counter 7 სეგმენტიანი LED- ების გამოყენებით: 5 ნაბიჯი
BloodBowl Turn Counter 7 სეგმენტიანი LED- ების გამოყენებით: 5 ნაბიჯი

ვიდეო: BloodBowl Turn Counter 7 სეგმენტიანი LED- ების გამოყენებით: 5 ნაბიჯი

ვიდეო: BloodBowl Turn Counter 7 სეგმენტიანი LED- ების გამოყენებით: 5 ნაბიჯი
ვიდეო: 7+ passing? Easy! Blood Bowl 2 Highlight (the Sage) 2024, ნოემბერი
Anonim
BloodBowl Turn Counter 7 სეგმენტიანი LED- ების გამოყენებით
BloodBowl Turn Counter 7 სეგმენტიანი LED- ების გამოყენებით

ეს პროექტი იყო BloodBowl თამაშის შემობრუნების მრიცხველისთვის, ექვსი Charlieplexed 7 სეგმენტიანი LED- ის გამოყენებით.

ნაბიჯი 1: კონცეფცია

Შინაარსი
Შინაარსი

ჩემმა მეგობარმა მკითხა იდეები Bloodbowl Turn counter– ისთვის მისი დაფის თამაშისთვის. არ ვიცოდი რა იყო ეს და რა უნდოდა, გარკვეული დრო დასჭირდა იმის გადასაწყვეტად, ვაპირებდი თუ არა ამას. მე ჯერ უნდა მქონოდა წარმოდგენა იმაზე, თუ რა უნდოდა მას, ამიტომ დავიწყე კონცეფციის ხელოვნებით (სურათი). ძირითადი იდეა არის 3 ღილაკი, თითოეული 3 LED- ის კონტროლი და ის განთავსდება პერსონალურად აშენებულ კოშკში. ერთადერთი დიდი მოთხოვნა იყო, რომ ზედა 4 ეკრანი 0 -დან 8 -მდე ითვლიან და გადააყენონ და ქვედა 2 ჰქონდეთ ეკრანები ითვლიან 8 -დან 0 -მდე და ციკლის უკან. მე დავასრულებ წრეს და ის დაასრულებს კოშკს.

ნაბიჯი 2: დიზაინი და ნაწილების სია

დიზაინი და ნაწილების სია
დიზაინი და ნაწილების სია

მას შემდეგ, რაც კონცეფცია ითვალისწინებდა 6 7-სეგმენტის LED- ს და მე მქონდა რამოდენიმე ბიტიანი მიკროჩიპის PIC, მე გამოვიკვლიე PIC- ების გამოყენების გზები LED- ების გასაკონტროლებლად. მე ვიპოვე ეს ბმული https://www.mikroe.com/en/books /picbook/7_08chapter.htm, რომელიც აცხადებს, რომ "ექვსამდე ეკრანზე წვდომა შესაძლებელია ასე, თითოეული ჩვენების სიკაშკაშეზე ზემოქმედების გარეშე." მე მივიჩნიე ეს გამოწვევა და რაღაც გამოსაძიებელი, როგორც ჩემი პროექტის ნაწილი. პირველი რაც გავაკეთე, იყო ჩემი ყუთიდან რამდენიმე ინკანდესენტური ეკრანის ამოღება და ვნახე როგორ იმუშავებდნენ. Ცუდი ამბავი. კონკრეტული ნაწილები, რომლებიც მე შევარჩიე, არ იქცეოდნენ ისე, როგორც მე მინდოდა. სეგმენტი განათდება საჭიროების შემთხვევაში, დაფაზე, მაგრამ გაჟონვის დენი გადანაწილებულია დანარჩენ 6 სეგმენტზე. მივხვდი, რომ ინკანდესენტური დისპლეები შეიძლება არ იყოს გასავლელი გზა, ან მჭირდებოდა მათი სხვაგვარად გამოყენება. ასე რომ, სიმარტივისთვის მე შევამოწმე 7-სეგმენტიანი LED- ები, რომლებიც მე მქონდა ხელთ, რომ ემუშავათ ბორბორდინგისთვის და შევუკვეთე რამდენიმე საერთო ანოდიანი დისპლეი. მეორე რაც მჭირდებოდა, იყო ჩემი დიზაინის განლაგება და კოდზე მუშაობის დაწყება. სურათზე არის ჩემი წრე. არც ისე მნიშვნელოვანია, რადგან PIC– ის კოდი ზრუნავს მულტიპლექსზე… errr Charlieplexing. შენიშვნა: ყველა 6 ეკრანს აქვს იგივე ხაზები მძღოლის IC- დან. ამომრჩევი IC საშუალებას აძლევს თითოეულ ჩვენებას, ერთდროულად, ხოლო 7 სეგმენტიანი ხაზები შესაბამისად განახლდება PIC– ის მიერ. ძალიან მარტივი იდეა. ამის შემდეგ კოდისა და ტექნიკის დასრულება არის მხოლოდ ის, რაც საჭირო იყო. ნაწილების სია Digi-Key– ის 3 მცირე შეკვეთის შემდეგ, კონკრეტული კომპონენტების გადაწყვეტისას, მე მქონდა ყველაფერი რაც მჭირდებოდა (ხელთ რაღაცებით); 1 ~ 3 "x4 "PCB6 მცირე ზომის ღილაკზე გადამრთველები (NO) 1 74LS47, 7 სეგმენტიანი დისპლეი IC1 PIC16F627 1 CD4028, 1 10 ამომრჩევიდან IC 6 10KOhm რეზისტორები 1 470 Ohm რეზისტორი 1 მავთულის კოჭა. მე გამოვიყენე სხვადასხვა ფერები და მითითებები, მაგრამ ეს მხოლოდ მე ვიყავი. 1 78L05 5V მარეგულირებელი 1 9V ბატარეის დამჭერი 1 9V ბატარეა 1 მცირე გადამრთველი (ჩართვის/გამორთვისთვის) მე ამას ზომიერად რთულ პროექტად ვთვლი იმის გამო; 1) საჭიროა მიკროპროცესორული კოდი 2) შედუღება და breadboarding 3) დიზაინის ოპტიმიზაცია. არცერთი ეს საკითხი თავისთავად არ არის ზედმეტად რთული, მაგრამ ყველაფრის აღება ყოველგვარი გამოცდილების გარეშე შეიძლება დამწყებთათვის ბევრი იყოს. აპარატურის პროგრამისტი ვალდებულია დაწვას მოწყობილობა, შედუღების სადგური და ა. შ. … პირველი, ვინც შეიძლება შენიშნოს, არის ის, რომ 7-სეგმენტიანი LED- ები არ აქვთ სერიული (მიმდინარე შეზღუდვის) რეზისტორები! ნება მომეცით მივმართო ამას სწრაფად, ჩემი ორიგინალური დიზაინის მითითებით … მაგრამ წაიკითხეთ შემდეგი ნაბიჯი ახსნისთვის!

ნაბიჯი 3: პურის დაფა და მიკრო კოდი

პურის დაფა და მიკრო კოდი
პურის დაფა და მიკრო კოდი

პურის დაფა ამისათვის აუცილებელი იყო. ნაჩვენებია ჩემი ზოგადი პურის დაფა, მაგრამ ამ პროექტის ზომისთვის მე რეალურად გამოვიყენე ეს ერთი და უფრო პატარა პურის დაფა, რადგან ბევრი მავთული იყო საჭირო ერთმანეთისგან გაშლა. პირველი, მე გამოვცადე ერთი 7 სეგმენტიანი LED საწყისი კოდის გამოყენებით. ამან დაადასტურა 3 რამ; 1) IC– ის გაყვანილობა დადასტურდა კარგი! 2) მიბიძგა ჩემი კოდის ოპტიმიზაციას და დასრულებას. ვიმუშაო ჩემს კოდზე, როგორც LED მიაცილებს ციფრებს ერთი ღილაკის გადამრთველის გამოყენებით, ასე რომ გადამოწმდება ჩემი კოდი და განლაგება. ბევრი არ იყო საჭირო, მაგრამ პურის დაფაზე დადასტურდა, რომ კარგ ფორმაში ვიყავი. ბორბორდინგის ტესტების შემდეგ, მე გადავაბრუნე რუტინა, ამიტომ დროის უმრავლესობა მუდმივად აჩვენებდა ციფრებს და ISR ღილაკების შესამოწმებლად. მიზეზი, რის გამოც ეს გავაკეთე, იყო მხოლოდ მუდმივი ჩვენება, რადგან PIC მუშაობს 4 მჰც შიდა საათით, მე ვკარგავ ძალიან ცოტა დროს ღილაკების სკანირებისთვის. დიდი საქმე არ არის… მხოლოდ დამოკიდებულია იმაზე, თუ როგორ გსურთ კოდის გაკეთება და რა არის ყველაზე მნიშვნელოვანი თითოეული პროგრამისთვის. ამისათვის ჩვენება მნიშვნელოვანია, ამიტომ მე ამას ვდებ ძირითად რუტინაში. როდესაც ჩემი პირველი ნაწილები მოვიდა (ექვსივე ეკრანი!), მე დავასრულე პურის დაფის გაყვანილობა და აღმოვაჩინე სხვა საკითხი. ღილაკზე დაჭერისას ჩემს კოდს ჰქონდა დაუდევარი რეგისტრები, რომლებიც არ იწმინდება და ISR იწვევს მცირე ეკრანის ხარვეზებს.; ======================= ================================================== =====; ჩართე მრიცხველი;; -----------; Dsply3 Dsply2; Dsply4 Dsply1; Led1 Led3; A5 | 4 15 | A6 - Led2; Vss | 5 14 | Vdd; ღილაკი 1 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;; ================================== =============================================; გადასინჯვის ისტორია და შენიშვნები:; V1.0 საწყისი სათაური, კოდი 3/30/09;;; (C) 5/2009; ეს კოდი შეიძლება გამოყენებულ იქნას პირადი სწავლის/პროგრამის/მოდიფიკაციისთვის.; ამ კოდის ნებისმიერი გამოყენება კომერციულ პროდუქტებში არღვევს ამ უფასო გამოშვებას.; კითხვების/კომენტარებისათვის დაუკავშირდით წრიულ წერტილს mah yahoo dot com- ზე.; ---------------------------------------------------- ----------------------------------#მოიცავს P16F627A. INC; ============== ================================================== =================; განსაზღვრავს; ---------------------------------------------------- -----------------------------------; ================= ================================================== ============; მონაცემები; ---------------------------------------------------- -----------------------------------; დროის შენახვა ცვლადი 1 უდრის 20 რიცხვი 2 უდრის 21 დის 1 უდრის 22 დისი 2 უდრის 23 დის 3 უდრის 24 დის 4 უდრის 25 დის 5 უდრის 26 დის 6 უდრის 27w_temp უდრის 28 სტატუსი ================================================== ========; ვექტორების გადატვირთვა;; შეამოწმეთ კონფიგურაცია. ნაკბენები დაწვის წინ !!!; INTOSC; MCLR: ჩართულია; PWRUP: ჩართულია; ყველა სხვა: შეზღუდული შესაძლებლობების მქონე;;; ------------------------------------------ ------------------------------------- RESET_ADDR EQU 0x00 ISR_ADDR EQU 0x04 org RESET_ADDR დაიწყო დაწყება; == ================================================== ============================; ISR;; -------------------------------------------------- -------------------------------- org 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 წმ ზარის დენონუსს ჩათვლით dis1; განაახლეთ მრიცხველი movf dis1, W; შეამოწმეთ გადინება xorlw 0x1A; 10 7-ზე? btfss STATUS, Z დაბრუნება; არა, დაუბრუნდით სკანირებას. მოძრავი h'10 '; დიახ, ეკრანის გადატვირთვა. movwf dis1 ანაზღაურებს w2debounce ზარის დენონუსი; დაელოდეთ 0,2 წმ ზარის დენონუსს incf dis2; განაახლეთ მრიცხველი movf dis2, W; შეამოწმეთ გადინება xorlw 0x4A; 10 7-ზე? btfss STATUS, Z დაბრუნება; არა, დაუბრუნდით სკანირებას. მოძრავი h'40 '; დიახ, ეკრანის გადატვირთვა. movwf dis2 ბრუნდება w3debounce ზარის დენონუსი; დაელოდეთ 0.2 წმ ზარის დენონუსს ჩათვლით dis3; განაახლეთ მრიცხველი movf dis3, W; შეამოწმეთ გადინება xorlw 0x5A; 10 7-ზე? btfss STATUS, Z დაბრუნება; არა, დაუბრუნდით სკანირებას. მოძრავი h'50 '; დიახ, ეკრანის გადატვირთვა. movwf dis3 ბრუნდება w4debounce ზარის დენონუსი; დაელოდეთ 0,2 წმ ზარის დენონუსს incf dis4; განაახლეთ მრიცხველი movf dis4, W; შეამოწმეთ გადინება xorlw 0x8A; 10 7-ზე? btfss STATUS, Z დაბრუნება; არა, დაუბრუნდით სკანირებას. მოძრავი h'80 '; დიახ, ეკრანის გადატვირთვა. movwf dis4 ანაზღაურებს w5debounce ზარის დენონუსი; დაელოდეთ 0,2 წმ ზარის დენონუსს incf dis5; განაახლეთ მრიცხველი movf dis5, W; შეამოწმეთ გადინება xorlw 0x9A; 10 7-ზე? btfss STATUS, Z დაბრუნება; არა, დაუბრუნდით სკანირებას. მოძრავი h'90 '; დიახ, ეკრანის გადატვირთვა. movwf dis5 ანაზღაურებს w6debounce ზარის დენონუსი; დაელოდეთ 0.2 წმ ზარის დენონუსს incf dis6; განაახლეთ მრიცხველი movf dis6, W; შეამოწმეთ თუ არა overflow xorlw 0xCA; 10 7-ზე? 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 Outputs, RA5 no output movwf TRISA bcf STATUS, RP0 clrf PORTB bsf' STL 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; გაასუფთავეთ 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 ზარი დენონსირება; 0.2 წმ; ტესტი LED, ჩვენება 8 ???; ===================================== ==========================================; მთავარი; იღებს შეყვანის ჩამრთველებს, დებონასებს და ინკრიმენტებს.; ეს აახლებს ჩვენებებს, @4Mhz TMR0 prescal 1: 4, 1Khz სიჩქარით.; ჩვენება 0 გამოიყენება გამოუყენებელ ეკრანზე გამოსაყენებლად. ჩვენება 1-6 არის სადენიანი.; პირველი, BCD-7Seg IC დატვირთულია ჩვენების მნიშვნელობით, და BCD-Dec IC გააქტიურებულია; ჩვენების შერჩევა.; მეორე, ms– ის გადადება ხდება ჩვენებისთვის.; მესამე, BCD-Dec IC გამორთულია … ჩვენება 0 ირჩევა ეკრანის გამორთვისთვის;; ეს მეორდება თითოეული 6 ეკრანისთვის და მარყუჟდება.; ISR ამუშავებს გადამრთველს 15Hz სიხშირით. ------------------------------------------------------ --------------- ძირითადი; Disp1 movf dis1, 0 movwf PORTA ზარი ledon goto main; ===================== ================================================== =========; ლედონი; LED ენერგიის ჩართვის დრო. 6 ჩვენება-> 1/6 სამუშაო ციკლი 1 კჰცზე = 166 ციკლი; -------------------------------------- --------------------------------------------- ledon movlw.54 movwf count1ledloop decfsz count1, F goto ledloopreturn; =========================================== =======================================; განმუხტვის სიგნალი; 4 ციკლი ჩატვირთვა და გამოძახება, 2 ციკლი დასაბრუნებლად.; 4 Mhz Tc:: რაოდენობა 2 = 255-> 0.2 წამი; ------------------------------------------ --------------------------------------------- დენონსირება movlw.255; შეფერხება 1/5 წამიანი დებიუნით. movwf count2 დარეკეთ pon_ დაელოდეთ დაბრუნებას; ------------------------------------------------ ---------------------------------------; რაოდენობა 1 = 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– ს თავდაპირველად ჰქონდა 470 Ohm წინააღმდეგობა თითოეული ჩვენების დრაივერის ხაზიდან 74LS47 და CD4028 ჩართვის ხაზიდან. თუმცა, მე გამოვცადე ჩემი მიკროსქემის მიმდინარე გათამაშება და აღმოვაჩინე, რომ ის მხოლოდ 31 მილიონ ფუნტ სტერლინგს იზიდავდა. და ვინაიდან დისპლეის ნამდვილი დრაივერი პირდაპირ 74LS47- დან არის და ჩართულია სხვა IC- დან, საშუალო და პიკის მოთხოვნების სწრაფი დაცემა და შესაბამისი მონაცემთა ფურცლები ….. მე გამოვიღე რეზისტორები პურიდან და ვიპოვე 1mA სხვაობა ! როგორც ჩანს, უშუალოდ CA ხაზის მართვა 4028 -დან, ხოლო ყველა სეგმენტის უშუალო მართვისას, კარგია! … ერთგვარი.:) მე მქონდა შეცდომა ჩემს კოდში, რომელიც არ აშორებდა ჩემს რეგისტრატორებს ღილაკზე დაჭერისას, რამაც გამოიწვია ბოლო ეკრანის 2 სეგმენტის ძალიან განათება ღილაკზე დაჭერისას. ეს ცუდი იყო. თუმცა, რეგისტრაციის გასუფთავებამ გამოასწორა ეს პრობლემა და ენერგიის უწყვეტი შემოწმება ადასტურებს, რომ ის მუდმივად 30mA გათამაშებაზეა. ეს უნდა მომცეს (მსგავსი სქემების წინა გამოცდილების საფუძველზე) ~ 20 სთ მუშაობის ხანგრძლივობა 1 9V ბატარეის გამოყენებით (500mAH/30mAH 5V რეგულირებით)… თუ რამე მოხდა, გრძელვადიან პერსპექტივაში.

ნაბიჯი 4: PCB შედუღება

PCB შედუღება
PCB შედუღება

ყოველთვის, როდესაც ჩემს პროექტში ამ წერტილს მივაღწევ, ვაჩერებ. თავიდან ვაპირებდი ამ საქმის გადაბმას, მაგრამ სწრაფად ჩავაგდე ეს იდეა. თავიდან ვფიქრობ, რომ "რამდენიმე მავთული უნდა შედუღდეს, დიდი საქმე არ არის" … შემდეგ, სანამ ჩემი პროექტი მზად იქნება გასაყიდად, ვფიქრობ ", მე ან უნდა გამეგზავნა პროტო დაფის გასაკეთებლად, ან ჩემივე დაფა ამოეკვეთა ". მე არ ვარ PCB- ის გრავირებაში (ჯერჯერობით) და არ მსურს $ $ გადავიხადო დაფის გასაკეთებლად, ასე რომ … დიახ …..დავიხარჯე დაახლოებით 3 საათი ამ ნივთის შედუღებაზე. ეს დაახლოებით 150 მავთული, ასე რომ 300 solder რაოდენობა, პლუს touch-ups solder ხიდები. ყოველ შემთხვევაში, აქ არის დაფის უკანა მხარე სურათზე….ჰო… არეულობის არარსებობა, მაგრამ როდესაც ეს ყველაფერი გაკეთდა, მე მქონდა მხოლოდ 1 მოკლე გამაგრება რა 20 წუთი დაფიქრდა, რადგან ჩვენებამ აჩვენა, რომ არასწორი #არის ნაჩვენები ლოგიკური ნიმუშით, რომლის გაშიფვრაც მომიწია. ამის შემდეგ, მე მდებარეობს მოკლე და bam! მშვენივრად მუშაობდა.

ნაბიჯი 5: დასკვნა

დასკვნა
დასკვნა

ის მუშაობდა! ამ პროექტს დაახლოებით; weeks 2 კვირა დასჭირდა მოსაფიქრებლად და ელ.წერილისათვის ჯარიმის ქულების გამოგზავნა, ~ 3 სთ კოდის დასრულება და გამართვა, ~ 4 სთ პურის დაფა და გამართვა, ~ 3 სთ შედუღება მხოლოდ 3 IC- ის გამოყენებით შესაძლებელია Charlieplex 6 7-სეგმენტიანი LED. ენერგიის გათამაშება არის დაახლოებით 30mA ამ დიზაინით, რაც არ არის ცუდი, თუ ამას მე თვითონ ვამბობ. მეეჭვება, რომ 7-სეგმენტიანი LED- ების გამოყენება შეიძლება, მაგრამ კონვერტს არ გამოუწვევია. ეს იდეა შეიძლება გამოიყენება თითქმის ნებისმიერ პროგრამაზე 7 სეგმენტიანი LED- ების გამოყენებით; თერმომეტრი, საათი, ტექსტის ჩვენება და ა.შ. ზოგიერთი სახიფათო კოდით შეიძლება გქონდეთ მოძრავი ჩვენება, ან სურათები … შესაძლოა საფუძველიც კი იყოს POV (ხედვის გამძლეობა) პროექტისთვის. საბოლოო განხორციელება დარჩა ჩემს მეგობარს, რომ ააშენოს თავისი კოშკი და მოათავსეთ დაფა, როგორც მას მიესადაგება. თუ/როდესაც ეს გაკეთდება, მე მივიღებ სურათს ატვირთულ. რაც შეეხება სქემას, ეს, როგორც ჩანს, შეკვეთით არის აგებული!

გირჩევთ: