לעיתים אנחנו מעוניינים להציג כפלט מספרים בלבד בתצוגה פשוטה. אנחנו מכוונים למערכת שיודעת לספור כמה פחיות למחזור הכנסנו לשק, אבל הספירה יכולה להיות גם כמה אנשים נכנסו ויצאו מפתח הבית, כמה מעלות חיישן הטמטרטורה קורא ועוד ועוד. במדריך זה אסביר כיצד מחברים את התצוגה עצמה בצורה הפשוטה ביותר.
אולי לא שמתם לב לזה, אבל תצוגות 7 מקטעים נמצאות סביבנו יותר ממאה שנים (ליתר דיוק, מ1903), הרבה לפני המצאת כמעט כל מסך תצוגה אחר. עד היום נוכל לראות אותם בשילוט אלקטרוני כמו תחנות רכבת, שעונים, מחשבונים וכמעט כל מקום שבו מנסים להשיג קונטרסט גבוה בין הרקע לבין הספרות במעט אנרגיה. בעיקרון המקטעים יכולים להיות עשויים מטכניקות תאורה שונות – גם LCD ואפילו נורות ליבון (בעבר זה היה נפוץ יותר כמובן) במקרה שלנו, אנו משתמשים בתצוגה שכל מקטע שלה הוא דיודת LED.
עכשיו, מכיוון שאנחנו משתמשים בעצם במערך של 8 דיודות LED שונות עבור כל ספרה, שזה 32 דיודות, אנחנו ממש נרצה לוותר על 64 חוטים בין הבקר (Arduino Uno במקרה שלנו) לבין התצוגה, מה גם שאין כזו כמות של כניסות/יציאות בבקר שלנו. בעצם, המתכננים של התצוגה שלנו בחרו בשתי דרכים להקטין את כמות הפינים הנדרשים ולכן את כמות החוטים:
- הראשונה והקלה היא שנכון שכל דיודה צריכה להיות מוזנת במעגל נפרד, אבל לא צריך ששני החוטים יהיו נפרדים (גם ה”-” וגם ה”+”) ולכן מאחדים או את כל הכניסות (Common Anode, ה”+”) או את כל היציאות (Common Cathode, ה”-“). לא נכנס לזה אבל בתצוגה של מעט ספרות, נניח עד 7-8 ספרות, עדיפה לנו האפשרות השניה מבין השתיים, Common Cathode, וזה מה שיש לנו במקרה זה. אז כאן כבר חסכנו חצי מ64 החוטים מבמצב ההתחלתי.
- אם מתבוננים על ספרה אחת, רואים שיש לה 7 מקטעים (את זה כבר אמרנו) ובמקרה שלנו, גם נקודה עשרונית (עדיין משום מה קוראים לזה 7 מקטעים למרות שיש נקודה, תהרגו אותי למה). אז במקום שיהיו 8 חוטים לכל מקטע (יחד עם הנקודה העשרונית) כפול 4 ספרות, שזה 32 חוטים, החוכמה כאן היא שיש רק 8 חוטים עבור המקטעים ועוד חוט אחד עבור כל אחת מהספרות שדרכו מועבר האות שמפעיל את הספרה הרצויה בכל פעם. וכך נשארנו רק עם 12 פינים.
אנחנו עם הארדואינו לא מתעסקים בנבכי התצוגה עצמה, אלא משתמשים בספריה כתובה העונה לשם Sevseg, שמטרתה לפשט עבורנו את העבודה עם התצוגה, אך כדי שנבין מה העניין, אפשר לראות למטה, שכל מקטע בספרה מיוצג על ידי אות מ-a ועד g, ובעצם בהדלקה של המקטעים בסדר הנכון אנחנו בעצם מציגים ספרה מסויימת. הספריה מאפשרת לנו לבנות אובייקט בתוכנה (כמו שתראו בהמשך) ואחרי כמה הגדרות, פשוט “לספר לו” איזה מספר אנחנו רוצים שהוא יציג, במקום לקרוא בעצמנו לכל מקטע להדלק. לכן, הספריה חוסכת לנו הרבה כתיבה של קוד טכני של הדלקת המקטעים הנכונים עבור כל ספרה.
הרכבת המעגל
לצורך הרכבת המעגל נזדקק ל:
- בקר מבוסס ארדואינו, במקרה שלנו Arduino Uno
- מטריצה (לוח חיבורים ריק, Bread board)
- 4 נגדים של 1k Ohm
- חוטים
- וכמובן, תצוגת 7 מקטעים-4 ספרות
להלן מעגל המרכיבים (ניתן לעקוב אחרי החוטים שבתמונה). שימו לב שהתצוגה שלנו תופסת כמעט את כל הפינים הדיגיטליים בארדואינו. נתחיל מפין 2 ונגיע עד פין 13. ברכיב התצוגה שלנו, כמו בתמונה למטה, הפינים נספרים משמאל לימין בשורה התחתונה ואז מימין לשמאל בשורה העליונה. איך אתם יודעים שאתם מחזיקים את התצוגה ישר ולא הפוך? הנקודה העשרונית צריכה להיות למטה.
- פין 2 דרך נגד של 1kOhm מתחבר לפין 12 בתצוגה – מפעיל את הספרה הראשונה
- פין 3 דרך נגד של 1kOhm מתחבר לפין 9 בתצוגה – מפעיל את הספרה השניה
- פין 4 דרך נגד של 1kOhm מתחבר לפין 8 בתצוגה – מפעיל את הספרה השלישית
- פין 5 דרך נגד של 1kOhm מתחבר לפין 6 בתצוגה – מפעיל את הספרה הרביעית
- פין 6 מתחבר ישירות לפין 11 בתצוגה – שולט במקטע העליון ביותר A
- פין 7 מתחבר ישירות לפין 7 בתצוגה – שולט במקטע הימני העליון B
- פין 8 מתחבר ישירות לפין 4 בתצוגה – שולט במקטע הימני התחתון C
- פין 9 מתחבר ישירות לפין 2 בתצוגה – שולט במקטע התחתון ביותר D
- פין 10 מתחבר ישירות לפין 1 בתצוגה – שולט במקטע השמאלי התחתון E
- פין 11 מתחבר ישירות לפין 10 בתצוגה – שולט במקטע השמאלי העליון F
- פין 12 מתחבר ישירות לפין 5 בתצוגה – שולט במקטע האמצעי G
- פין 13 מתחבר ישירות לפין 3 בתצוגה – שולט בנקודה העשרונית
קצת קוד בסיסי
יש הרבה פיסות קוד מסתובבות ברשת לתצוגה של 7 מקטעים כזו. לא הכל עובד כצפוי. מצורף כאן קטע קוד שעיבדנו כדי שיעבוד לפי הצורך שלנו בתצוגה. והרי הוא לפניכם. ההסבר אחרי.
#include "SevSeg.h" SevSeg sevseg; //Instantiate a seven segment controller object void setup() { byte numDigits = 4; byte digitPins[] = {2, 3, 4, 5}; byte segmentPins[] = {6, 7, 8, 9, 10, 11, 12, 13}; bool resistorsOnSegments = false; // 'false' means resistors are on digit pins byte hardwareConfig = COMMON_CATHODE; // See README.md for options bool updateWithDelays = false; // Default 'false' is Recommended bool leadingZeros = true; // Use 'true' if you'd like to keep the leading zeros bool disableDecPoint = false; // Use 'true' if your decimal point doesn't exist or isn't connected sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments, updateWithDelays, leadingZeros, disableDecPoint); sevseg.setBrightness(90); } void loop() { sevseg.setNumber(0001,4); sevseg.refreshDisplay(); }
קצת הסברים על הקוד, לפי שורות:
1. הכלת השימוש בספריה ששמה SevSeg. צריך כמובן לדאוג שהיא קיימת בסביבת הפיתוח שלכם כדי להשתמש בה.
2. הגדרה ראשונית של אובייקט SevSeg, שבו נשתמש להצגה.
4. התחלת לולאת הפתיחה (תרוץ רק פעם אחת)
5. הגדרת כמות הספרות
6. הגדרת הפינים הדיגיטליים בארדואינו שאחראים לספרות לפי הסדר שלהם.
7. הגדרת הפינים הדיגיטליים שאחראים למקטעים עצמם, לפי הסדר שלהם (שימו לב שאכן יש כאן 8 פינים בשימוש, קרי גם הנקודה העשרונית נחשבת מקטע אפילו אם לא מחשיבים אותה בספירה)
8. האם קיימים נגדים על הפינים הדיגיטליים (במקרה שלנו כן)
9. האם אנחנו משתמשים בכניסה משותפת (אנודה) או יציאה משותפת (קטודה)
11. הגדרה שקשורה לדרך הרענון של הספרות (שחקו איתה ותראו אם זה משפיע עליכם)
12. משתנה בולאני שמבקש לדעת האם האם להציג אפסים או לא בשלב הראשוני.
14. השתמש בכל התכונות שהגדרנו בהזנה של האובייקט SevSeg.
16. הגדרת עוצמת המסך
19. הכנס ללולאה
20. תציג את המספר 0001, ללא נקודה עשרונית.
21 ריענון התצוגה כדי להציג את המידע החדש.
מפה אפשר לפתח כל תוכנה שזקוקה לטיימר או ספירה כזו (ואחנחו מכינים לכם משהו מיוחד…)
לסיכום
במדריך זה ראינו את מודל ההפעלה הבסיסי של תצוגת 7 המקטעים + נקודה עשרונית. אתם מוזמנים לקחת את המודל הריק הזה ולהוסיף אותו לפרויקטים אחרים שלכם לפי הצורך. אם יש לכם שאלות נוספות, ניתן לשאול בתגובות למדריך.
בהצלחה!
לתוכן זה נכתבו 0 תגובות