Πίνακας περιεχομένων:

BloodBowl Turn Counter Χρησιμοποιώντας LED 7 τμημάτων: 5 βήματα
BloodBowl Turn Counter Χρησιμοποιώντας LED 7 τμημάτων: 5 βήματα

Βίντεο: BloodBowl Turn Counter Χρησιμοποιώντας LED 7 τμημάτων: 5 βήματα

Βίντεο: BloodBowl Turn Counter Χρησιμοποιώντας LED 7 τμημάτων: 5 βήματα
Βίντεο: Better one turn touchdowns defences in Blood Bowl? 2024, Ιούλιος
Anonim
BloodBowl Turn Counter Χρησιμοποιώντας LED 7 τμημάτων
BloodBowl Turn Counter Χρησιμοποιώντας LED 7 τμημάτων

Αυτό το έργο προοριζόταν για έναν μετρητή στροφών BloodBowl χρησιμοποιώντας έξι LED με 7 τμήματα Charlieplexed.

Βήμα 1: Έννοια

Εννοια
Εννοια

Ένας φίλος μου με ρώτησε για ιδέες για την κατασκευή του Counter Bloodbowl Turn για το boardgame του. Μη γνωρίζοντας τι ήταν αυτό και τι ήθελε, χρειάστηκε λίγος χρόνος για να αποφασίσω αν και πώς θα το κάνω αυτό. Έπρεπε πρώτα να έχω μια ιδέα για το τι ήθελε, έτσι ξεκίνησα με την έννοια της τέχνης (εικόνα). Η βασική ιδέα είναι να έχετε 3 κουμπιά, ελέγχοντας 3 LED το καθένα και θα τοποθετούνταν μέσα σε έναν προσαρμοσμένο χτισμένο πύργο. Το μόνο μεγάλο αίτημα ήταν να μετρήσουν οι κορυφαίες 4 οθόνες από το 0 έως το 8 και να επαναρυθμιστούν και να έχουν τις χαμηλότερες 2 οι οθόνες μετρούν αντίστροφα από 8 έως 0 και κάνουν κύκλο πίσω. Θα ολοκλήρωνα το κύκλωμα και αυτός θα ολοκλήρωνε τον πύργο.

Βήμα 2: Σχεδιασμός & Λίστα μερών

Σχεδιασμός & Λίστα μερών
Σχεδιασμός & Λίστα μερών

Δεδομένου ότι η ιδέα απαιτούσε 6 LED 7 τμημάτων και είχα μερικά PIC μικροτσίπ 8 bit, βρήκα τρόπους χρήσης των PIC για τον έλεγχο των LED. Βρήκα αυτόν τον σύνδεσμο https://www.mikroe.com/en/books /picbook/7_08chapter.htm που δηλώνει "Μπορείτε να έχετε πρόσβαση σε έως 6 οθόνες έτσι, χωρίς να επηρεάζεται η φωτεινότητα κάθε οθόνης." Θεώρησα ότι αυτό ήταν μια πρόκληση και κάτι προς διερεύνηση ως μέρος του έργου μου. Το πρώτο πράγμα που έκανα ήταν να πιάσω μερικές πυρακτωμένες οθόνες 7 τμημάτων από το κουτί μου και να δω πώς θα λειτουργούσαν. Ασχημα ΝΕΑ. Τα συγκεκριμένα μέρη που επέλεξα δεν συμπεριφέρονταν όπως ήθελα. Το τμήμα ανάβει όταν χρειάζεται, στο breadboard, αλλά το ρεύμα διαρροής διανέμεται στα άλλα 6 τμήματα. Συνειδητοποίησα ότι οι οθόνες πυρακτώσεως μπορεί να μην είναι ο δρόμος ή έπρεπε να τις χρησιμοποιήσω με διαφορετικό τρόπο. Έτσι, για απλότητα, επιβεβαίωσα ότι τα LED 7 τμημάτων που είχα στο χέρι θα λειτουργούσαν για το breadboard και παρήγγειλα μερικές κοινές οθόνες ανόδου. Το δεύτερο πράγμα που έπρεπε να κάνω ήταν να σχεδιάσω το σχέδιό μου και να ξεκινήσω να δουλεύω στον κώδικα. Στην εικόνα είναι το κύκλωμά μου. Όχι πολύ, καθώς ο κώδικας στο PIC φροντίζει για την πολυπλεξία… λάθος Charlieplexing. Σημείωση: ΚΑΙ οι 6 οθόνες έχουν τις ίδιες γραμμές από το IC του προγράμματος οδήγησης. Το IC επιλογέα ενεργοποιεί κάθε οθόνη, 1 κάθε φορά, και οι γραμμές των 7 τμημάτων ενημερώνονται ανάλογα από το PIC. Πολύ απλή ιδέα. Μετά από αυτό, το μόνο που χρειαζόταν ήταν η ολοκλήρωση κώδικα και υλικού. Λίστα μερών Μετά από 3 μικρές παραγγελίες από το Digi-Key, ενώ αποφάσιζα για συγκεκριμένα εξαρτήματα, είχα όλα όσα χρειαζόμουν (με κάποια πράγματα στο χέρι). 1 ~ 3 "x4 "Διακόπτες μικρού κουμπιού PCB6 (NO) 1 74LS47, οθόνη 7 τμημάτων IC1 PIC16F627 1 CD4028, 1 από 10 επιλογείς IC 6 10KOhm αντιστάσεις1 470Ohm αντίσταση 1 καρούλι σύρματος. Χρησιμοποίησα διάφορα χρώματα και ενδείξεις, αλλά αυτό ήμουν μόνο εγώ. 1 78L05 5V ρυθμιστής 1 κλιπ μπαταρίας 9V 1 μπαταρία 9V 1 μικρός διακόπτης (για ενεργοποίηση/απενεργοποίηση) Θεωρώ ότι αυτό είναι ένα συγκρατημένα πολύπλοκο έργο, λόγω. 1) Απαιτείται κωδικός μικροεπεξεργαστή2) Συγκόλληση και breadboarding 3) Βελτιστοποίηση σχεδίασης. Κανένα από αυτά τα θέματα από μόνο του δεν είναι υπερβολικά περίπλοκο, αλλά η ανάληψη όλων αυτών χωρίς καμία εμπειρία μπορεί να αποβεί πολύ για τον αρχάριο. Απαιτείται προγραμματιστής υλικού για να κάψει τη συσκευή, τον σταθμό συγκόλλησης κλπ … Το ΠΡΩΤΟ που μπορεί να παρατηρήσει κάποιος είναι ότι τα LED των 7 τμημάτων ΔΕΝ διαθέτουν αντιστάσεις σειράς (περιοριστικά ρεύματος)! Επιτρέψτε μου να το αναφέρω γρήγορα, δηλώνοντας ότι το αρχικό μου σχέδιο το είχε… αλλά διαβάστε το επόμενο βήμα για εξήγηση!

Βήμα 3: Breadboarding & Micro Code

Breadboarding & Micro Code
Breadboarding & Micro Code

Το Breadboard ήταν απαραίτητο για αυτό. Εμφανίζεται το γενικό μου breadboard, αλλά για το μέγεθος αυτού του έργου χρησιμοποίησα πραγματικά αυτό και ένα μικρότερο breadboard, καθώς υπήρχαν πολλά καλώδια που έπρεπε να χωριστούν. Πρώτον, δοκίμασα ένα ενιαίο LED 7 τμημάτων χρησιμοποιώντας τον αρχικό κωδικό. Αυτό επιβεβαίωσε 3 πράγματα. 1) Η καλωδίωση των IC's επαληθεύτηκε καλά! 2) Με οδήγησε να βελτιστοποιήσω και να ολοκληρώσω τον κωδικό μου. 3) Με έκανε να συνειδητοποιήσω ότι δεν χρειάζομαι τις τρέχουσες περιοριστικές αντιστάσεις! 1 WIRING Όπως αναφέρθηκε, ο σχηματικός σχεδιασμός μου βρέθηκε για να δουλέψω με τον κωδικό μου, καθώς η λυχνία LED θα περνούσε τους αριθμούς χρησιμοποιώντας έναν διακόπτη κουμπιού, έτσι ώστε να επαληθευτεί ο κώδικας και η διάταξή μου. Δεν απαιτούνταν πολλά, αλλά το breadboard επιβεβαίωσε ότι ήμουν σε καλή κατάσταση. 2 Το CODEI είχε αρχικά τον κωδικό μου με μια κύρια ρουτίνα σάρωσης για κουμπιά και το ISR (Διακοπή ρουτίνας υπηρεσίας) εμφανίζει τους αριθμούς,. Μετά από δοκιμές ψωμιού, ανέτρεψα τις ρουτίνες, οπότε η πλειοψηφία του χρόνου εμφανίζει συνεχώς αριθμούς και το ISR για έλεγχο κουμπιών. Ο λόγος που το έκανα αυτό, ήταν απλώς να έχω μια σταθερή οθόνη, αφού το PIC λειτουργεί με εσωτερικό ρολόι 4Mhz, χάνω πολύ λίγο χρόνο σάρωσης για κουμπιά. Δεν υπάρχει μεγάλη υπόθεση… εξαρτάται μόνο από το πώς θέλετε να κάνετε τον κώδικα και τι είναι πιο λογικό για κάθε εφαρμογή. Για αυτό, η οθόνη είναι σημαντική, οπότε το έβαλα στην κύρια ρουτίνα. Όταν έφτασαν τα πρώτα μου μέρη (και οι 6 οθόνες!), Ολοκλήρωσα την καλωδίωση του breadboard και βρήκα ένα άλλο πρόβλημα. Όταν πατούσα το κουμπί, ο κωδικός μου είχε κάποιες ατημέλητες εγγραφές που δεν είχαν διαγραφεί και το ISR προκαλούσε κάποιες μικρές δυσλειτουργίες στην οθόνη. ================================================= =====; Turn Counter;; -----------; Dsply3 Dsply2; Dsply4 Dsply1; Led1 Led3; A5 | 4 15 | A6 - Led2; Vss | 5 14 | Vdd; Κουμπί1 B0 | 6 13 | Β7; Β1 | 7 12 | Β6; Β2 | 8 11 | Β5; Β3 | 9 10 | Β4; -----------;; LED1-3-BCD-dec IC -LEDSeg's1-6; Dsply1-3-BCD-7seg IC -Dsply#1-9;; ================================== ============================================ Ιστορικό αναθεώρησης και σημειώσεις:; V1.0 Αρχική κεφαλίδα, Κωδικός 3/30/09;;; (C) 5/2009; Αυτός ο κωδικός μπορεί να χρησιμοποιηθεί για προσωπική εκμάθηση/εφαρμογή/τροποποίηση.; Οποιαδήποτε χρήση αυτού του κωδικού σε εμπορικά προϊόντα παραβιάζει αυτήν την έκδοση δωρεάν λογισμικού..; -------------------------------------------------------- ----------------------------------#περιλαμβάνει το P16F627A. INC; ============== ================================================== ================= Ορίζει; ---------------------------------------------------- -------------------------------; ================= ================================================== ===========? Δεδομένα;------------------------------------------------ -----------------------------------; Μεταβλητές διατήρησης χρόνουcount1 ισοδύναμη 20 count2 ισοδύναμη 21 dis1 ισοδύναμη 22dis2 ισοδύναμη 23dis3 ισοδύναμη 24dis4 ισοδύναμη 25dis5 ισοδύναμη 26dis6 ισοδύναμη 27w_temp ισοδύναμη 28status_temp ισοδύναμη 29ISRCNTR ισοδύναμη 2A; ======================= ================================================== =======? Επαναφορά διανυσμάτων;; ΕΛΕΓΧΕ ΔΙΑΜΟΡΦΩΣΗ. ΜΠΙΖΑ ΠΡΙΝ ΚΑΙΕΙ !!! 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 κλήση debounce? Περιμένετε 0,2 δευτερόλεπτα κατάργηση κλήσης incf dis1; Ενημέρωση μετρητή movf dis1, W; Ελέγξτε για υπερχείλιση xorlw 0x1A. 10 στο 7αρι; btfss STATUS, Z επιστροφή? Όχι, επιστροφή στη σάρωση. movlw h'10 '? Ναι, επαναφορά της οθόνης. movwf dis1 επιστρέφειww2debounce κλήση κατάργηση? Περιμένετε 0,2 δευτερόλεπτα κατάργηση κλήσης incf dis2; Ενημέρωση μετρητή movf dis2, W; Ελέγξτε για υπερχείλιση xorlw 0x4A. 10 στο 7αρι; btfss STATUS, Z επιστροφή? Όχι, επιστροφή στη σάρωση. movlw h'40 '? Ναι, επαναφορά της οθόνης. movwf dis2 επιστρέφει w3debounce κλήση κατάργηση? Περιμένετε 0,2 δευτερόλεπτα κατάργηση κλήσης incf dis3; Ενημέρωση μετρητή movf dis3, W; Ελέγξτε για υπερχείλιση xorlw 0x5A. 10 στο 7αρι; btfss STATUS, Z επιστροφή? Όχι, επιστροφή στη σάρωση. movlw h'50 '? Ναι, επαναφορά της οθόνης. movwf dis3 επιστρέφειww4debounce κλήση κατάργηση? Περιμένετε 0,2 δευτερόλεπτα κατάργηση κλήσης incf dis4; Ενημέρωση μετρητή movf dis4, W; Ελέγξτε για υπερχείλιση xorlw 0x8A. 10 στο 7αρι; btfss STATUS, Z επιστροφή? Όχι, επιστροφή στη σάρωση. movlw h'80 '? Ναι, επαναφορά της οθόνης. movwf dis4 επιστρέφειw5debounce κλήση κατάργηση? Περιμένετε 0,2 δευτερόλεπτα κατάργηση κλήσης incf dis5; Ενημέρωση μετρητή movf dis5, W; Ελέγξτε για υπερχείλιση xorlw 0x9A. 10 στο 7αρι; btfss STATUS, Z επιστροφή? Όχι, επιστροφή στη σάρωση. movlw h'90 '? Ναι, επαναφορά της οθόνης. movwf dis5 επιστρέφειw6debounce κλήση κατάργηση? Περιμένετε 0,2 δευτερόλεπτα κατάργηση κλήσης incf dis6; Ενημέρωση μετρητή movf dis6, W; Ελέγξτε για υπερχείλιση 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; ============================= ================================================= =; Ξεκινήστε εδώ!;---------------------------------------------- ------------------------------------ έναρξη. Διαμόρφωση θυρών εισόδου/εξόδου 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 STTUS h, RP0 RB Εισόδους movwf TRISB; Ρύθμιση εσωτερικού χρονοδιακόπτη bsf PCON, 3; Ορίστηκε στα 4Mhz. 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 outs 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; ========================================== Κύριος; Λαμβάνει εισόδους από διακόπτες, αποκλείσεις και οθόνες incriments.;; Αυτό ενημερώνει τις οθόνες, @4Mhz με TMR0 prescal 1: 4, με ρυθμό 1Khz. Η οθόνη 1-6 είναι ενσύρματη. Πρώτον, το IC BCD-7Seg φορτώνεται με τιμή οθόνης και το IC BCD-Dec είναι ενεργοποιημένο για την επιλογή οθόνης. Δεύτερον, διατηρείται μια καθυστέρηση ms για την οθόνη. Το IC είναι απενεργοποιημένο… η οθόνη 0 είναι επιλεγμένη για απενεργοποίηση της οθόνης.; Αυτό επαναλαμβάνεται για κάθε μία από τις 6 οθόνες και γίνεται βρόχος. ------------------------------------------------------ --------------- main; Disp1 movf dis1, 0 movwf PORTA call ledon goto main; ===================== ================================================= ========? Ledon; Χρόνος ρύθμισης για ενεργοποίηση LED. 6 οθόνες-> 1/6 κύκλος λειτουργίας σε 1Khz = 166 κύκλοι. -------------------------------------- ------------------------------------------------ ledon movlw.54 movwf count1ledloop decfsz count1, F goto ledloopreturn? =========================================== ===================================== Σήμα κατάργησης? 4 κύκλοι για φόρτωση και κλήση, 2 κύκλοι για επιστροφή.? 4Mhz Tc:: count2 = 255-> 0,2 sec; ------------------------------------------ --------------------------------------------- debounce 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 είχε αρχικά αντιστάσεις 470Ohm από κάθε γραμμή προγράμματος οδήγησης οθόνης από τη γραμμή ενεργοποίησης 74LS47 και CD4028. Ωστόσο, δοκίμασα την τρέχουσα κλήρωση του κυκλώματός μου και διαπίστωσα ότι τραβούσε μόνο m 31mA. Και επειδή το πραγματικό πρόγραμμα οδήγησης για τις οθόνες είναι απευθείας από το 74LS47 και το enable είναι από άλλο IC, μια γρήγορη μείωση των μέσων και των μέγιστων απαιτήσεων και των αντίστοιχων φύλλων δεδομένων….. Τράβηξα τις αντιστάσεις από το breadboard και βρήκα διαφορά 1mA ! Φαίνεται ότι η απευθείας οδήγηση της γραμμής CA από το 4028 ενώ οδηγείτε απευθείας όλα τα τμήματα είναι εντάξει! …περίπου.:) Είχα μια δυσλειτουργία στον κωδικό μου που δεν καθάρισε τους καταχωρητές μου όταν πατήθηκε ένα κουμπί, προκαλώντας την τελευταία οθόνη να έχει 2 τμήματα πολύ έντονα φωτισμένα όταν πατήθηκε ένα κουμπί. Αυτό ήταν κακό. Ωστόσο, η εκκαθάριση του καταχωρητή διόρθωσε αυτό το πρόβλημα και οι συνεχείς έλεγχοι ισχύος επιβεβαιώνουν ότι βρίσκεται συνεχώς στα 30mA. Αυτό θα πρέπει να μου δώσει (βάσει προηγούμενης εμπειρίας με παρόμοια κυκλώματα) run 20 ώρες χρόνου λειτουργίας χρησιμοποιώντας 1 μπαταρία 9V (500mAH/30mAH υπό κανονισμό 5V)… Ελπίζω! σε περίπτωση που συνέβη κάτι, μακροπρόθεσμα.

Βήμα 4: Συγκόλληση PCB

Συγκόλληση PCB
Συγκόλληση PCB

Κάθε φορά που φτάνω σε αυτό το σημείο του έργου μου, καθυστερώ να σταματήσω. Στην αρχή επρόκειτο να το τυλίξω με σύρμα αυτό το πράγμα, αλλά έριξα γρήγορα αυτήν την ιδέα. Αρχικά σκέφτομαι "Λίγα καλώδια για συγκόλληση, δεν είναι μεγάλη υπόθεση" … στη συνέχεια, μέχρι να είναι έτοιμο το έργο μου να κολληθεί σκέφτομαι ", Θα έπρεπε είτε να είχα στείλει για να φτιάξω μια πλακέτα πρωτότυπου είτε να χαράξω τον δικό μου πίνακα ". Δεν ασχολούμαι με την χάραξη PCB (ακόμα) και δεν ήθελα να πληρώσω $ $ για να φτιάξω έναν πίνακα, οπότε…. Ναι ….. Πέρασα περίπου 3 ώρες συγκολλώντας αυτό το πράγμα. Είναι περίπου 150 σύρματα, δηλαδή 300 σημεία συγκόλλησης, καθώς και επαφές για γέφυρες συγκόλλησης. Εν πάση περιπτώσει, εδώ είναι η πίσω πλευρά του πίνακα που απεικονίζεται…. Ναι… μέχρι ένα χάος, αλλά όταν τελείωσαν είχα μόνο 1 κοντή συγκόλληση Το Πέρασαν 20 λεπτά σκέψης αφού η οθόνη έδειξε ότι τα λάθος #εμφανίζονταν σε ένα λογικό μοτίβο που έπρεπε να αποκρυπτογραφήσω. Μετά από αυτό, εντόπισα το κοντό, και μπαμ! Λειτούργησε τέλεια.

Βήμα 5: Συμπέρασμα

συμπέρασμα
συμπέρασμα

ΛΕΙΤΟΥΡΓΗΣΕ! Αυτό το έργο χρειάστηκε περίπου. Weeks 2 εβδομάδες για να σκεφτείτε και να στείλετε email στον αιτούντα, ~ 3 ώρες ολοκλήρωσης και εντοπισμού σφαλμάτων, ~ 4 ώρες ψωμιού και εντοπισμού σφαλμάτων, ~ 3 ώρες συγκόλλησης Χρησιμοποιώντας μόνο 3 IC είναι δυνατό Charlieplex 6 LED 7 τμημάτων. Η ισχύς είναι περίπου 30mA με αυτόν τον σχεδιασμό, κάτι που δεν είναι κακό αν το λέω εγώ. Υποψιάζομαι ότι θα μπορούσαν να χρησιμοποιηθούν περισσότερα LED 7 τμημάτων, αλλά δεν έχουν σπρώξει το φάκελο. Αυτή η ιδέα θα μπορούσε να εφαρμοστεί σε σχεδόν ΟΠΟΙΑΔΗΠΟΤΕ εφαρμογή χρησιμοποιώντας LED 7 τμημάτων. θερμόμετρο, ρολόι, οθόνη κειμένου, κ.λπ. και τοποθετήστε τον πίνακα, όπως του ταιριάζει. Εάν/Όταν γίνει αυτό, θα ανεβάσω μια εικόνα. Όσο για το κύκλωμα, αυτό φαίνεται να κατασκευάζεται κατά παραγγελία!

Συνιστάται: