אתם כבר מכירים את התרגיל: מישהו קנה לוח תואם ארדואינו מהמזרח הרחוק, הלוח לא עובד כמו שצריך (איזו הפתעה, נכון?) ואני – בשביל הקהילה ובשביל האימון בדיבוג חומרה ותוכנה – מחפש מה השתבש הפעם.
סיפורנו הנוכחי מתחיל באתר DealExtreme (בקיצור DX), שהיה פעם המקום בה"א הידיעה לכאילו-דואינו זולים ומאז ירד מגדולתו. הלוח הוא תואם ארדואינו אונו בגרסה R3 (זו עם הג'וק ATmega16U2 בתפקיד מתאם ה-USB), ולא הכי זול בקטגוריה: 8 דולרים טבין ותקילין, כולל כבל USB.
התקלה והרמזים
לדברי הקונה, בחיבור למחשב עם מערכת הפעלה Windows 10, הלוח האיר ב-LED שמציין את אספקת החשמל וגם הבהב ב-LED של פין 13, אבל זה הכול: המחשב לא זיהה כלל שמחובר אליו משהו. סימנים כאלה מעידים שהבעיה היא איפשהו בקשר בין המחשב ל-ATmega16U2. מכיוון שמדובר ב-R3 וב-Win10, סביר להניח שזו לא בעיה של דרייבר במחשב, כפי שקרה לעתים קרובות עם מערכות הפעלה ישנות ועם חיקויי ארדואינו בעלי ג'וק תקשורת אחר. לפעמים תקלה שכזו יכולה להיגרם בגלל כבל USB עלוב במיוחד, אבל הקונה העיד שניסה כבל USB אחר, ללא הועיל.
הרמז המשמעותי ביותר מבחינתי היה דיווח נוסף, לפיו המחשב זיהה לרגע את הלוח אחרי ביצוע Reset בעזרת חוטים, אבל "איבד" אותו שוב מאוחר יותר. אמנם לא נראה הגיוני שיש קשר בין Reset דווקא לבין החיבור, אבל עצם זה שהחיבור הצליח פעם אחת מראה שהבעיה היא ב-99.99% לא בתוכנה או בקושחה, אלא חוסר יציבות כלשהו בחומרה – מכני או אחר, למשל הלחמה רופפת, קצר כמעט-מיקרוסקופי בין פינים וכדומה.
בדיקות ראשוניות
כשהלוח הגיע אליי, דבר ראשון ביצעתי סריקה ויזואלית (גם בעזרת זכוכית מגדלת) של הרכיבים וההלחמות. לא מצאתי שום דבר חשוד, ולמעשה איכות ההלחמה נראתה גבוהה. חיברתי את הלוח למחשב שלי (Win10) עם כבל USB משלי שידעתי שהוא תקין, וכמו אצל הקונה, המחשב לא זיהה שום דבר.
ניסיתי להתחבר בעזרת צורב מקצועי ל-ATmega16U2 (דרך חיבור ה-ICSP – שישיית הפינים שליד הג'וק). הצורב "ראה" שהג'וק מקבל אספקת מתח תקינה, אבל לא הצליח לזהות את הג'וק עצמו. דבר כזה קורה בדרך כלל כשהג'וק הוא לא מהדגם הצפוי, או כשהוא שרוף, או כשאות השעון שלו מגיע ממקור איטי מדי ביחס לשעון שהוגדר עבור הצורב. אף אחת מהאפשרויות האלה לא נראתה הגיונית בהינתן שהמחשב של הקונה כן הצליח להתחבר פעם אחת.
תוך כדי הבדיקות הנ"ל הבחנתי במקרה שלחצן ה-Reset שעל הלוח לא לגמרי תקין, ומגיב ללחיצות רק כשהן חזקות מאוד ובזווית מסוימת. כששיחקתי קצת עם זה, פתאום המחשב שלי זיהה לזמן קצר את הלוח!
לקראת הפתרון
שוב, לא היה שום קשר הגיוני בין ה-Reset לבין הזיהוי, אבל כשהתעסקתי עם הלחצן לחצתי מן הסתם בלי כוונה בעוד מקומות על הלוח, וייתכן שאחד מהם הוא זה שפתר את הבעיה. התחלתי ללחוץ באופן שיטתי על אזורים שונים בלוח שעשויים להיות רלוונטיים: חיבור ה-USB, ה-ATmega16U2, הגביש שלו… ושם זה קרה. בזמן שלחצתי באצבע על הגביש, וגם שניות ספורות לאחר מכן, המחשב זיהה את הלוח בעת חיבור הכבל ואף הצלחתי לצרוב עליו Blink חדש. כעבור כעשר שניות ללא מגע יד החיבור התנתק מעצמו.
אילו הגביש היה במארז SMD הייתי מניח מיד שמדובר בכל זאת בהלחמה גרועה, ושהלחץ מהאצבע משפר זמנית את המגע הרופף בין הרכיב ללוח. אבל כאן הגביש היה דווקא THT, וההלחמות שלו היו חזקות ויציבות. אז מה קורה כאן? השפעה קיבולית כלשהי? חימום של מארז הגביש מחום הגוף שלי? או שבכלל זה קשור איכשהו לקבלים שבין הרגליים שלו לבין האדמה? החלטתי להתחיל מהניסוי הפשוט ביותר: להחליף את הגביש הקיים בגביש מהסטוק שלי ולראות מה קורה.
הבעיה נפתרה, הלוח חזר לחיים. הגביש המקורי פשוט היה דפוק.
אז מה היה לנו
זו הייתה תקלה שמעולם לא נתקלתי בה קודם, והיא לא הייתה טריוויאלית. הפתרון המהיר-יחסית שלה הגיע די במזל, וסביר להניח שמייקר בראשית דרכו לא היה מצליח לאתר את הסיבה לבעיה או לתקן אותה. הוא היה מתקין דרייברים חדשים עד מחר, מבזבז עוד כסף וזמן על לוח חדש, או זורק את כל העסק לעזאזל ועובר לתחביב אחר.
וכל זה למה? כי הסינים שמייצרים את הלוחות האלה לא שמים פס על איכות. גביש כזה בדיוק עולה באתרים רציניים כ-0.1 דולר ארה"ב ליחידה, אם קונים בכמות גדולה. באתרים הסיניים אפשר למצוא גם ב-4 סנטים ליחידה. אני מוכן להתערב שהיצרנים בחרו בגביש זול וזבלי כדי לגלח עוד 6 סנטים מסכנים מכל לוח, ואותו הדבר עם הלחצן, ואלה התוצאות. אלה יהיו גם התוצאות בפרויקטים שלכם, אם תסתמכו על רכיבים אלמוניים וזולים – ובמיוחד אם תצפו מהם לתפקד ברמה טיפה יותר גבוהה מהמינימום.
בהקשר זה אני רוצה לספר על משהו שכבר הזכרתי בדף הפייסבוק שלי: המוות המוקדם של הלחצן בו השתמשתי בפרויקט הפעמון האלחוטי. כעבור חצי שנה בלבד בשטח, וכמה מאות לחיצות בהערכה הכי נדיבה, כיפת הפלסטיק של הלחצן (שנקנה בזול באיביי) נתקעה במצב לחוץ, בצורה כזו שאפילו עם מברג לא הצלחתי לשחרר אותה. דמיינו שאתם בונים מכשיר עם לחצנים כאלה ללקוח, למשל לחדר בריחה, ואחרי חודשים ספורים הלחצנים מתחילים להתקלקל באמצע משימות. כמה בלגן ועצבים ייגרמו ללקוח ולכם!
בקיצור, אני יודע שכבר אמרתי את זה אבל הלקח צריך להיכנס לראש. המחיר הוא לא הפרמטר היחיד וגם לא הפרמטר הכי חשוב. אל תקנו זבל סיני זול, ואם קניתם אל תסתמכו עליו לשום דבר חשוב, ואם הסתמכתם אז תאכלו מה שבישלתם ואל תגידו שלא הוזהרתם…