הלו טייני #1: בלינק

בפוסט ארוך ועתיר תמונות זה אראה, צעד אחרי צעד, איך לגרום ל-ATtiny85 להדליק ולכבות לד פעם בשניה (פרויקט "Blink" המוכר) בעזרת הכלים שהצגתי בקצרה בפוסט הקודם – סביבת הפיתוח Atmel Studio 6.1 וצורב AVRISP MKII. אם אין לכם ניסיון קודם איתם, מומלץ לקרוא בתשומת לב עד הסוף – יש שם משהו שיחסוך לכם שעות של תסכול. וכרגיל, אני בעצמי לא מומחה לתכנות וצריבה של מיקרו-בקרים, ואת רוב הדברים שמופיעים כאן למדתי מבלוגים אחרים ומניסוי וטעיה – אז אם יש משהו שפספסתי או יכולתי לעשות יותר טוב, אשמח לשמוע בתגובות.

בשביל הפרויקט הזה נצטרך, מלבד המיקרו-בקר, גם מטריצה, נגד בערך של 200-300 אום, נורית LED רגילה, מקור כוח של 5V (כגון לוח ארדואינו או כבל USB שנחתך והותאם למשימה), שישה חוטי גישור (Jumper wires) צבעוניים, ולמי שרוצה, גם קבל בערך של מיקרו-פאראדים ספורים.

צורב AVRISP MKII של Atmel
צורב AVRISP MKII של Atmel

שלב ראשון: היכרות עם החיווט של חיבור ISP

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

ISPConnector
חיבור ISP

שימו לב לסימון המשולש העדין למעלה, בצמוד לקצה החוט הקרוב ביותר למצלמה. הוא מצביע על פין מס' 1 בחיבור. פין מס' 2 הוא זה שמתחתיו, והבאים ממשיכים לפי אותה תבנית:

135
246

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

1 – MISO, אחד משלושת הקווים הבסיסיים של ממשק SPI. בחרתי בשבילו את הצבע החום, כמו זה של ממרח המיסו היפני (לפחות לפי גוגל תמונות, כי אני לא מתמחה באוכל יפני…).

2 – Vcc, מתח. המתח מקבל כמובן את החוט האדום, אך שימו לב – זהו אינו מתח להזנה של המיקרו-בקר, אלא חוט שמיועד לבדיקה של המתח שהמיקרו-בקר מקבל בלי קשר לצורב, מהמערכת שבה הוא נמצא!

3 – SCLK, אות השעון של ממשק SPI. הוא מקבל חוט כחול בלי סיבה טובה. אולי כי "כחול" ו-Clock מתחילים באותו עיצור?

4 – MOSI, הקו השלישי והאחרון של ה-SPI. הצבע שלו ירוק, על סמך האסוציאציה הצלילית עם Mossy באנגלית – טחוב, וטחב כידוע הוא בדרך כלל ירוק.

5 – RESET, אתחול, עם חוט לבן – המיקרו-בקר מאותחל ומתחיל מאפס, כמו דף לבן…

6 – GND, אדמה שמסומנת כמו תמיד בשחור.

זהו, החוטים מחוברים? בואו נעבור למחשב.

שלב שני: יצירת פרויקט ב-Atmel Studio

AS_0_Splash

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

AS_1_StartPage
דף ההתחלה של Atmel Studio 6.1

מכיוון שאנחנו יוצרים פרויקט חדש מאפס, נבחר בתפריט הראשי File->New->Project ונקבל את הטופס הזה:

טופס הגדרת פרויקט חדש
טופס הגדרת פרויקט חדש

מכיוון שאת הקוד לתוכנת הבלינק נכתוב בשפת C, נבחר מבין האופציות שבמרכז את הראשונה (פרויקט ב-C, בניגוד לפרויקט בשפת ++C או לספריה). בנוסף, נבחר למטה שם לפרויקט ותיקיה שבה הוא יישמר. השדה Solution name יתעדכן אוטומטית בהתאם ל-Name, אז לא חייבים להתעסק איתו. נלחץ על OK ונקבל טופס חדש לבחירת ה-Device, הלא הוא המיקרו-בקר. הקפידו לבחור את הדגם המדויק של המיקרו-בקר שלכם, ואל תדאגו – אם בעתיד תרצו להעביר את הפרויקט למיקרו-בקר אחר של Atmel, אפשר לשנות את הבחירה באמצעות לחיצה על התפריט Project->Properties, ובחלון שייפתח, בחירה בלשונית Device ולחיצה על הכפתור Change Device.

חלון לבחירת מיקרו-בקר
חלון לבחירת מיקרו-בקר

בשלב זה, הצורב והמיקרו-בקר לא צריכים להיות מחוברים, זוהי רק הגדרה. נלחץ על OK ונוחזר לטופס הראשי של התוכנה, שאוכלס עבורנו אוטומטית בשלד של תוכנית:

תבנית קוד של ברירת מחדל
תבנית קוד של ברירת מחדל

נישאר בינתיים עם הקוד הזה, עד שנטפל בחיבורים הפיזיים ונוודא שהם תקינים.

שלב שלישי: הכנת הצורב

כעת הגיע הזמן לחבר את הצורב למחשב (אם עוד לא עשיתם את זה). אמורות לדלוק בו שתי נוריות LED פנימיות: ירוקה ליד כניסת ה-USB, ואדומה בצד השני. זה תקין. נחזור לתוכנה ונבחר בה את הצורב, בתיבת הבחירה למעלה מימין שכתוב בה כרגע "No Tool", ושמסומנת בתמונה הבאה בחץ הצהוב:

בחירה בצורב
בחירה בצורב

תיפתח לשונית חדשה לצד קוד התוכנה, שבה תפריט נפתח לבחירת הצורב. האופציה הנוספת בתפריט זה היא סימולטר, אבל לא ניכנס לזה כאן ונלך ישר על ה-AVRISP MKII:

בחירת צורב

מיד נקבל את הטופס הבא, שבו נצטרך להגדיר מהירות שעון עבור הצורב. ברירת המחדל היא 125 קילוהרץ, ועדיף לא לדעת בזה אם לא חייבים. ההנחיה היא שמהירות השעון חייבת להיות רבע או פחות ממהירות השעון שבה המיקרו-בקר עצמו עובד, ושימו לב: לא המהירות המקסימלית שהוא יכול לעבוד, אלא המהירות שבה הוא עובד כרגע. הגדרות בית החרושת של מיקרו-בקרים מסוג ATtiny85 גורמות להם לעבוד במהירות שעון של 1 מגהרץ, כלומר שהגבול העליון לצורב עבור מיקרו-בקר טרי שכזה הוא 250 קילוהרץ. בפועל, גם עשירית מזה תגמור את הצריבה בזמן אפסי, אז כאמור – לא לגעת.

הגדרת מהירות שעון
הגדרת מהירות שעון

אם תסתכלו על הלשונית של הטופס הזה (בצבע בז' בתמונה, עם הכיתוב "TinyBlinkTest1") תראו שיש שם גם כוכבית. פירוש הדבר שתוכן הדף הזה לא נשמר. לחצו Ctrl+S או בתפריט File->Save Selected Items כדי לשמור את ההגדרות.

שלב רביעי: חיווט הרכיבים

נחבר למטריצה את המיקרו-בקר שלנו, כל פין ("רגל") בחמישיית חורים נפרדת כמובן. אחת הפינות של המיקרו-בקר מסומנת בשקע עגול קטנטן. זהו הסימון של פין מס' 1 (אין שום קשר למספור הפינים של הצורב!), וכמו בכל ג'וק, את הפינים הבאים אנחנו סופרים מפין מס' 1 והלאה, נגד כיוון השעון. את רגל ה"פלוס" של הלד נחבר לפין מס' 5, שנמצא בפינה הנגדית לפין מס' 1, ואת רגל ה"מינוס" נחבר בשורת חורים נפרדת אל הנגד, שיתחבר בצדו השני לפין 4 (מול פין 5). פין 5 משמש לקלט/פלט של המיקרו-בקר, ואילו פין 4 הוא האדמה (GND).

הרכיבים על המטריצה
הרכיבים על המטריצה

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

אותו סידור רכיבים, בתוספת קבל
אותו סידור רכיבים, בתוספת קבל

עכשיו נחבר את חוטי אספקת החשמל. עוד לא לחבר את החשמל עצמו (לקיר, ליציאת USB או לכל מקור אחר) – זה דבר שעושים רק ממש בסוף. החיבור נעשה לאותם פינים כמו של הקבל.

ועם חוטים לאספקת חשמל, חמישה וולט
ועם חוטים לאספקת חשמל, חמישה וולט

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

תיאור הפינים מה-datasheet, עם קצת צבע משלי
תיאור הפינים מה-datasheet, עם קצת צבע משלי

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

ועם החיווט של הצורב.
ועם החיווט של הצורב (כרגיל, לחצו להגדלה)

שלב חמישי: זיהוי המיקרו-בקר וצריבת ניסיון

אמנם קבענו קודם שהפרויקט מיועד ל-ATtiny85, אך התוכנה והצורב לא יודעים אם זה באמת המיקרו-בקר שמחובר אליהם כרגע. לשם כך יש לבצע עוד כמה פעולות. נחזור לתוכנה ונבחר בתפריט Tools->Device Programming. בטופס שייפתח, משמאל למעלה, נוודא שהמידע שמופיע הגיוני ואז נלחץ על Apply:

החלת צורב ומיקרו-בקר
החלת צורב ומיקרו-בקר

אם החיווטים נכונים והמיקרו-בקר מקבל חשמל, נקבל את הטופס המעודכן הבא. שימו לב שגם השדות Device Signature ו-Target Voltage, מימין למעלה, התמלאו אוטומטית:

המידע המזהה נקרא מהמיקרו-בקר
המידע המזהה נקרא מהמיקרו-בקר

אפשר ללחוץ על Close למטה כדי לסגור את החלון, והנה רגע האמת – נלחץ על כפתור ההפעלה (אפשר גם על F5). אם הכל תקין, הקוד הבסיסי שנוצר קודם יקומפל וייטען למיקרו-בקר. כך נראות השורות האחרונות של פלט קומפיילר תקין (בחלק "Output" למטה):

פלט בסיום הקימפול והטעינה
פלט בסיום הקימפול והטעינה

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

קוד בלינק
קוד בלינק

כשניסיתי את זה בפעם הראשונה זה לא עבד, בזמן הצריבה הלד הבהב לחלקיק שניה (בגלל הפעילות בפין MOSI), ואחרי זה השתתק. בואו לא ניכנס לפרטים של כמה זמן וקללות זה לקח… העיקר שבסוף גיליתי את ההגדרה הקטנה שהסתתרה עמוק במערכת ודפקה את כל העסק. גשו לתפריט Project->Properties (האופציה האחרונה בתפריט Project, שתופיע בתוספת שם הפרויקט שבחרתם). כן, את הטופס שייפתח כבר ראינו קודם – רק הפעם, שימו לב גם לתפריט הנפתח למטה:

למה, ריבונו של עולם, למה?!
למה, ריבונו של עולם, למה?!

במקום ההגדרה Erase only program area (מחק רק את שטח התוכנית) שהיתה שם קודם, בחרו ב-Erase entire chip (מחק את כל השבב). מסתבר, בדיעבד כמובן, שזו בעיה ידועה של סביבת הפיתוח, שמסיבות שונות ומשונות צורבת זבל למיקרו-בקר כשההגדרה הראשונה מופעלת. בכל אופן, עכשיו באמת הכל מוכן לצריבה שגם תעבוד, וככה זה נראה:

תודה וכל הכבוד למי שהגיע/ה עד לכאן… להתראות בפוסט הבא!

להרשמה
הודע לי על
11 Comments
מהכי חדשה
מהכי ישנה לפי הצבעות
Inline Feedbacks
הראה את כל התגובות

שלום עידו אתה אלוף אלוף אלוף! כל מדריך שלך –זהב! כל הכבוד!!! בעקבות המאמר שלך, ראיתי פוסט דומה באנגלית, כאן: https://circuitdigest.com/microcontroller-projects/getting-started-with-stm32-development-board-stm32f103c8-using-arduino-ide אם נשלב את המאמר הזה, ביחד עם המאמר שם, אני מבין שבעיקרון אין בעיה להשתמש עם הSTM8S בסביבת פיתוח של ארדואינו. התוכנה של ארדואינו תדע גם לצרוב את זה. חשבתי לנסות את זה רק אם תואיל לתת מעט מנסיונך העשיר א. אני רואה שהוא חיבר את הSTM8 ללוח "FTDI board" אדום בצד ימין על המטריצה- לאיפה זה ממשיך? האם לצורב? או שזה היציאה של המחשב בתור ארדואינו? ב. האם לפרוייקט שם, גם צריך לקנות את הצורב הזול? למשל: https://he.aliexpress.com/item/32649400326.html… לקרוא עוד »

סדרת פוסטים מצויינת, עזרה לי מאוד להתחיל להתעסק במיקרובקרים בעצמי 🙂 מה שטוב בפוסטים האלה זה לא רק שהם כתובים בצורה ברורה ומובנת, אלא גם שהם מאוד ממוקדים בדברים הבסיסיים ומאפשרים להתחיל ללמוד ולצבור אינטואיציה וניסיון בלי לקרוא על ההתחלה 200 עמודי datasheet. ישר כוח! D:

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

זה רק אני, או שהAtmel Studio נראה בול כמו הVisual Studio?
והאם אפשר לעבוד עם התוכנה הזאת גם על הMSP430 או על הארדואינו? (אני עובד ביום יום על הVisual Studio אז יהיה לי קל יותר להתרגל).

תודה רבה על כל הפוסטים!!!

לא שמתי לב 🙂

מחיפוש בגוגל הסתבר לי שיש הרחבה לVS שמאפשרת לעבוד עם הMSP430 מהVS.
תסתכל כאן

והנה אחד (חינמי) לארדואינו
http://www.visualmicro.com/

מדריך מצוין ומפורט!