ילדים לומדים מהר. אחרי שהכנתי את חיישן הרברס למשאית הצעצוע, הרעיון של תוספות אלקטרוניות תוצרת בית לצעצועים הפך מבחינתם למובן מאליו – וכעת התבקשתי להוסיף אורות מהבהבים לאחת מהכבאיות הרבות שבאוסף.
התגובה הנכונה היא אולי "תעשו את זה בעצמכם", אך מכיוון שמעורבות בעניין הלחמות, וממילא רציתי לעשות משהו ראשוני עם מיקרו-בקר PIC, ניצלתי את ההזדמנות – והרי לפניכם התהליך והתוצאות.
בעבר אמרתי שלוחות תואמי ארדואינו הם טובים פחות או יותר כמו המקוריים. לאחרונה, ההמלצה הזו מתבררת כיותר ויותר בעייתית. זה התחיל עם חיקויי הנאנו מ-buyincoins.com שמייצב המתח שלהם נשרף לכמה חבר'ה, המשיך עם הארדואינו Uno הזול-עד-כדי-חשד שכלל, כך הסתבר, מיקרו-בקר מדגם ATmega8 במקום ATmega328, ועכשיו יש לנו "תכשיט" חדש – לוח Pro Mini זול מאד שאצל חלק מהאנשים פשוט לא עובד. את הדגם הזה קל לזהות (ראו בתמונה), וכשראיתי לוח חשוד באיביי ב-2.5 דולר בלבד החלטתי להסתכן ולקנות אותו. אם הוא יעבוד, הרווחתי; אם לא, יהיה לי אתגר לנסות להבין מה לא בסדר – וגם סביר להניח שאקבל החזר. הוא לא עבד… אז הנה לכם פתרון התעלומה.
כאשר מתכנתים מיקרו-בקרים פשוטים, שגודל זיכרון ה-RAM שלהם נמדד בקילובייטים ספורים, הקצאה דינמית (תפיסה ושחרור של קטעי זיכרון בזמן ריצה) היא טכניקה בעייתית עם תועלת מפוקפקת. בפוסט זה אסביר בהרחבה למה.
פרויקט ארדואינו שעבדתי עליו לאחרונה כלל מסך מגע קטן, וכדי שהממשק יהיה אטרקטיבי החלטתי לשלב בו לחצנים עם עיצוב גרפי. גודל של לחצן נוח לתפעול, עבור המקרה הספציפי הזה, הוא בסביבות 36×36 פיקסלים; המסך עובד בסכמת צביעה שמצריכה 2 בייטים לפיקסל, ובסך הכל צריך כעשרה לחצנים, כלומר כ-26KB. איפה ואיך מאחסנים את המידע הזה באופן שיהיה גם נוח, גם מהיר לגישה וגם חסכוני ככל האפשר?
מנסה לעשות משהו בארדואינו וזה לא הולך? יש בעיה בארדואינו או בתכנות שלו? רוצה להבין משהו ספציפי באלקטרוניקה, לאתר מידע על מיקרו-בקר או על חיישן – בקיצור, יש לך שאלה לקהילת המייקרים? הנה שישה כללים חיוניים, שיגדילו מאד את הסיכוי לקבל תשובה מועילה (וגם ימנעו אי-הבנות, בזבוז זמן ועצבים). להמשיך לקרוא איך לשאול שאלות←
ה-Serial Monitor של סביבת הפיתוח של הארדואינו נועד לתת למפתחים כלי נוח ופשוט לתקשורת דו-סטרית עם המיקרו-בקר. כל עוד מדובר בפלט שמגיע מלוח הארדואינו, באמצעות פקודות כמו Serial.println, המוניטור ממלא את תפקידו היטב. הבעיות מתחילות כשהמשתמש מנסה לשלוח לארדואינו מידע מורכב שכולל שני תווים ומעלה. הדוגמה הקלאסית לכך היא מספר שיש בו יותר מספרה אחת, והנושא עולה לעתים מספיק קרובות כדי שאקדיש לו פוסט אז איך עושים את זה?
אנחנו ממשיכים בסקירה של מנגנון ה-Watchdog הרב-שימושי של הטייני, והפעם אסביר איך לכבות אותו, איך לגלות אם הוא פעל – וגם איך ולמה להשתמש בפונקציונליות הפסיקה (interrupt) המובנית שלו.
בפוסט זה נתחיל לדבר על מנגנון קטן ומרתק בתוך הטייני, שנקרא Watchdog ("כלב שמירה"), ושלמען הקיצור נקרא לו פשוט WD. ה-WD כולל טיימר עצמאי שמוקדש רק לו, בעל תדר קבוע של כ-128KHz, והוא מהווה את קו ההגנה האחרון של מערכת מבוססת מיקרו-בקר לפני כשל טוטאלי. מכיוון שהתפקיד שלו חשוב כל כך, הוסיפו לו כמה שכבות של הגנה מפני שימוש רשלני, והעבודה איתו אינה מובנת מאליה. עם זאת, ברגע שמבינים איך הוא עובד, אפשר לנצל את היכולות שלו גם למשימות מעניינות ושימושיות אחרות.
בפרקים הקודמים בסדרת פוסטים זו על ה-ATtiny85 דיברנו על סביבת הפיתוח, על צורבים, הגדרות שעון, ועל גישה לקלט/פלט דיגיטלי באמצעות הרגיסטרים של הפורטים. הפעם נדבר על קלט אנלוגי, וליתר דיוק המרה של מתח חשמלי בפין קלט למספר, כפי שעושה פקודת analogRead בארדואינו. ראשית, הנה התקן שבניתי שמבוסס על פעולה זו ממש: הוא קורא את המתח שנוצר כתוצאה מסיבובי המדחף, וממיר את התוצאה למהירות העדכון של תצוגת לדים:
בשקט בשקט יצאה לאוויר העולם גרסה 1.2 הרשמית של FPC/Lazarus, סביבת הפיתוח בקוד פתוח לשפת Object Pascal. נכון להיום, זו האופציה המודרנית היחידה עבור מי שרוצה לתכנת בשפה זו, ולא מוכן למכור כליה בשביל לקנות גרסה מלאה של Delphi. יש בגרסה הזו גם באג קטן ומעצבן מאד, אבל…