מברגת צעצוע ישנה וטרקטור חווה מנגן תרמו את אבריהם ליצירת משחק חדש ויוצא דופן – אקדח שמשמיע קולות אקראיים של חיות. בפוסט הראשון מבין שניים נדבר על החלקים שמהם ייבנה הפרויקט, ובשני נראה את תוצר הכלאיים החדש ואף נחשוף לראשונה שיר שלא הושמע מעולם. בואו נתחיל…
אמנם יש בבלוג הזה מגיב קבוע בכינוי "הדוד משה", אך כותרת הפוסט אינה קליק-בייט לאדם אחד: טרקטור הצעצוע שממנו הגיע הלב של הפרויקט הנוכחי אכן השמיע, בין השאר, את השיר המפורסם "Old McDonald had a farm", הידוע בגרסתו העברית כ"לדוד משה הייתה חווה". אך לפני הטרקטור, שעליו התחלתי לדבר בפוסט קודם, בואו נסתכל על המברגה.
שתי סוללות AA נמצאות בתוך ידית המברגה, והדק הפלסטיק השחור הגדול – שהציר שלו הרחק במורד הידית – לוחץ על פס מתכת גמיש, שיוצר מגע בין חוט החשמל להדק ה"פלוס" של הסוללות, כפי שניתן לראות בתמונה הבאה:
החשמל מהמגע הזה אינו מגיע ישירות למנוע החשמלי הקטן, אחרת המברגה הייתה מסוגלת להסתובב לכיוון אחד בלבד. במקום זאת, כבלי הפלוס והמינוס (צהובים) עוברים דרך מפסק דו-מצבי. במצב אחד שלו הם מתחברים ישירות לכבלי המנוע (אדומים), ובמצב השני, החוטים הירוקים המוצלבים גורמים להחלפה של הפלוס במינוס וכך לסיבוב הפוך של המנוע:
סיבובי המנוע מתורגמים, דרך תמסורת רצינית של גלגלי שיניים פלסטיים, לסיבובי ראש המברגה – כאשר בדרך יש עוד אלמנט מעניין אחד והוא המצמד. צד אחד של המצמד מחובר לגלגל השיניים האחרון של התמסורת, ובצד השני (מולו על אותו ציר) נמצא החלק שמחזיק את ראש המברגה. לשני החלקים יש קצוות דמויי גלים, שמשתלבים זה בזה (מסומן בחץ משמאל בתמונה הבאה). קפיץ קשיח למדי לוחץ על החלקים מצד שמאל, מצמיד אותם זה לזה ומבטיח שצורת הגלים והחיכוך שם יעבירו את הכוח מהמנוע לראש ההברגה. אך כשהמברגה נתקלת בהתנגדות חיצונית חזקה מספיק (מימין בתמונה), הגלים מתחילים להחליק אלה על פני אלה, לדחוק את הקפיץ פנימה ולשחרר את כוח המנוע ב"קליקים" רעשניים בלי שייגרם נזק לתמסורת.
למעשה המברגה עדיין הייתה במצב תקין, אך מה שהיא נהגה להבריג כבר נעלם והילדים זנחו אותה. מה שתפס את עיניי היה מבנה האקדח הגנרי. להפוך אותו לפנס עם לד חזק נראה לי קצת טריוויאלי, אז החלטתי לשים בפנים את המעגל המנגן של טרקטור החווה. וכאן האלקטרוניקה מתחילה להיות מעניינת.
בטרקטור היו שמונה לחצנים שונים: שלושה בטרקטור עצמו (מתחת לנהג, בהגה ובארובה), וחמישה בעגלה מאחור עבור חיות המשק השונות. כל לחצן יצר מגע בין שני חוטים, וכל החוטים התכנסו לשישה פדים על גבי המעגל – בשלשות או בזוג. איך קוראים שמונה לחצנים על שישה פדים בלבד?
השיטה המקובלת לעשות זאת היא multiplexing, שמשמשת בווריאציות שונות גם למשימות קלט וגם לפלט. לדוגמה, נניח ששלושה מהפדים כאן הם לפלט (נקרא להם A,B,C) ושלושה הם לקלט (1,2,3). נחלק את הלחצנים לשלוש קבוצות – שתי שלישיות וזוג. בתוך כל קבוצה, נחבר את כל הלחצנים מצד אחד לפד פלט אחד ספציפי (נגיד A), ומצד שני לפדים שונים של קלט (1,2,3). התוכנה שבמיקרו-בקר תיתן מתח לכל אחד מהפדים של הפלט לפי הסדר, במחזוריות: ל-A בלבד, אחר כך ל-B בלבד, אחר כך ל-C בלבד וחוזר חלילה. בכל שלב, היא תבדוק את הקלט בכל שלושת הפדים האחרים. אם יופיע מתח באחד מהם, סימן שלחצן כלשהו נלחץ – וכיוון שאנחנו יודעים לאיזה קבוצה הוא שייך (הקבוצה שמקבלת כרגע מתח) ולאן הוא הגיע, אנחנו יכולים לדעת באיזה לחצן ספציפי מדובר.
אלא שבדיקה עם מולטימטר ועם Logic Analyzer (שנותן מידע מדויק הרבה יותר מבחינת ציר הזמן) הראתה שהמצב במעגל הטרקטור לא עד כדי כך פשוט: אמנם היו שלושה פדים במתח אפס, אך כל השלושה האחרים היו כל הזמן במתח גבוה, כולם יחד. מה קורה פה?
בתור התחלה, כשחושבים על המערכת בכללותה, אנחנו לא רוצים שהמיקרו-בקר יעבוד כל הזמן ויריץ בדיקות. לטרקטור אין מפסק חשמל ראשי, ובדיקה אקטיבית של מצב הלחצנים 24 שעות ביממה תבזבז את הסוללות. נכון שאפשר להעביר את המיקרו-בקר למצב שינה בין מדידה למדידה ולרווח אותן עד כדי עשרות אלפיות השנייה, אבל יש דרך עוד יותר טובה: לשלוח אותו לישון, עם פסיקות (interrupts) חיצוניות על שלושת הפדים של הקלט. השינה היא רצופה עד שהילד לוחץ על משהו, ואז המתח הקבוע מהפלט מגיע לפד קלט כלשהו ומעיר את המיקרו-בקר, שיכול כעת להתחיל לברר באופן אקטיבי מה בדיוק קרה.
הנה צילום מסך מתוכנת ה-Logic Analyzer. שלושת הערוצים העליונים הם קווי הפלט, והרביעי (מסומן בטקסט לבן כ"(in)") הוא קו קלט ספציפי. האקשן מתחיל – משמאל לימין – כשיצרתי מגע בין הקו העליון (מסומן "(*)") לבין קו הקלט. אנחנו רואים שהמתח בקו הקלט עולה כששלושת קווי הפלט עדיין גבוהים, אחרי זה כל הקווים גם יחד יורדים לפרק זמן קצרצר, ואז – במרווחי זמן לא מסודרים – כל אחד מקווי הפלט עולה ויורד בחזרה. קו הקלט "עוקב" אחרי מה שקורה בקו העליון, עם גמגומים קצרים שמקורם במגע המכני הלא-מושלם.
והנה צילום מסך של תסריט דומה, רק שכאן קו הפלט השני מלמעלה הוא זה שיוצר מגע:
האותות הסדירים מצד ימין מופיעים כשהמיקרו-בקר כבר מנגן את הצלילים המתאימים. כנראה בשלב זה הוא יצא לגמרי ממצבי השינה, והוא ממשיך לבדוק מה קורה עם הלחצנים כדי לגלות אם הילד לחץ על משהו אחר בלי להמתין לסוף ההשמעה – כפי שילדים נוהגים לעשות לעתים קרובות. קל לראות שקו הפלט עדיין "עוקב" בנאמנות אחרי קו הפלט השני. לצורך התזמונים והמשך העבודה על הפרויקט שלנו, הנה תקריב של תחילת האירוע:
מהרגע שנוצר המגע החשמלי ועד שהמיקרו-בקר התחיל לבדוק עברו כ-5 אלפיות השנייה, אז קווי הפלט ירדו לאפס, וכעבור כ-117 מיליוניות השנייה הקו הראשון עלה למתח גבוה למשך כ-225 מיליוניות השנייה. המידע הזה חשוב כי אם אני רוצה – ואני אכן רוצה – לחקות את התנהגות הלחצנים בצורה מבוקרת עם מיקרו-בקר משלי, אני חייב לדעת מהו סדר הגודל של חלונות הזמן שבהם אני יכול להגיב למעגל הטרקטור ולקבל את התוצאות הרצויות לי.
הפירוט הזה תפס הרבה מקום, אז כדי לא להתיש אתכם, נמשיך בפוסט הבא.