ארכיון הקטגוריה: תוכנה

אנרגיות חיוביות

בתכנון של מערכות Embedded אנחנו עובדים תמיד במסגרת אילוצי משאבים. לפעמים האילוצים האלה מכתיבים את הכדאיות של צורות מימוש שונות – והאופן שבו זה קורה לא תמיד מובן מאליו . בפוסט זה אציג חישובים שערכתי כדי לבדוק, על הנייר, את צריכת החשמל של שתי חלופות במערכת שבה הפרמטר הזה חשוב במיוחד.

להמשיך לקרוא אנרגיות חיוביות

המחיר של הנקודה

כידוע, שימוש במשתנים בעלי נקודה עשרונית (floating-point) אינו מומלץ במיקרו-בקרים טיפוסיים, מכיוון שכל פעולה שנעשית איתם גוזלת זמן רב בהרבה מפעולה מקבילה על מספרים שלמים (integer) . מה שקצת פחות ידוע הוא שיש לעבודה איתם גם מחיר כבד בדרישות הזיכרון. הנה דוגמה מעשית קטנה.

קוד ב-Atmel Studio
קוד ב-Atmel Studio (סתם בשביל להוסיף קצת צבע לפוסט – אל תנסו לקרוא את זה…)

להמשיך לקרוא המחיר של הנקודה

הלו אסתי #3: צלילי המוזיקה

כשהתחלתי לעיין ב-Datasheet של המיקרו-בקר STM8S103F3P6, הבחנתי במקרה שפין PD4 נקרא גם BEEP. בירור נוסף העלה שהמיקרו-בקר אכן מכיל מנגנון מובנה להשמעת צלילים בסיסיים בעזרת מספר הגדרות פשוטות, ובפוסט זה נראה כיצד מבצעים זאת בפועל. לפני הפירוט, הנה התוצאה הסופית:


להמשיך לקרוא הלו אסתי #3: צלילי המוזיקה

סיפורי אופטימיזציה: אקראיות זולה

לפני שנתיים ומשהו הצגתי פתרון ליצירת רקע גרפי לתצוגה, כאשר אין למיקרו-בקר עצמו מספיק זיכרון כדי לאחסן רקע כזה. הפתרון שלי היה ליצור את הרקע בזמן אמת על בסיס שרשרת ניתנת-לשחזור של מספרים אקראיים. זה עבד יפה, אך דרש הרבה משאבי עיבוד. ייתכן שהפתרון המהיר, החסכוני והחכם מכולם מסתתר דווקא בקוד של משחק וידאו בן שלושים ושלוש שנים!

צילום מסך מתוך Yar's Revenge, באמולטור Atari 2600 ל-PC
צילום מסך מתוך Yar's Revenge, באמולטור Atari 2600 ל-PC

להמשיך לקרוא סיפורי אופטימיזציה: אקראיות זולה

הלו אסתי #1: בלינק Reloaded

בפוסט האחרון בסדרה התבלבלתי בכותרת, ונתתי לו את המספר 2 אף על פי שהקודם היה 0. כדי לתקן את השיבוש וגם כדי לעשות קצת סדר בעניינים, הנה פוסט מס' 1 – בו אציג בצורה מסודרת סביבת פיתוח חלופית למיקרו-בקרים ממשפחת STM8, ואת תהליך העבודה המפורט ליצירת פרויקט Blink. אם אתם רוצים להתנסות עם המיקרו-בקרים האלה, זה בהחלט המקום להתחיל!

להמשיך לקרוא הלו אסתי #1: בלינק Reloaded

הלו אסתי #2: הבלינק הקשה מכולם

בפרק הקודם התלוננתי על חוסר נוחות בהתקנת שרשרת הכלים עבור לוחות STM8S הזולים שמצאתי באיביי (מאז השגתי, אגב, מספר לוחות זולים עוד יותר עם מיקרו-בקר מדגם STM8S103F3P6, שיש לו יותר EEPROM). אז מה אתם חושבים, העניינים נעשו פשוטים יותר כשניגשתי לכתוב ולהעלות את קוד ה-Blink?

בלינק עם STM8S
בלינק עם STM8S

להמשיך לקרוא הלו אסתי #2: הבלינק הקשה מכולם

המירוץ נגד הקרניים: ללמוד מזקני השבט

ככל שמיקרו-בקרים ולוחות פיתוח הולכים ונעשים זולים וחזקים יותר, כך גוברת הנטיה – גם ברמת החובבים וגם מעבר לה – להתמודד עם אתגרי פיתוח שונים, אפילו בסיסיים, על ידי הקצאה של עוד ועוד כוח מיחשוב גולמי. לפעמים זה פתרון הגיוני ונוח, במיוחד אם הדרישות מהמערכת בכללותה הן צנועות יחסית; אבל אם אנחנו רוצים ליצור משהו מדהים באמת, מוטב ללמוד מהמאסטרים של הדור הקודם – למשל, האנשים שהפכו מערכת עם מעבד עלוב של 1.2MHz ו-128 בייטים בלבד של RAM לאחת מקונסולות המשחקים הביתיות המצליחות בהיסטוריה. להמשיך לקרוא המירוץ נגד הקרניים: ללמוד מזקני השבט

Debounce, לא מה שחשבתם

אם הגעתם לעולם האלקטרוניקה דרך ארדואינו, ויצא לכם לבנות מעגל עם לחצן, סביר להניח שמימשתם (או העתקתם) את שיטת ה-debounce שמוצגת באתר הרשמי: מסתכלים על הקלט מהלחצן, ואם הוא שונה ממה שהיה קודם, מחכים כמה אלפיות השניה ואז בודקים שוב כדי לוודא שמדובר בלחיצה (או שחרור) אמתית. סביר להניח גם שזה עבד בסופו של דבר. אבל הנה שאלה שאולי לא חשבתם עליה: כמה פעמים, אם בכלל, קרה שבדיקת הווידוא הזו נכשלה?

להמשיך לקרוא Debounce, לא מה שחשבתם

PIC בהפתעה #3: איזה מתח

כאשר אנו בונים מערכת שניזונה ישירות מסוללה, כדאי מאד לדעת מה המתח שהמיקרו-בקר מקבל ממנה בפועל. כך נוכל להזהיר את המשתמש כשהסוללה עומדת להתרוקן, ולהתאים את אופן הפעולה של המערכת עצמה למצב הבעייתי – למשל לכבות מערכות משנה לא חיוניות, להיכנס למצבי שינה לזמן ממושך ועוד. אבל איך מזהים את המתח?


להמשיך לקרוא PIC בהפתעה #3: איזה מתח

שידור Serial מ-ATtiny85 (ובכלל)

האובייקט Serial בארדואינו הוא כלי שימושי במיוחד לתקשורת ולדיבוג בסיסי, מכיוון שאפשר לשדר דרכו מידע ממוקד ומפורט, בפורמט נוח שאפשר גם לשמור, לעבד ולתעד במחשב. כשעוברים מארדואינו למיקרו-בקרים קטנים שאין להם חומרה מתאימה, חסרונו של ה-Serial מורגש היטב, אבל אם היישום שלנו מאפשר להקצות לעניין טיימר אחד ופין I/O אחד, אנחנו יכולים לכתוב בעצמנו פונקציות שישלחו מידע באותה שיטה בדיוק!

להמשיך לקרוא שידור Serial מ-ATtiny85 (ובכלל)