תוכן עניינים:

מונה BloodBowl Turn Turn באמצעות נוריות בעלות 7 קטעים: 5 שלבים
מונה BloodBowl Turn Turn באמצעות נוריות בעלות 7 קטעים: 5 שלבים

וִידֵאוֹ: מונה BloodBowl Turn Turn באמצעות נוריות בעלות 7 קטעים: 5 שלבים

וִידֵאוֹ: מונה BloodBowl Turn Turn באמצעות נוריות בעלות 7 קטעים: 5 שלבים
וִידֵאוֹ: מונה וטוש - 5 פרקים ברצף! 2024, נוֹבֶמבֶּר
Anonim
מונה BloodBowl הופך באמצעות נוריות עם 7 פלחים
מונה BloodBowl הופך באמצעות נוריות עם 7 פלחים

פרויקט זה נועד לדלפק משחק BloodBowl באמצעות שישה נוריות 7-פלחי Charlieplexed.

שלב 1: קונספט

מוּשָׂג
מוּשָׂג

חבר שלי שאל אותי לגבי רעיונות לבניית דלפק כדורי כדור למשחק שלו. מבלי לדעת מה זה ומה הוא רוצה, לקח זמן להחליט אם וכיצד אני הולך לעשות זאת. קודם כל היה לי מושג מה הוא רוצה, אז התחלתי באמנות קונספט (תמונה). הרעיון הבסיסי הוא שיהיו 3 כפתורי לחיצה, השולטים על 3 נוריות כל אחד והוא יונח בתוך מגדל בנוי בהתאמה אישית.הבקשה הגדולה היחידה הייתה ש -4 המסכים המובילים ייספרו מ -0 ל -8 ויאפסו, ויהיו 2 התחתונים תצוגות לספור לאחור מ 8 ל 0 ולחזור אחורה. הייתי מסיים את המעגל, והוא היה משלים את המגדל.

שלב 2: רשימת עיצוב וחלקים

רשימת עיצוב וחלקים
רשימת עיצוב וחלקים

מכיוון שהרעיון קרא ל 6 נוריות LED עם 7 קטעים, והיו לי כמה PICs של מיקרו-שבב בהישג יד, חקרתי דרכי שימוש ב- PIC לשליטה ב- LEDs. מצאתי את הקישור הזה https://www.mikroe.com/en/books /picbook/7_08chapter.htm שאומר "ניתן לגשת לעד 6 תצוגות כך מבלי להשפיע על הבהירות של כל תצוגה". נתקלתי בזה כאתגר ומשהו לחקור אותו במסגרת הפרויקט שלי. הדבר הראשון שעשיתי היה לתפוס כמה תצוגות ליבון של 7 קטעים מהקופסה שלי ולראות איך הם יעבדו. חדשות רעות. החלקים המסוימים שבחרתי לא התנהגו כמו שרציתי. הקטע היה נדלק בעת הצורך, על לוח הלחם, אך זרם דליפה הופץ ל -6 הקטעים האחרים. הבנתי שאולי תצוגות ליבון אינן הדרך הנכונה, או שהייתי צריך להשתמש בהן בצורה אחרת. אז לשם הפשטות אימתתי כי נוריות ה- 7 פלחים שהיו לי בהישג יד יעבדו עבור קרש קרש, והזמנתי כמה תצוגות אנודה נפוצות. הדבר השני שהייתי צריך לעשות הוא לפרוס את העיצוב שלי ולהתחיל לעבוד על הקוד. בתמונה המעגל שלי. לא הרבה מזה, מכיוון שהקוד ב- PIC דואג להרבייה … טועה Charlieplexing. הערה: לכל 6 התצוגות יש שורות זהות ממנהל ההתקן IC. הבורר IC מאפשר לכל תצוגה, אחת בכל פעם, ושורות 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 5V1 קליפ סוללה 9V1 סוללה 9V מתג קטן (להפעלה/כיבוי) אני רואה בכך פרויקט מורכב למדי, בשל; 1) קוד מיקרו -מעבד נדרש 2) הלחמה ו 3) אופטימיזציה לעיצוב. אף אחת מהנושאים הללו כשלעצמם אינה מסובכת מדי, אך לקיחת כולן ללא כל ניסיון יכולה להוות הרבה עבור המתחיל. מתכנת חומרה נדרש לשרוף את המכשיר, תחנת הלחמה וכו '… הדבר הראשון שמישהו עשוי להבחין בו הוא שלנוריות ה- 7 פלחים אין נגדים סדרתיים (מגבילים זרם)! תן לי להתייחס לזה במהירות, על ידי הצהרת העיצוב המקורי שלי שיש אותם … אבל קרא את השלב הבא להסבר!

שלב 3: קרש הלוח וקוד מיקרו

לוח לחם וקוד מיקרו
לוח לחם וקוד מיקרו

קרש לחם היה חובה בשביל זה. מוצג לוח הלחם הגנרי שלי, אך לגודל הפרויקט הזה השתמשתי למעשה בלוח הלחם הזה ובקרש לחם קטן יותר, מכיוון שהיו הרבה חוטים שצריך לפזר אותם. ראשית, בדקתי LED בודד אחד בן 7 פלחים באמצעות קוד ראשוני. זה אישר 3 דברים; 1) חיווט של ה- IC אומת טוב! 2) הוביל אותי לייעל ולסיים את הקוד שלי. 3) גרם לי להבין שאני לא צריך את הנגדים המגבילים הנוכחיים! לעבוד עם הקוד שלי, מכיוון שהנורית הייתה עוברת בין מספרים באמצעות מתג לחצן אחד, כך שאמתה את הקוד והפריסה שלי. לא נדרש הרבה אבל הלוח אישר שאני במצב טוב. לאחר בדיקות הלוח, הפכתי את השגרה, כך שרוב הזמן הציג כל הזמן מספרים וה- ISR כדי לבדוק אם יש כפתורים. הסיבה שעשיתי זאת הייתה רק להצגת תצוגה קבועה, מכיוון שה- PIC פועל עם שעון פנימי של 4 מגה -הרץ, אני מאבד מעט מאוד זמן בחיפוש אחר כפתורים. לא נורא … תלוי רק איך אתה רוצה לעשות את הקוד ומה הכי הגיוני עבור כל יישום. לשם כך התצוגה חשובה, לכן שמתי זאת בשגרה העיקרית. כשהגיעו החלקים הראשונים שלי (כל 6 התצוגות!), השלמתי את חיווט לוח הלוח ומצאתי בעיה נוספת. בעת לחיצה על הכפתור היו בקוד שלי כמה רישומים מרושלים שלא נמחקו וה- 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;;; (ג) 5/2009; קוד זה עשוי לשמש ללמידה/יישום/שינוי אישי.; כל שימוש בקוד זה במוצרים מסחריים מפר את גרסת התוכנה החופשית הזו.; לשאלות/הערות, צור קשר עם מעגל נקודה ב- yahoo dot com.; ------------------------------------------------ -------------------------------#כולל P16F627A. INC; ============== ==================================================== =================; מגדיר; ------------------------------------------------ -------------------------------; =================== =================================================== ============; נתונים;------------------------------------------------ -------------------------------; משתני זמן שמירה מספר 1 שווה 20 ספירה 2 שווה 21 dis1 שווה 22 דיס 2 equ 23dis3 equ 24dis4 equ 25dis5 equ 26dis6 equ 27w_temp equ 28status_temp equ 29ISRCNTR equ 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 עברו להפסקת שיחות שיחה אחת; המתן 0.2 שניות ביטול שיחות incf dis1; עדכן מונה movf dis1, W; בדוק אם הצפה xorlw 0x1A; 10 על 7-seg? btfss STATUS, Z לחזור; לא, תחזור לסרוק. movlw h'10 '; כן, אפס את התצוגה. movwf dis1 מחזיר w2debounce ניתוק שיחות; המתן 0.2 שניות debonze incf dis2; עדכון מונה movf dis2, W; בדוק אם הצפת xorlw 0x4A; 10 על 7-seg? btfss STATUS, Z לחזור; לא, תחזור לסרוק. movlw h'40 '; כן, אפס את התצוגה. movwf dis2 מחזיר w3debounce ניתוק שיחות; המתן 0.2 שניות debonce incf dis3; עדכן מונה movf dis3, W; בדוק אם הצפת xorlw 0x5A עולה; 10 על 7-seg? btfss STATUS, Z לחזור; לא, תחזור לסרוק. movlw h'50 '; כן, אפס את התצוגה. movwf dis3 מחזיר w4debounce ניתוק שיחות; המתן 0.2 שניות debonze incf dis4; עדכון counter movf dis4, W; בדוק אם הצפה xorlw 0x8A; 10 על 7-seg? btfss STATUS, Z לחזור; לא, תחזור לסרוק. movlw h'80 '; כן, אפס את התצוגה. movwf dis4 מחזיר w5debounce ניתוק שיחות; המתן 0.2 שניות ביטול שיחות incf dis5; עדכון מונה movf dis5, W; בדוק אם הצפת xorlw 0x9A; 10 על 7-seg? btfss STATUS, Z לחזור; לא, תחזור לסרוק. movlw h'90 '; כן, אפס את התצוגה. movwf dis5 מחזיר w6debounce ניתוק שיחות; המתן 0.2 שניות debonce incf dis6; עדכן מונה movf dis6, W; בדוק אם הצפת xorlw 0xCA; 10 על 7-seg? 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; ============================= ==================================================== =; התחל כאן!;---------------------------------------------- --------------------------------- התחלה; יציאות Configuration 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, RP0 movlw h'FF; 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; נקה יציאות 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 שניות; נוריות בדיקה, תצוגה 8 ???; ====================================== ===========================================; רָאשִׁי; מקבל תשומות ממתגים, ניתוקים ומצגי תמורה.;; זה מעדכן את התצוגות, @4Mhz עם TMR0 טרום 1: 4, בקצב של 1Khz.; תצוגה 0 משמשת להקצאה לתצוגה שאינה בשימוש. תצוגה 1-6 חוטית.; ראשית, BCD-7Seg IC נטען בערך תצוגה, ו- BCD-Dec IC מופעל עבור; בחירת תצוגה.; שנית, עיכוב של ms מוחזק לתצוגה. IC מושבת … תצוגה 0 נבחרה לכיבוי התצוגה;; זה חוזר על עצמו על כל אחת מ -6 הצגים ולופף אותו.; ISR מטפל בחישה של מתגים בקצב של 15 הרץ.; -------------- -------------------------------------------------- --------------- main; Disp1 movf dis1, 0 movwf PORTA call ledon gooto main; ===================== ==================================================== =========; לדון; זמן תיקון להפעלת LED; 6 תצוגות-> 1/6 מחזור עבודה ב- 1Khz = 166 מחזורים; ----------------------------------- -------------------------------------------- ledon movlw.54 movwf count1ledloop decfsz count1, F goto ledloopreturn; ========================================== =======================================; אות ניתוק; 4 מחזורים לטעון ולהתקשר, 2 מחזורים להחזרה.; 4Mhz Tc:: count2 = 255-> 0.2 שניות; -------------------------------------- ----------------------------------------- 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. עם זאת, בדקתי את הציור הנוכחי של המעגל שלי ומצאתי שהוא מושך רק ~ 31mA. ומכיוון שהדרייבר בפועל לתצוגות הוא ישירות מה- 74LS47 וההפעלה היא ממעגל אחר, ירידה מהירה בדרישות הממוצע והשיא, ודפי הנתונים המתאימים ….. הורדתי את הנגדים מלוח הלחם ומצאתי הבדל של 1mA ! נראה כי נהיגה ישירה בקו CA מה- 4028 תוך נהיגה ישירה בכל הקטעים היא בסדר! …בערך.:) הייתה לי תקלה בקוד שלי שלא ניקה את הרישומים שלי בעת לחיצה על כפתור, מה שגרם לתצוגה האחרונה להדליק 2 קטעים בהירים מאוד בעת לחיצה על כפתור. זה היה רע. עם זאת, ניקוי הרשם פתר בעיה זו, ובדיקות חשמל רציפות מאשרות כי הוא כל הזמן בסביבות 30mA. זה אמור לתת לי (בהתבסס על ניסיון קודם במעגלים דומים) ~ 20 שעות זמן הפעלה באמצעות סוללה אחת של 9V (500mAH/30mAH תחת תקנת 5V) … אני מקווה! החלטתי להשאיר את הנורות ישירות של הנורות, אבל הכנסתי אותן לשקעים. במקרה שמשהו קרה, לטווח ארוך.

שלב 4: הלחמה PCB

הלחמה PCB
הלחמה PCB

בכל פעם שאני מגיע לנקודה זו בפרויקט שלי אני מתעכב. בהתחלה התכוונתי לעטוף את הדבר הזה, אבל מהר מאוד ירד לי הרעיון הזה. בהתחלה אני חושב "כמה חוטים להלחמה, לא נורא" … ואז, עד שהפרויקט שלי מוכן להלחמה אני חושב, " הייתי צריך לשלוח או להכין לוח פרוטו, או לחרוט לוח משלי ". אני לא עוסק בתחריט PCB (עדיין), ולא רציתי לשלם $$ כדי להכין לוח, אז … כן ….. ביליתי בערך 3 שעות בהלחמה של הדבר הזה. זה בערך 150 חוטים, אז זה 300 נקודות הלחמה, בתוספת מגעים לגשרים הלחמה. בכל מקרה, הנה הצד האחורי של הלוח בתמונה…. לקח 20 דקות של מחשבה מאז שהתצוגה הראתה שהמספרים הלא נכונים מוצגים בתבנית הגיונית שהייתי צריך לפענח. לאחר מכן, איתרתי את הקצר, ובאם! זה עבד בצורה מושלמת.

שלב 5: מסקנה

סיכום
סיכום

זה עבד! הפרויקט הזה לקח בערך; ~ שבועיים למחשבה ושלח דואר אלקטרוני לדואר אלקטרוני בדואר אלקטרוני, ~ 3 שעות של השלמת קוד וניפוי באגים, ~ 4 שעות של לוחות עבודה וניקוי באגים, ~ 3 שעות של הלחמה בעזרת 3 IC בלבד אפשר Charlieplex 6 נוריות עם 7 סגמנטים. שרטוט הספק הוא בערך 30mA עם העיצוב הזה, וזה לא רע אם אני אגיד זאת בעצמי. אני חושד שאפשר להשתמש בעוד נוריות 7 קטעים, אך לא דחפתי את המעטפה. רעיון זה יכול להיות מיושם על כמעט כל יישום באמצעות נוריות עם 7 פלחים; מדחום, שעון, תצוגת טקסט וכו '. עם קוד מסובך, תוכל לקבל תצוגה נעה או תמונות … אולי אפילו בסיס לפרויקט POV (התמדה בראייה). ההטמעה הסופית נותרה לחבר שלי לבנות את המגדל שלו והנח את הלוח כפי שהוא רואה לנכון. אם/כשתעשה זאת, אעלה תמונה. אך באשר למעגל, נראה כי זה בנוי לפי הזמנה!

מוּמלָץ: