אחרי שהדגמנו את הפעולה התקינה של בקר המנועים, הגיע הזמן לתת לרובוט הניסיוני קצת אישיות ולהכין אותו לקראת פעולות מורכבות יותר. הדבר בוצע בשתי דרכים שיוצגו בפוסט זה: 1) הכנת מערכת תאורה, ו-2) מעבר ללוח קומפקטי עם ארדואינו Pro Mini. כרגיל, נפתח בהדגמה של הרובוט המשופצר בשטח:
סיפורי אופטימיזציה: קוד קל-משקל
כשאומרים "אופטימיזציה של קוד", הכוונה בדרך כלל לשינויים שיגרמו לו לרוץ מהר יותר, אבל לפעמים המטרה היא דווקא לעשותו חסכוני יותר בזיכרון – ופה ושם משיגים את שתי המטרות גם יחד. זהו המקרה של מפענח קוד המורס שבניתי. אז קודם כל, הנה המערכת בפעולה:
מדור פרסומי: 4Probot – פרק ראשון
ברוכים הבאים לסדרת פוסטים חדשה: 4Probot, רובוט מבוסס ארדואינו שהוא ניסוי מתגלגל – תרתי משמע! המטרה כאן אינה להציג בניה של רובוט לפי תוכנית קבועה מראש, אלא לחקור ולהתנסות בטכניקות ובטכנולוגיות שונות שקשורות לעולם הרובוטים (ובמיוחד אלה הקטנים שנוסעים עצמאית על רצפת הבית…)
נסיעת המבחן הראשונה של 4Probot: בדיקת בקר המנועים
גילוי נאות: סדרת הפוסטים 4Probot הינה שיתוף פעולה עם אתר 4project.co.il – חנות אינטרנטית ישראלית לרכיבים, חלקים ומוצרים לתחומי המייקינג השונים. חלק מרכיבי הרובוט ניתנים לי על ידי אתר 4Project תמורת סקירה הוגנת וקישורים בבלוג, ובזה מסתכמת ההתקשרות המסחרית ביני לבין האתר.
סיפורי אופטימיזציה: 5-6-5
מזה זמן רב אני מנהל מלחמת חורמה עקרונית נגד האיטיות של מסך TFT-LCD קטן ושל הספריות שנכתבו עבורו על ידי Adafruit. כבר הצגתי בעבר את אופטימיזציית ציור הקווים הקצרים, אך כידוע, עם האוכל בא התיאבון: גם האתגר עצמו מרתק, וגם יש לעיסוק הזה משמעות אמתית עבור פרויקט ספציפי שאני עובד עליו (וכנראה גם עבור פרויקטים עתידיים). אז אחרי הפסקה ממושכת אני חוזר אל המסך, והפעם אציג אופטימיזציה של הפעולה הבסיסית ביותר – ציור פיקסל יחיד.
הלו טייני #2: הגדרת שעון
כל מה שקורה בתוך המיקרו-בקר תלוי בשעון. פעימה של השעון היא עבורו היחידה האטומית, המינימלית, של זמן: זהו הרגע שבו משהו קורה, ובין שתי פעימות עוקבות לא קורה בעצם שום דבר – בין אם הרווח ביניהן הוא ששים ושתיים מיליארדיות השניה או שנה שלמה.
כמובן, הפעולות שמתבצעות במיקרו-בקר תלויות בתנועה של אלקטרונים בתוך החומרה, והתנועה הזו לוקחת זמן "ממשי" וגם יוצרת חום – שני אלמנטים שמציבים גבול עליון למהירות הפעולה. אף על פי כן, השעון במיקרו-בקרים רבים הוא אלמנט גמיש להפליא, הרבה יותר ממה שניתן לחשוב בעקבות עבודה בסיסית עם ארדואינו למשל. בפוסט זה אציג אפשרויות שעון שונות של ה-ATtiny85, מה הן נותנות לנו ואיך ניגשים אליהן. כמעט כל המידע, אגב, רלוונטי גם למיקרו-בקרים אחרים בארכיטקטורת AVR.
הלו טייני #1.5: צורב חלופי
פוסט זה לא היה חלק מהתוכנית המקורית של סדרת "הלו טייני" (מכאן המספור 1.5), אך הוא עשוי לעניין את אלה מביניכם שנרתעים מהמחיר הגבוה של צורב AVRISP MKII מקורי. אם לא אכפת לכם להשקיע עוד קצת עבודה בהכנות מקדימות ובתהליך הצריבה, תוכלו לחסוך שלושים ומשהו דולרים ולהעלות תוכנות ישירות למיקרו-בקר באמצעות צורב סיני זול.
הכלים
הצורב איתו נעבוד כאן נקרא USBasp. יש הרבה דגמים שלו באיביי ובאתרי הגאדג'טים הסיניים, במחירים של 3-10 דולר ליחידה – את שלי קניתי כאן. כצפוי, הוא מוגבל יחסית לצורב הרשמי ופחות משוכלל ממנו, אך לתחילת הדרך הוא יספיק בהחלט. אצלי במחשב (Windows 7) הוא זוהה בלי שהייתי צריך להתקין דרייברים כלשהם ידנית. תוספת מאוחרת: ב-Windows 8, ייתכן שתצטרכו לעשות מה שכתוב כאן.
הלו טייני #1: בלינק
בפוסט ארוך ועתיר תמונות זה אראה, צעד אחרי צעד, איך לגרום ל-ATtiny85 להדליק ולכבות לד פעם בשניה (פרויקט "Blink" המוכר) בעזרת הכלים שהצגתי בקצרה בפוסט הקודם – סביבת הפיתוח Atmel Studio 6.1 וצורב AVRISP MKII. אם אין לכם ניסיון קודם איתם, מומלץ לקרוא בתשומת לב עד הסוף – יש שם משהו שיחסוך לכם שעות של תסכול. וכרגיל, אני בעצמי לא מומחה לתכנות וצריבה של מיקרו-בקרים, ואת רוב הדברים שמופיעים כאן למדתי מבלוגים אחרים ומניסוי וטעיה – אז אם יש משהו שפספסתי או יכולתי לעשות יותר טוב, אשמח לשמוע בתגובות.
בשביל הפרויקט הזה נצטרך, מלבד המיקרו-בקר, גם מטריצה, נגד בערך של 200-300 אום, נורית LED רגילה, מקור כוח של 5V (כגון לוח ארדואינו או כבל USB שנחתך והותאם למשימה), שישה חוטי גישור (Jumper wires) צבעוניים, ולמי שרוצה, גם קבל בערך של מיקרו-פאראדים ספורים.
הלו טייני #0: מבוא
לאחרונה חשבתי לא מעט על הכיוון אליו אני רוצה להתקדם בעולם המייקינג בכלל והמיקרו-בקרים בפרט. הטווח והמגוון של הדברים שאפשר ללמוד הם פשוט מטורפים – החל ממסתורי הנוסחאות של האלקטרוניקה הבסיסית ועד לטכניקות מתקדמות בלינוקס ובשפת התכנות פייתון עבור מחשבים ממוזערים – ואין שום אפשרות ללמוד את כולם ביחד כפי שהייתי רוצה. זה כיף להתנסות ולטעום קצת מכל דבר, וכמובן שאמשיך לעשות את זה, אך במקביל, מכיוון שאני רוצה להכיר דברים גם לעומק ולא רק לרוחב, הגיע הזמן להחליט על מנה עיקרית.
אתגר התכנות 5: הרפתקת טקסט!
אתה נמצא בתוך חדר קטן ללא חלונות, עם רצפת בטון. מקור האור היחיד הוא נורה חלשה שמשתלשלת מהתקרה. על הרצפה אתה רואה פתק מגולגל. מולך דלת פלדה נעולה במנעול חלוד. מה ברצונך לעשות כעת?
אם הסגנון הזה נראה לכם מוכר, זה לא במקרה. התקופה שבין סוף שנות השבעים לאמצע שנות השמונים, פלוס מינוס, היתה תור הזהב של "הרפתקאות הטקסט" (Text Adventures) – משחקי קווסט מורכבים להפליא ועתירי דמיון, שהתנהלו במלואם באמצעות תיאורים כתובים ופקודות כתובות של המשתמש. משחקים אלה הותירו רושם כה עז, שגם אם נולדתם מאוחר מכדי להתנסות בז'אנר בעצמכם, רוב הסיכויים שלפחות שמעתם עליו.
במשחקים אלה, השחקן ניווט למעשה במעין מפה – של מערות מסתעפות, של חדרים עם דלתות ביניהם, או של אזורים שונים שמחוברים בכבישים ודרכים אחרות. לעתים ניתן היה לעלות ולרדת בין קומות או למחילות תת-קרקעיות, ובמקרים מסוימים אפילו להיכנס לטלפורטר ולדלג כהרף עין על עשרות צעדים "רגילים". בנוסף, חפצים שונים היו פזורים על פני מפת המשחק, והשחקן צריך היה למצוא ולקחת אותם כדי שיוכל להמשיך ולהתקדם בשלב מאוחר יותר (לדוגמה, מפתחות למנעולים).
חידת התכנות שלנו להפעם, אם עוד לא ניחשתם, היא כזו: איך בונים מנוע יעיל למשחק כזה? להלן כל פרטי האתגר, וכן הפתרון לחידת התכנות השניה.
אתגר התכנות 4: מיון ערמה
חידת התכנות הרביעית שלי היא פחות חידה ויותר מטלת תכנות שחורה ומשעממת: פשוט לממש בקוד "מיון ערמה". למה? כי נתקלתי בו עכשיו בספר שאני קורא, ומכיוון שלא התעמקתי בו בעבר, ההיגיון שמאחוריו לא היה מובן מאליו כמו במיונים הבסיסיים יותר. כדי להפוך את המשימה לקצת יותר מאתגרת (למשל, אם אתם רוצים שהיא תשרוף לכם קצת זמן ביום כיפור), אשאיר לכם לגלות לבד מה זה מיון ערמה (Heapsort) ואיך הוא אמור לעבוד. בהצלחה!
ובינתיים, נעבור לפתרון חידת התכנות הראשונה: איך ממירים מייצוג רומי לעשרוני ולהיפך? זהירות, ספויילרים: אם אתם רוצים לפתור את החידה לבד, עיצרו כאן וחיזרו רק אחרי שיהיה לכם פתרון!