בתכנון של מערכות Embedded אנחנו עובדים תמיד במסגרת אילוצי משאבים. לפעמים האילוצים האלה מכתיבים את הכדאיות של צורות מימוש שונות – והאופן שבו זה קורה לא תמיד מובן מאליו . בפוסט זה אציג חישובים שערכתי כדי לבדוק, על הנייר, את צריכת החשמל של שתי חלופות במערכת שבה הפרמטר הזה חשוב במיוחד.
ארכיון הקטגוריה: תוכנה
המחיר של הנקודה
כידוע, שימוש במשתנים בעלי נקודה עשרונית (floating-point) אינו מומלץ במיקרו-בקרים טיפוסיים, מכיוון שכל פעולה שנעשית איתם גוזלת זמן רב בהרבה מפעולה מקבילה על מספרים שלמים (integer) . מה שקצת פחות ידוע הוא שיש לעבודה איתם גם מחיר כבד בדרישות הזיכרון. הנה דוגמה מעשית קטנה.
הלו אסתי #3: צלילי המוזיקה
כשהתחלתי לעיין ב-Datasheet של המיקרו-בקר STM8S103F3P6, הבחנתי במקרה שפין PD4 נקרא גם BEEP. בירור נוסף העלה שהמיקרו-בקר אכן מכיל מנגנון מובנה להשמעת צלילים בסיסיים בעזרת מספר הגדרות פשוטות, ובפוסט זה נראה כיצד מבצעים זאת בפועל. לפני הפירוט, הנה התוצאה הסופית:
סיפורי אופטימיזציה: אקראיות זולה
לפני שנתיים ומשהו הצגתי פתרון ליצירת רקע גרפי לתצוגה, כאשר אין למיקרו-בקר עצמו מספיק זיכרון כדי לאחסן רקע כזה. הפתרון שלי היה ליצור את הרקע בזמן אמת על בסיס שרשרת ניתנת-לשחזור של מספרים אקראיים. זה עבד יפה, אך דרש הרבה משאבי עיבוד. ייתכן שהפתרון המהיר, החסכוני והחכם מכולם מסתתר דווקא בקוד של משחק וידאו בן שלושים ושלוש שנים!
הלו אסתי #1: בלינק Reloaded
בפוסט האחרון בסדרה התבלבלתי בכותרת, ונתתי לו את המספר 2 אף על פי שהקודם היה 0. כדי לתקן את השיבוש וגם כדי לעשות קצת סדר בעניינים, הנה פוסט מס' 1 – בו אציג בצורה מסודרת סביבת פיתוח חלופית למיקרו-בקרים ממשפחת STM8, ואת תהליך העבודה המפורט ליצירת פרויקט Blink. אם אתם רוצים להתנסות עם המיקרו-בקרים האלה, זה בהחלט המקום להתחיל!
הלו אסתי #2: הבלינק הקשה מכולם
בפרק הקודם התלוננתי על חוסר נוחות בהתקנת שרשרת הכלים עבור לוחות STM8S הזולים שמצאתי באיביי (מאז השגתי, אגב, מספר לוחות זולים עוד יותר עם מיקרו-בקר מדגם STM8S103F3P6, שיש לו יותר EEPROM). אז מה אתם חושבים, העניינים נעשו פשוטים יותר כשניגשתי לכתוב ולהעלות את קוד ה-Blink?
המירוץ נגד הקרניים: ללמוד מזקני השבט
ככל שמיקרו-בקרים ולוחות פיתוח הולכים ונעשים זולים וחזקים יותר, כך גוברת הנטיה – גם ברמת החובבים וגם מעבר לה – להתמודד עם אתגרי פיתוח שונים, אפילו בסיסיים, על ידי הקצאה של עוד ועוד כוח מיחשוב גולמי. לפעמים זה פתרון הגיוני ונוח, במיוחד אם הדרישות מהמערכת בכללותה הן צנועות יחסית; אבל אם אנחנו רוצים ליצור משהו מדהים באמת, מוטב ללמוד מהמאסטרים של הדור הקודם – למשל, האנשים שהפכו מערכת עם מעבד עלוב של 1.2MHz ו-128 בייטים בלבד של RAM לאחת מקונסולות המשחקים הביתיות המצליחות בהיסטוריה. להמשיך לקרוא המירוץ נגד הקרניים: ללמוד מזקני השבט
Debounce, לא מה שחשבתם
אם הגעתם לעולם האלקטרוניקה דרך ארדואינו, ויצא לכם לבנות מעגל עם לחצן, סביר להניח שמימשתם (או העתקתם) את שיטת ה-debounce שמוצגת באתר הרשמי: מסתכלים על הקלט מהלחצן, ואם הוא שונה ממה שהיה קודם, מחכים כמה אלפיות השניה ואז בודקים שוב כדי לוודא שמדובר בלחיצה (או שחרור) אמתית. סביר להניח גם שזה עבד בסופו של דבר. אבל הנה שאלה שאולי לא חשבתם עליה: כמה פעמים, אם בכלל, קרה שבדיקת הווידוא הזו נכשלה?
PIC בהפתעה #3: איזה מתח
כאשר אנו בונים מערכת שניזונה ישירות מסוללה, כדאי מאד לדעת מה המתח שהמיקרו-בקר מקבל ממנה בפועל. כך נוכל להזהיר את המשתמש כשהסוללה עומדת להתרוקן, ולהתאים את אופן הפעולה של המערכת עצמה למצב הבעייתי – למשל לכבות מערכות משנה לא חיוניות, להיכנס למצבי שינה לזמן ממושך ועוד. אבל איך מזהים את המתח?
שידור Serial מ-ATtiny85 (ובכלל)
האובייקט Serial בארדואינו הוא כלי שימושי במיוחד לתקשורת ולדיבוג בסיסי, מכיוון שאפשר לשדר דרכו מידע ממוקד ומפורט, בפורמט נוח שאפשר גם לשמור, לעבד ולתעד במחשב. כשעוברים מארדואינו למיקרו-בקרים קטנים שאין להם חומרה מתאימה, חסרונו של ה-Serial מורגש היטב, אבל אם היישום שלנו מאפשר להקצות לעניין טיימר אחד ופין I/O אחד, אנחנו יכולים לכתוב בעצמנו פונקציות שישלחו מידע באותה שיטה בדיוק!