איך זה עובד: מקלדת
לא מסובך להבין איך לחיצה על מקש מחוללת תגובה במחשב שלנו. אבל מה קורה כשיש יותר ממאה כאלה?
סיפורנו השבוע מתחיל בהתקן משונה, שספק אם מישהו מכם נתקל בו אי-פעם. במבט ראשון, גם לי לא היה מושג במה מדובר. לכאורה זהו לוח מקשים של טלפון קווי, אך למה הוא כזה עגול ומגושם, ולאיזה מין טלפון יש מתג משונה לצד המקשים? ואם זה חלק שפורק מטלפון חדש בעיצוב רטרו, למה המעגל החשמלי מאחור מיושן כל כך?
עוד דברים שעובדים ב-ynet:
הניחוש הבא שלי היה שמדובר בלוח להקשת קוד באינטרקום עתיק, אלא שחיפוש מידע על המעגל המשולב שמתחבא בין הרכיבים גילה את הפתרון הנכון. הג'וק נקרא LR40992, ומוגדר כ-Pulse Dialer, כלומר חייגן פולסים ("דפקים" בעברית, וזו הפעם האחרונה שאני אשתמש במינוח הזה). זהו רכיב שמאזין להקשה על ספרות בלוח מקשים, והופך אותן לסדרות של פולסים חשמליים זהים לאלה שמפיק המנגנון המכני בטלפון חוגה. כלומר, בימי טלפון החוגה העליזים, הפאנל המכוער הזה היה בוודאי השדרוג מבטל-האחריות האולטימטיבי, שהפך את המכשיר העתיק והמסורבל (והאיטי) למכונת פלאים שהוציאה לכל השכנים והחברים את העיניים: תשמעו, הוא מסוגל אפילו לבצע חיוג חוזר של עד 17 ספרות!
אבל לא התכנסנו כאן כדי לדבר על חייגן הפולסים, אלא על משהו הרבה יותר בסיסי ונפוץ: לוח המקשים עצמו. מהמקלדת של המחשב האישי ועד לשלט של המזגן, אנחנו מוקפים בלוחות מקשים בגדלים ובצורות שונים ומשונים. איך הם בנויים בפנים? ומה שחשוב עוד יותר, איך הג'וקים האלקטרוניים יודעים בדיוק איזה מקש נלחץ?
כל עוד מדובר על מקשים ספורים, אפשר לחווט אותם כך שכל אחד יפעל כמתג רגיל ויתחבר לרגל נפרדת של הג'וק. אבל במקלדת סטנדרטית, לדוגמה, יש למעלה ממאה מקשים – ומי השתגע לייצר ג'וק עם יותר ממאה רגליים רק בשביל מקלדת? ונניח שמישהו מתכנן מקלדת עם מקש אחד נוסף – האם זה הגיוני לתכנן לשם כך ג'וק חדש לגמרי, עם רגל אחת נוספת?
למזלם של המתכננים – ולרוע מזלם של יצרני הג'וקים – יש דרך נוחה וחסכונית יותר לעשות זאת, אשר מסתמכת על הגורם האנושי במשוואה. כדי להבין את השיטה הזו, שמשמשת ברוב המכריע של לוחות המקשים האלקטרוניים בעולם, נסתכל קודם כל על לוח מקשים מהסוג הפשוט והזול ביותר:
הלוח כולו בעובי של כרטיס אשראי, בלי שום סוללה או רכיבים מתוחכמים בפנים, ובכל זאת הוא מסוגל להעביר מידע על שישה-עשר לחצנים שונים דרך שמונה חוטים בלבד (אתם יכולים לספור). הסוד טמון בסידור הפנימי של החוטים מתחת למקשים: ארבעה מהם עוברים לאורך טורי המקשים, חוט אחד לכל טור, וארבעת האחרים עוברים לאורך השורות. בין שתי קבוצות החוטים הללו יש מחיצה, עם חורים בכל הצטלבות חוטים. במצב רגיל, העובי של המחיצה מספיק כדי להפריד בין החוטים גם באזור המחורר, אך כאשר המשתמש מפעיל שם לחץ, החוט העליון נמתח כלפי מטה דרך החור ונוגע בחוט התחתון. הנה, ככה:
השרטוט מציג את ארבעת חוטי הטורים (באדום), את ארבעת חוטי השורות (בכחול), וכן "אות בדיקה" חשמלי שנכנס לאחת השורות וחוזר, בזכות המגע שנוצר במקש המסומן בעיגול ירוק, דרך אחד הטורים. אבל איך הג'וק יודע לשלוח אות לשורה הנכונה ולחפש את האות החוזר בטור הנכון? הוא לא יודע. הוא פשוט עובר על כל האפשרויות: שולח אות לשורה הראשונה ומחפש אותו בכל אחד מהטורים; לאחר מכן, מעביר את האות לשורה השניה ושוב מחפש אותו בכל הטורים, וכן הלאה. למעשה, בכל רגע נתון הג'וק "מסתכל" על צומת אחד ספציפי ובודק אם יש שם מגע חשמלי או נתק. כך, עם עשרים פינים בלבד אפשר לכסות מאה מקשים (10x10), עם עשרים ושניים פינים – מאה עשרים ואחד מקשים, וג'וק בעל מאה רגליים שמוקדשות לעניין יוכל לזהות לא פחות מ-2,500 מקשים.
הסרטון הבא ממחיש את הקשר בין לחיצות, אות הבדיקה (החוט שמוזז ידנית) והפלט (נוריות LED):
ומה קורה אם הג'וק בודק מקש אחד בדיוק כשהמשתמש מקיש על מקש אחר? כאן נכנס לתמונה הגורם האנושי שהזכרתי. גם אם נדמה שזו פעולה מהירה להפליא, הקשה אנושית עדיין לא מגרדת את סדרי הגודל של המעגלים האלקטרוניים. נניח שלחיצה זריזה במיוחד משאירה את המקש במצב לחוץ למשך עשרים אלפיות השניה: זה אומר שאפילו אם תידרש לג'וק אלפית שניה שלמה לבדוק כל צומת (וזה המון זמן), הוא "יתפוס" בוודאות כל לחיצה שהיא. במקלדת של מאה מקשים בדיוק יצטרך הג'וק להסתפק ב-0.2 אלפיות השניה לבדיקת כל צומת, מה שאומר שהוא יהיה חייב לפעול בקצב השעון הלא-מסחרר של 5 קילוהרץ – ואת זה אפשר היה להשיג בקלילות גם בימים שבהם חייגן הפולסים היה המילה האחרונה בטכנולוגיית התקשורת.
ואכן, המפרט הטכני של הרכיב LR40992 מראה שלושה פינים שמייצגים טורים (COL1-3) וארבעה שמייצגים שורות (ROW1-4) – סה"כ 12 צמתים, בדיוק כמספר המקשים בלוח, ובהמשך המפרט מוזכר אף מתנד פנימי בתדר של 4 קילוהרץ. כמובן, המקשים לא חייבים להיות מסודרים בצורת מלבן או שווים בגודלם: החיווט יכול להיות מעוגל ומפותל ככל שנרצה, כל עוד הצמתים נשארים מובחנים.
שיטת זיהוי המקשים הזו יעילה, פשוטה וחסכונית, והיא גם מאפשרת לזהות לחיצה של יותר ממקש אחד בו-זמנית (מה שמאפשר לנו לבצע, למשל, Ctrl+C), אבל היא לא מושלמת. כדי להבין את הבעיה, הסתכלו בשרטוט הבא:
המשתמש לוחץ על שלושה מקשים בו-זמנית (מסומנים בעיגולים ירוקים). מה קורה כשהג'וק מנסה לבדוק את המקש בפינה הימנית התחתונה? כפי שמראה הקו הצהוב בשרטוט, שלושת המקשים הלחוצים יוצרים מעין "גשר" חשמלי שמתווך בין האות הנכנס ליציאה הנבדקת, ונוצר הרושם שהמקש הפינתי לחוץ גם כן! תופעה זו נקראת "Key Ghosting", ומקלדות מסוימות מונעות אותה על ידי חסימה (בתוכנה הפנימית) של צירופי מקשים מסוימים, מה שנקרא "Jamming". מקלדות מקצועיות, כמו אלה שמשמשות גיימרים או ביישומים קריטיים, מונעות את שני המצבים ומבצעות קריאות מדויקות יותר באמצעות רכיבים אלקטרוניים נוספים ובדיקות מורכבות, מה שמעלה גם את תג המחיר.
המתעניינים בנושא מוזמנים לעקוב אחרי "פרויקט 99" בבלוג שלי, בו אני מנסה להפוך מארז ומקלדת של מחשב TI99 עתיק לצעצוע שמיש בשילוב ארדואינו. ולסיום – כרגיל – חידה: חיזרו רגע לחייגן הפולסים שהופיע בראש הכתבה. מי יכול לנחש למה בכל זאת יש מתג לצד המקשים?