לכבוד חג המולד, PCBWay צירפו למשלוחי המעגלים המודפסים שלהם קיט מתנה להלחמה בדמותו של רודולף – אייל הצפון בעל האף האדום הבוהק, שמאיר את הדרך למזחלת של סנטה קלאוס וכל זה. הנה כמה פרטים, הבחנות ומסקנות מהקיט.
לפני שנתחיל, קצת טריוויה למי שלא מתמצא בפולקלור של חג המולד: הסיפור של רודולף הומצא כולו בשנת 1939, בספר ילדים בחרוזים שנכתב ונמכר בארצות הברית. הבגדים האדומים-לבנים של סנטה קלאוס עצמו, כך גיליתי לאחרונה, דווקא לא הומצאו על ידי המאיירים של חברת קוקה קולה בשנות העשרים של אותה מאה (כפי שאומרות השמועות), אלא על ידי קריקטוריסט עצמאי, כשלושים שנה לפני כן. אבל אנחנו סוטים מהנושא.
בכל אופן, יחד עם לוחות ה-PCB שהזמנתי מצאתי בקופסה גרב סמלי מקושט כמיטב המסורת, עט עם הלוגו של החברה, שתי מדבקות עם חיות מלוח השנה הסיני (את זה הם שלחו גם בעבר בלי קשר לחג המולד) וכרטיס תודה/ברכה עם קישור לרשומה בבלוג שלהם, שמסבירה איך להרכיב ולתכנת את רודולף. הקיט הזה הוא רעיון מבריק – מותאם בצורה מושלמת לקהל היעד של החברה ולרוח החג (בלי ליפול למלכודת הקלישאה של עץ חג מולד עם לדים) – אבל הביצוע שלו חלש להפתיע.
לגבי הלוח עצמו אין לי תלונות – מין "במבי" חביב שמוכיח שהמכונות במפעל יכולות לחתוך גם צורות קצת פחות סטנדרטיות. הרכיבים שנבחרו, לעומת זאת, תמוהים. אם הייתי צריך לתכנן קיט כזה בזול, סביר להניח שהייתי הולך על טיימר 555, ואולי אפילו מוסיף פוטנציומטר לשליטה בקצב הבהוב הלד האדום שבאף. עוד כמה אגורות היו משיגות מיקרו-בקר סיני חד פעמי שתוכנת מראש להציג מופע אורות קצת יותר מרשים. ב-PCBWay בחרו דווקא ב-ATtiny85. זה יכול היה להיות מצוין אם היו עושים את רודולף ידידותי להאקרים (למשל על ידי הכנת חיבורים להתממשקות עם כל הפינים של המיקרו-בקר), אך בפועל פרצוף-במבי הזה לא רק לא-ידידותי, הוא ממש עוין.
ראשית, המיקרו-בקר מגיע בלי תוכנה צרובה (זה לא עד כדי כך מסובך, בימינו): המשתמש אמור להעלות אליו את בעצמו הקוד שנמצא כאן. הקוד הזה, אפרופו, הוא יצור כלאיים מפלצתי. מצד אחד הוא נעזר ב-Watchdog, במצבי שינה ובמהירות שעון נמוכה יחסית (1MHz) כדי לחסוך בסוללות, ומצד שני, בזמן שהוא ער, הוא מריץ פקודות delay של ארדואינו באורך 50 ואפילו 100 מילישניות… ?!
שנית, האזכורים לארדואינו ומחבר ה-USB שמגיע עם הקיט מהווים רמז גדול מאוד לכך שמדובר במשהו דמוי Digispark, אבל זה שקר. על המיקרו-בקר אין, כאמור, שום תוכנה – ויותר מזה, ה-USB אפילו לא מתחבר לפינים ה"נכונים" שלו! כדי לתכנת אותו חייבים כלים מיוחדים, או הלחמות עדינות, או להקריב כבל USB ולעשות שמיניות באוויר עם לוח ארדואינו נוסף. הרבה יותר עבודה מההרכבה של הקיט עצמו, ועבודה מעצבנת בנוסף לכול. אלמלא היה לי במקרה "אטב כביסה" עם מגעים מתאימים, שקל (יחסית!) לחבר, יכול להיות שהייתי מוותר על הטרחה וזורק את המיקרו-בקר למגירה לשימוש עתידי אחר.
אז יכולתי לצרוב קוד, אבל לא יכולתי להביא את עצמי להשתמש בקוד הזוועתי שלהם. מה הטעם להיכנס למצב שינה של שנייה אחת, אם בשנייה הבאה המעבד מריץ במלוא הקיטור פקודות delay? הכיוון הנכון ביותר, מבחינת חיסכון בחשמל, הוא להמיר את פקודות ה-delay עצמן בפרקי זמן של שינה. מצד שני, גם לא התחשק לי במיוחד שרודולף יהבהב בדפוסים המשעממים האלה. העדפתי לד "נושם", כלומר אור מתחזק ונחלש, מה שנהוג לעשות בדרך כלל בארדואינו עם לולאות של ערכים עולים ויורדים בפקודת analogWrite.
כתבתי בזריזות קוד C ב-Atmel Studio, שעושה את זה בצורה פרימיטיבית למדי, ללא פקודות ארדואינו וללא מצבי שינה. במקום זאת, החלפתי את מקור השעון למתנד פנימי בתדר 128KHz, והגדרתי לו Prescaler של 1:4 כך שהמיקרו-בקר ירוץ למעשה ב-32KHz בלבד. בתדר כזה צריכת החשמל של המיקרו-בקר כל כך נמוכה ביחס לצריכה של הלד, שהיא מתחילה להיות זניחה מבחינת המערכת השלמה.
מעניין לציין, כאנקדוטה בקטע של אופטימיזציה, שהקוד יצא כל כך מינימליסטי ועם כל כך מעט משתנים, שהקומפיילר הצליח לשים את כל המידע הדינמי ברגיסטרים הפנויים של המיקרו-בקר, והוא מדווח על שימוש של 0% בזיכרון ה-RAM!
בקיצור, חג המולד ניצל, הילדים מבסוטים מהמתנות הלא-צפויות, ואנחנו למדנו כמה לקחים חשובים אם נרצה אי פעם להכין קיט PCB מתנה…
וידאו קטן היה מוסיף לאווירה
מה עם וידאו הדגמה ?
מה, סרטון של לד מהבהב? בטח יש לכם דברים טובים יותר לעשות עם הזמן שלכם 🙂