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

מטריצת תצוגת LED 5x4 באמצעות חותמת בסיסית 2 (bs2) ו- Charlieplexing: 7 שלבים
מטריצת תצוגת LED 5x4 באמצעות חותמת בסיסית 2 (bs2) ו- Charlieplexing: 7 שלבים

וִידֵאוֹ: מטריצת תצוגת LED 5x4 באמצעות חותמת בסיסית 2 (bs2) ו- Charlieplexing: 7 שלבים

וִידֵאוֹ: מטריצת תצוגת LED 5x4 באמצעות חותמת בסיסית 2 (bs2) ו- Charlieplexing: 7 שלבים
וִידֵאוֹ: דוחפי זרם חלק 1 מבוא + איך בוחרים דוחף זרם? + הסבר ULN2003 2024, יולי
Anonim
מטריצת תצוגת LED 5x4 באמצעות חותמת בסיסית 2 (bs2) ו- Charlieplexing
מטריצת תצוגת LED 5x4 באמצעות חותמת בסיסית 2 (bs2) ו- Charlieplexing

האם יש לך בול בסיסי 2 וכמה נוריות נוספות יושבות? למה לא לשחק עם הרעיון של charlieplexing וליצור פלט בעזרת 5 סיכות בלבד.

עבור הוראה זו אשתמש ב- BS2e אך כל אחד מבני משפחת BS2 צריך לעבוד.

שלב 1: Charlieplexing: מה, למה ואיך

בואו נוריד את הסיבה מדוע. מדוע להשתמש ב- charlieplexing עם חותמת בסיסית 2? --- הוכחת מושג: למד כיצד עבודת שילוב של שילובים ולמד משהו על ה- BS2. זה עשוי להיות שימושי לי מאוחר יותר באמצעות שבבים 8 פינים מהירים יותר (רק 5 מהם יהיו i/o).---סיבה שימושית: בעיקרון אין. BS2 איטי מדי לתצוגה מבלי להבהב ניכר. מהו charlieplexing? --- Charlieplexing היא שיטה להנעת מספר רב של נוריות LED עם מספר קטן של סיכות i/o של מיקרו-מעבד. למדתי על charlieplexing מ www.instructables.com וגם אתה יכול: Charlieplexing LEDs- התאוריה כיצד להניע הרבה נוריות מכמה סיכות מיקרו-בקר. כמו כן בויקיפדיה: Charlieplexing כיצד אוכל לנהוג 20 נוריות עם 5 סיכות i/o? --- אנא קרא את שלושת הקישורים תחת "מהו charlieplexing?". זה מסביר את זה יותר טוב ממה שיכולתי. Charlieplexing שונה מרבב כפול מסורתי שצריך סיכת i/o אחת לכל שורה וכל עמודה (זה יהיה בסך הכל 9 סיכות i/o לתצוגה 5/4).

שלב 2: חומרה וסכימה

חומרה וסכימה
חומרה וסכימה

רשימת חומרים: 1x - חותמת בסיסית 220x - דיודות פולטות אור (נוריות) מאותו סוג (צבע וירידת מתח) 5x - נגדים (ראו להלן לגבי ערך הנגד) עזר/אופציונלי: שיטת תכנות כפתור הלחיצה BS2Momentary כמתג איפוס 6v -9v אספקת חשמל בהתאם לגרסת ה- BS2 שלך (קרא את המדריך שלך) סכמטי: סכמטי זה מורכב עם הפריסה המכנית בראש. תראה את רשת נוריות הלדים המוגדרות בצד שמאל, זהו הכיוון שעבורו נכתב קוד BS2. שימו לב שלכל זוג נוריות LED יש את האנודה המחוברת לקתודה של האחר. לאחר מכן הם מחוברים לאחד מחמשת סיכות ה- i/o. ערכי ההתנגדות: עליך לחשב את ערכי הנגד שלך. בדוק את גליון הנתונים של נוריות ה- LED שלך או השתמש בהגדרת ה- LED במולטימטר הדיגיטלי שלך כדי למצוא את ירידת המתח של הנורות שלך. בוא נעשה כמה חישובים: מתח אספקה - ירידה במתח / זרם רצוי = ערך התנגדות BS2 מספק הספק מווסת של 5V ויכול מקור 20ma של הנוכחי. לנורות שלי יש ירידה של 1.6 וולט ופועלות על 20ma.5v - 1.6v /.02amps = 155ohms כדי להגן על ה- BS2 שלך עליך להשתמש בערך הנגד הגבוה הבא ממה שאתה מקבל עם החישוב, במקרה זה אני מאמין שזה יהיה 180 אוהם. השתמשתי ב -220 אוהם מכיוון שללוח הפיתוח שלי יש ערך זה של הנגד המובנה בו עבור כל פין i/o. הערה: אני מאמין שמכיוון שיש הנגד על כל סיכה זה למעשה מכפיל את ההתנגדות על כל הלד מכיוון שסיכה אחת היא V+ והשנייה היא Gnd. אם זה המצב, עליך להפחית את ערכי הנגד בחצי. ההשפעה השלילית של ערך הנגד גבוה מדי היא LED עמעם. מישהו יכול לאמת את זה ולהשאיר לי PM או להגיב כדי שאוכל לעדכן את המידע הזה? תכנות: השתמשתי בלוח פיתוח שיש לו מחבר DB9 כדי לתכנת את השבב ממש על הלוח. אני גם משתמש בשבב הזה על קרש הלחם שלי ללא הלחמה וכלל כותרת In Circuit Serial Programming (ICSP). הכותרת היא 5 סיכות, סיכות 2 עד 5 מתחברות לסיכות 2-5 בכבל טורי DB9 (סיכה 1 אינה בשימוש). שים לב שכדי להשתמש בסיכות 6 ו -7 בכותרת ICSP זו בכבל DB9 יש לחבר זה לזה. איפוס: כפתור איפוס לחיצה רגעי הוא אופציונלי. זה פשוט מושך את סיכה 22 לקרקע כאשר הוא נדחף.

שלב 3: קרש

לוח לחם
לוח לחם
לוח לחם
לוח לחם

עכשיו הגיע הזמן לבנות את המטריצה על לוח לחם. השתמשתי בפס מסוף כדי לחבר רגל אחת מכל זוג לד יחד וחוט מגשר קטן לחיבור הרגליים האחרות. זה מפורט בצילום התקריב ומוסבר כאן לעומק: 1. כוון את לוח הלחם שלך כך שיתאים לתמונה הגדולה 2. הצב את נורית 1 עם האנודה (+) כלפיך והקתודה (-) הרחק ממך. מקם את LED 2 באותה כיוון עם האנודה (+) ברצועת הטרמינל המחברת של קתודת ה- LED 1. השתמש בחוט מגשר קטן כדי לחבר את האנודה של LED 1 עם הקתודה של LED 2.5. חזור על הפעולה עד שנוספו כל זוג נוריות לד ללוח. אני משתמש בדרך כלל ברצועות אוטובוס הכוח של לוח הלחם כרצועות אוטובוס לסיכות הקלט/פלט BS2. מכיוון שיש רק 4 רצועות אוטובוס אני משתמש ברצועת מסוף ל- P4 (חיבור הקלט/פלט החמישי). ניתן לראות זאת בתמונה הגדולה למטה. חבר את פס המסוף של קתודת ה- LED 1 לרצועת האוטובוס P0. חזור על כל LED מוזר ומחליף את ה- P* הנכון עבור כל זוג (ראה סכמטי).7. חבר את פס המסוף של קתודת ה- LED 2 לרצועת האוטובוס P1. חזור על כל LED מוזר ומחליף את ה- P* הנכון עבור כל זוג (ראה סכמטי).8. חבר כל רצועת אוטובוס לפין הקלט/פלט המתאים ב- BS2 (P0-P4).9. בדוק את כל החיבורים כדי לוודא שהם תואמים את סכמטי. חגג הערה: בקלוז-אפ תראה שלא נראה שעשיתי אחר שלב 7 כשהחיבור לסיכת הקלט/פלט השנייה נמצא באנודה של הלדים המספרים המוזרים. זכור כי הקתודה של נוריות הזוגות הזוגיות מחוברת לאנודה של הלדים המספרים המוזרים כך שהחיבור זהה בכל מקרה. אם פתק זה מבלבל אותך, פשוט התעלם ממנו.

שלב 4: יסודות תכנות

כדי שרכיבים מורכבים לעבודה אתה מדליק רק לד אחד בכל פעם. כדי שזה יעבוד עם ה- BS2 שלנו, אנו זקוקים לשני שלבים בסיסיים: 1. הגדר את מצבי הפלט לסיכות באמצעות הפקודה OUTS. ספר ל- BS2 באילו סיכות להשתמש כפלט באמצעות הפקודה DIRS זה פועל מכיוון שניתן לומר ל- BS2 אילו סיכות להסיע גבוה ונמוך ויחכה לעשות זאת עד שתציין אילו סיכות הן יציאות. בוא נראה אם הדברים מחוברים כראוי על ידי רק מנסה להבהב LED 1. אם אתה מסתכל על סכמטי אתה יכול לראות כי P0 מחובר לקתודה (-) של LED 1 ו- P1 מחובר לאנודה של אותה נורית. זה אומר שאנחנו רוצים להניע P0 נמוך ו- P1 גבוה. ניתן לעשות זאת כך: "OUTS = % 11110" המניע את P4-P1 גבוה ו- P0 נמוך. (% מציין מספר בינארי שעליו לעקוב. הספרה הבינארית הנמוכה ביותר נמצאת תמיד מימין. 0 = LOW, 1 = HIGH) ה- BS2 מאחסן את המידע הזה אך לא יפעל על פיו עד שנצהיר אילו סיכות הן פלט. שלב זה הוא המפתח מכיוון שרק שני סיכות אמורות להיות יציאות במקביל. השאר צריכים להיות כניסות, מה שמגדיר את הסיכות למצב עכבה גבוהה כך שלא ישקעו זרם. עלינו להניע P0 ו- P1 כך שנגדיר את אלה ליציאות והשאר לכניסות כך: "DIRS = % 00011". (% מציין מספר בינארי שעומד לעקוב. הספרה הבינארית הנמוכה ביותר נמצאת תמיד בצד ימין. 0 = INPUT, 1 = OUTPUT) בואו נחבר את זה לכמה קוד שימושי: '{$ STAMP BS2e}' {$ PBASIC 2.5} DO OUTS = %11110 'כונן P0 נמוך ו- P1-P4 גבוה DIRS = %00011' הגדר P0- P1 כפלט ו- P2-P4 ככניסות PAUSE 250 'השהה עד שה- LED נשאר על DIRS = 0' הגדר את כל הסיכות לכניסה. פעולה זו תכבה את השהיית LED PAUSE 250 'עד שה- LED יישאר כבוי LOOP

שלב 5: מחזור הפיתוח

כעת, לאחר שראינו סיכה אחת של זמן עבודה כדי לוודא שכולם עובדים. 20led_Zig-Zag.bse הקוד המצורף הזה צריך להאיר כל אחד מ -20 הלדים בתבנית זיג-זג. תוכלו להבחין כי לאחר שכל סיכה דולקת אני משתמש ב- "DIRS = 0" כדי להפוך את כל הסיכות חזרה לכניסות. אם תשנה את ה- OUTS מבלי לכבות את סיכות הפלט אתה עלול לקבל קצת "רפאים" שבהם מנורה שאסור להדליק עשויה להבהב בין המחזורים. אם תשנה את משתנה W1 בתחילת הקוד הזה ל- "W1 = 1" שם תהיה רק הפסקה של 1 מילי -שנייה בין כל מהבהב LED. זה יגרום לאפקט התמדה של ראייה (POV) שיגרום לו להיראות כאילו כל הנורות נורות דולקות. זה אכן משפיע על נוריות הלדים, אך הוא המהות של האופן שבו נציג תווים על מטריצה זו. נוריות לדפוס שמיש. הקובץ הזה הוא הניסיון הראשון שלי. תראה שבתחתית הקובץ התווים מאוחסנים בארבע שורות של בינארית בת 5 ספרות. כל שורה נקראת, מנותחת, ונקראת משנה משנה בכל פעם שצריך להדליק לד. קוד זה עובד, עובר בין הספרות 1-0. אם אתה מנסה להריץ את זה שים לב שזה נתון בקצב רענון איטי מאוד שגורם לדמויות להבהב כמעט לאט מדי מכדי לזהות אותן. הקוד הזה גרוע מסיבות רבות. ראשית, חמש ספרות בינאריות תופסות מקום בדיוק ב- EEPROM כמו 8 ספרות בינאריות כשכל המידע מאוחסן בקבוצות של ארבע סיביות. שנית, ה- SELECT CASE המשמש להחלטה מה הסיכה שצריך להדליק דורש 20 מארזים. BS2 מוגבל ל -16 מקרים לכל פעולת SELECT. זה אומר שהייתי צריך לפרוץ את המגבלה הזו עם הצהרת IF-THEN-ELSE. חייבת להיות דרך טובה יותר. אחרי כמה שעות של גירוד בראש גיליתי את זה.

שלב 6: מתורגמן טוב יותר

כל שורה במטריצה שלנו מורכבת מ -4 נוריות, כל אחת יכולה להיות דולקת או כבויה. BS2 מאחסן מידע ב- EEPROM שלו בקבוצות של ארבע סיביות. המתאם הזה אמור להקל עלינו הרבה יותר. בנוסף לעובדה זו, ארבע סיביות תואמות את המספרים העשרוניים 0-15 לסך של 16 אפשרויות. זה הופך את או SELECT CASE להרבה יותר קל. הנה הספרה 7 כפי שהיא מאוחסנת ב- EEPROM: '7 %1111, %1001, %0010, %0100, %0100, לכל שורה יש שוויון עשרוני ל- 0-15 אז קראנו a נכנסו מהזיכרון והזינו אותו ישירות לפונקציית SELECT CASE. המשמעות היא שהמטריצה הבינארית הניתנת לקריאה המשמשת ליצירת כל תו (1 = הדלקה, 0 = כבוי) היא המפתח של המתורגמן. על מנת להשתמש באותו SELECT CASE עבור כל אחת מחמש השורות השתמשתי באותיות נבחרות אחרות כדי להגדיר את DIRS ו- OUTS כמשתנים. קראתי לראשונה בכל אחת מחמש שורות הדמות למשתנים ROW1-ROW5. התוכנית הראשית מתקשרת לאחר מכן לשגרת המשנה להצגת הדמות. תת-תוכנית זו לוקחת את השורה הראשונה ומקצה את ארבעת שילובי OUTS האפשריים למשתנה outp1-outp4 ושני שילובי DIRS האפשריים ל- direc1 & direc2. נוריות מהבהבות, מונה השורות מצטבר, ואותו תהליך מתבצע עבור כל אחת מארבע השורות האחרות. זה מהיר בהרבה מתוכנית המתורגמנים הראשונה. עם זאת, עדיין יש הבהוב ניכר. תסתכל על הסרטון, המצלמה גורמת להבהוב להיראות הרבה יותר גרוע אבל אתה מבין את הרעיון. העברת הרעיון הזה לשבב הרבה יותר מהיר, כמו picMicro או שבב AVR, תאפשר הצגת תווים אלה ללא הבהובים ניכרים.

שלב 7: לאן ללכת מכאן

אין לי טחנת cnc או חומרי חריטה לייצור מעגלים אז אני לא אעשה חיווט לפרויקט הזה. אם יש לך טחנת ואתה מעוניין לשתף פעולה כדי להתקדם מכאן, שלח לי הודעה. אשמח לשלם על חומרים ומשלוח אפילו יותר שמח להציג משהו ממוצר עבור הפרויקט הזה.

אפשרויות אחרות: 1. העבר את זה לשבב אחר. ניתן להשתמש בעיצוב מטריקס זה עם כל שבב בעל 5 סיכות i/o זמינות המסוגלות לתנאי מצב (סיכות שיכולות להיות גבוהות, נמוכות או קלט (עכבה גבוהה)). 2. באמצעות שבב מהיר יותר (אולי AVR או picMicro) ניתן להגדיל את קנה המידה. עם שבב 20 פינים אתה יכול להשתמש ב -14 סיכות כדי לחבר מחדש צג בגודל 8x22 ולהשתמש בפינים הנותרים כדי לקבל פקודות טוריות ממחשב או מבקר אחר. השתמש בשלושה שבבים נוספים של 20 פינים ותוכל לקבל תצוגת גלילה בגודל 8x88 לכל 11 תווים בבת אחת (תלוי ברוחב כל תו כמובן). בהצלחה תהנה!

מוּמלָץ: