המשימה: לקחת פנס חירום/אזהרה מופעל בסוללות, עם שתיים וחצי פונקציות בשליטת לחצנים, ולהפוך אותו למשהו שפועל אוטומטית ברגע שמחברים אותו למקור חשמל חיצוני.
הפנס שקיבלתי, מתוצרת חברת OSRAM, מיועד לשמש גם לתאורה וגם לבטיחות, בבית וברכב. יש לו בגב מגנט שמאפשר להצמיד אותו לדלת האוטו, למקרר או למשטחים מתכתיים אחרים, ושני לחצנים מקדימה. אחד מהלחצנים מדליק/מכבה רביעייה של לדים לבנים חזקים במרכז, והשני שולט בטבעת היקפית של לדים כתומים: לחיצה אחת גורמת לאפקט "אור מסתובב", לחיצה נוספת גורמת לכולם להאיר ביחד, ולחיצה שלישית מכבה אותם. כל זה מקבל חשמל משלוש סוללות AAA בטור (4.5 וולט).
התבקשתי "לפרוץ" את הפנס ולשנות אותו כך שיתחבר לחשמל מבחוץ (נגיד ספק כוח), וכל עוד הוא מקבל חשמל, שיפעיל גם את הלדים הלבנים וגם את אפקט האורות הכתומים המסתובבים. ניתן להגיע לקומבינציה הזו בקלות עם הלחצנים המקוריים, כך שהשינוי לא אמור להיות מסובך במיוחד – רק להבין איך המעגל קורא את הלחצנים ולחקות לחיצה אחת על כל אחד. שחררתי את הברגים הגדולים בגב הפנס והסתכלתי פנימה.
לפני שהמשכתי בפירוק, הוצאתי את הסוללות וחיברתי ספק כוח שולחני למגעים הנכונים, כדי לוודא שהעסק יכול לעבוד ב-5V וכדי לקבל הערכה גסה של צריכת הזרם שלו. על האריזה היה כתוב שלפנס יש הספק של חצי וואט, אך הלדים הלבנים לבדם צרכו כ-330mA, וכשמכפילים במתח מקבלים הרבה יותר מחצי וואט. שיהיה. כשרק הלדים הכתומים פעילים והם "מסתובבים" הצריכה היא 260mA, וכשכולם דולקים ביחד כ-320mA. לבן פעיל + כתום מסתובב לקחו 560mA. שחררתי עוד כמה ברגים פנימיים קטנים ושלפתי את ה-PCB החוצה במלוא הדרו:
אם כן, יש מיקרו-בקר אנונימי אחד ששולט בכל הפונקציות, עם קו קלט נפרד לכל לחצן, ופלט לשבעה טרנזיסטורים נפרדים: שישה לחיבור/ניתוק של כל זוג לדים כתומים מהאדמה (מסתבר שאפקט הסיבוב מתבצע עם זוגות לדים, לא אחד-אחד), ואחד לחיבור/ניתוק הלדים הלבנים מהאדמה. הנגדים כאן הם בין המיקרו-בקר לטרנזיסטורים, או נגדי 0 לגישור מעל פסי נחושת כי זה לוח חד-שכבתי. ההגבלה של הזרם מתבצעת למעשה על ידי נגד through-hole יחיד בצד השני. הגודל שלו מצביע על הספק של חצי וואט והוא מתחמם מאוד בזמן הפעולה – לא מספיק לכוויה מיידית אבל כן מספיק כדי לדאוג לאורך החיים של הפנס. [עריכה: מסתבר שיש עוד נגד אחד, 3 אוהם, שמגביל עוד קצת את הזרם ללדים הלבנים.]
כיוון שיש כאן מיקרו-בקר, עולה השאלה מתי הוא מתחיל לקרוא את מצב הלחצנים. כל עוד הפנס עם סוללות זו שאלה מיותרת – יש חשמל במערכת והמיקרו-בקר רק יושב ומחכה לפקודה. אבל אם החשמל יכול להתנתק, ואז לחזור, כמה זמן ייקח עד שהמיקרו-בקר יתאפס על עצמו? יש לזה חשיבות רבה מבחינת מורכבות השיפצור, ולמזלי הבדיקה פשוטה: החזרתי את הסוללות, תוך כדי שאני לוחץ על כפתור הלדים הלבנים. הם נדלקו. חזרתי על הניסוי עם לחצן הכתומים. נדלקו והסתובבו. מעולה! אם כך, כל מה שצריך לעשות זה להלחים חוטים עבור החשמל החיצוני, לסלק את שני הלחצנים וליצור קֶצֶר איפה שהם היו.
עשיתי את זה, ואז התגלתה הבעיה. כשכל לחצן היה לחוץ בנפרד, הפונקציה שלו אכן פעלה מיד עם החיבור לחשמל. אבל כששניהם ביחד מקוצרים לאדמה, רק הלדים הכתומים נדלקים! כאילו המיקרו-בקר מתחיל לבדוק את שתי הכניסות שלו, מוצא אחת ש"לחוצה" – ומיד מבצע את הפעולה הרלוונטית לה ומחכה לשינוי הבא, בלי לבדוק את המצב ההתחלתי של הכניסה השנייה. לכן, אם אני רוצה שגם הלבנים יידלקו אוטומטית, אני צריך למצוא דרך לעכב את הלחיצה המדומה על הלחצן שלהם.
האם להוסיף מיקרו-בקר קטן שיעשה את זה? אולי טיימר 555 עם כל הרכיבים שצריך מסביב? עבודה מיותרת. הרי כבר יש במעגל סיגנלי "אדמה" שמגיעים בעיכוב: אלה שמדליקים זוגות לדים כתומים! כדי לוודא שהתיאוריה שלי נכונה, גישרתי עם חוט בין רגל המינוס של אחד הלדים הכתומים (מהזוג שנדלק שני בתור) לבין איפה שהיה הלחצן. זה הפעיל את הלדים הלבנים… וכיבה אותם, לחילופין. כמובן, כי זה דפוס ההדלקה והכיבוי של הלד הכתום עצמו. כשהלד מנותק מהאדמה, רגל המינוס שלו צפה, ולמיקרו-בקר יש מן הסתם נגד pull-up פנימי שגרם לו "לראות" במצב כזה מתח חיובי.
אז איך להשאיר את הסיגנל הזה נמוך מספיק זמן, עד הסיבוב הבא? המממ… קבל? הוא ייפרק מיד דרך הטרנזיסטור כשיהיה חיבור לאדמה, ולעומת זאת כשהלד ינותק מהאדמה, ייקח לקבל זמן רב להיטען דרך ה-pull-up החלש, והמתח יישאר מספיק נמוך למשך מספיק זמן. ניסיתי עם קבל אלקטרוליטי 10uF וזה עבד בדיוק כמו שרציתי. עם החיבור לחשמל האורות הכתומים התחילו להסתובב, ושבריר שנייה לאחר מכן האור הלבן נדלק ונשאר קבוע. ניצחון!
שמח וטוב לב סימנתי "וי" על המשימה והתחלתי להבריג בחזרה את העסק, כשפתאום המוח שלי שם ברקס עצבני. מה לעזאזל קרה פה? איך זה יכול להיות? הרי אם הקבל נפרק לגמרי והמתח שלו הוא אפס, אז ברגע שהאדמה ה"רשמית" מתנתקת, הלד הכתום (שמחובר תמיד לצד הפלוס) אמור להמשיך לפעול ולמלא את הקבל, וזה יקרה כמעט מיידית. איך ייתכן שהמתח נשאר נמוך מספיק זמן כדי לשטות במיקרו-בקר?
חשבתי על זה ונדמה היה לי שמצאתי את התשובה, אך כיוון שהאינטואיציה שלי בתחום האנלוג הוכיחה לפני רגע שהיא לא משהו, בניתי מעגל קטן על מטריצה והסתכלתי עליו עם סקופ כדי לבדוק את ההשערה. ככה נראה המתח על הקבל כשניתקתי את האדמה, ללא נגד pull-up:
זו עלייה מהירה, אבל שימו לב שהיא מגיעה רק עד 3.45V, ואילו המעגל כולו הוא כאמור 5V. ההפרש הוא המתח שנופל על הלד עצמו. כשנוסיף למעגל את ה-pull-up (שמתי ערך סביר של 33K) ל-5V, זה הגרף שמתקבל:
כן, הלד ממלא את הקבל עד למתח שהוא יכול, כמו קודם, ואז ה-pull-up (שהשפעתו עד כה הייתה זניחה) משלים לאט לאט את הפער לכיוון 5V. בלי כוונה, בפוּקס אפשר לומר, יצא ש-3.45V זה עדיין מתחת לסף ה-HIGH של המיקרו-בקר, ועד שה-pull-up מטעין את הקבל לסף הזה מגיע הסיבוב הבא ומחזיר הכול לאפס. אוף, זה היה קרוב!
האם יש פתרון אחר, "נכון" יותר, שיעכב את סיגנל האדמה לפין הקלט של המיקרו-בקר ואז ישאיר אותו קבוע, בעזרת רכיב זול ופשוט או שניים, בלי להסתבך? אפשר, למשל, לשים דיודה בין הקבל לבין רגל המינוס של הלד, כך שהקבל יוכל רק להתרוקן לשם, לא להתמלא משם; אבל צריך להיזהר שהקבל לא יהיה ריק מלכתחילה [אבל זה נכון גם למצב הנוכחי?] אז אולי להתחבר לאחד הלדים מהזוג האחרון בסבב, מה שייתן לקבל מספיק זמן להיטען מה-pull-up לפני הריקון הראשון. מה עוד?
תוספת מאוחרת: קורא אחד שלח לי במייל את הפתרון הנכון ביותר למצב זה, והוא לקצר רק את לחצן האורות הכתומים, וליצור מסלול עוקף-טרנזיסטור לאדמה עבור הלדים הלבנים, בלי קשר ללחצן שלהם. זו הלחמה פחות נוחה במעגל הספציפי הזה, אבל כמובן שהיא בכל זאת עדיפה כי אז לא צריך אפילו קבל. פתחתי את הפנס שוב וביצעתי עוד כמה מדידות, אך בלי לנתק רכיבים במעגל המקורי ולבחון אותם בנפרד יהיה לי קשה מאוד להבין את התוצאות.