מאת: האנס–גונטר קרמסר, טקסס אינסטרומנטס
בכל פעם שנסלל רחוב חדש, המהנדסים צריכים לחשוב איך להאיר אותו בלילה. באופן מסורתי, תאורת הרחוב מופעלת על ידי חשמל מהרשת, ולכן יש צורך לחפור תעלות בצדי הכבישים, להניח את הכבלים ולהתקין את הציוד.
המגמה כיום, היא להתחיל ולהשתמש במנורות שמופעלות באנרגיה סולארית, במיוחד באזורי פיתוח חדשים. לעת עתה המנורות האלו יקרות יותר מפנסי התאורה המסורתיים, אך בשל עלויות האנרגיה המאמירות, ההפרש הכספי נשחק במהירות רבה למדי, וזאת, בנוסף על עלויות הנחושת והבנייה, שנחסכות אף הן.
שער בדעתך כביש מואר באמצעות פנסים המופעלים באנרגיית השמש, כאשר לכל פנס יש חיישן אור משל עצמו שנועד להפעילו בלילה. האפיצויות (טולראנס) של החיישנים ושל הרכיבים האלקטרוניים יגרמו לכך שהפנסים יאירו בזמנים שונים ולא באופן מסונכרן. אין ספק שדבר כזה לא יהיה מקובל על ראש עיר כלשהו. על מנת שכל הפנסים ברחוב יופעלו באותו זמן, הם צריכים להיות מסונכרנים, ובאופן האידיאלי – ללא כבלים.
פרוטוקול ZigBee הוא פרוטוקול תקני שמיועד לאוטומציה של בתים, לאנרגיה חכמה ולעוד יישומים רבים. יש בו כמה תכונות טובות שאותן אפשר לנצל למען השגת משימת הסנכרון הזו.
ראשית, הוא פועל בפס ISM של 2.4 ג’יגהרץ שלא נדרש לו רשיון. כמו כן, אפשר להגיע למרחק הנדרש בין הפנסים, שהוא בדרך כלל 40 עד 60 מטר, בעזרת טכנולוגיה זו. ואולם, התכונה החשובה ביותר היא יכולת הפעולה שיש לתקן ZigBee לפעול ברשת אריג (mesh). ברשת אריג, המידע שמגיע מצומת המקור אל צומת היעד מועבר באמצעות נתבים. ביישום של תאורת רחוב אפשר להגדיר בקונפיגורציה את הפנסים כנתבים.
בעזרת השימוש במחסנית ZigBee של טקסס אינסטרומנטס, די אם נתמקד רק ביישום שהוא חיישן אחד ויחיד שממומש בפנס ובפנסים אשר מקבלים את האות מהחיישן. במאמר זה נדון בפיתוח של היישום כולו ובהסברים הנלווים.
כפי שרואים באיור 1, יש לפתח שני יישומים:
1. מתאם שיבצע את המשימות הבאות:
יבחין בעוצמת האור עם נגד רגיש לאור (photoresistor).
יפיק אות PWM יחסי לחשכה על מנת לשלוט בפנס שלו.
ישלח אות PWM כדי שכל נורות הפנסים האחרים יקבלו אותו אות בקרה.
2. נתב שיבצע את המשימות הבאות:
יקלוט את האות PWM.
יפיק את האות שהתקבל על מנת לשלוט בבהירות של הפנס.
את אותה תוכנת נתב אפשר לתכנת לכל צומת פנס מפני שאיננו צריכים לדאוג למיעון או לניתוב, שכן כל זה נעשה על ידי מחסנית ZigBee.
החומרה שבה אנו משתמשים לבניית רשת זו זמינה אצל טקסס אינסטרומנטס:
מעגל לביצוע הערכות SmartRF05EB.
מעגל בת CC2530DB (ראה איור 2).
את המעגלים אפשר להפעיל ולתכנת דרך כבל USB; אין צורך בחומרה נוספת לניפוי שגיאות.
את המחסנית ZigBee עבור CC2530 גרסה 2.4.0 – 1.4.0 אפשר להוריד מדף הבית של טקסס אינסטרומנטס בלא תמורה כספית.
כל הפיתוח נעשה בעזרת כלי הפיתוח להתקנים משובצים IAR עבור 8051 גרסה 7.60.1.
על מנת ליצור סביבת יישומים משל עצמך, רצוי מאוד לקרוא את ההוראות – וגם לציית להן – המופיעות בדפי היישום Create New Application for SmartRF05 and CC2530 [“צור יישום חדש עבור SmartRF05 ו- CC2530”], מסמך שמספרו בטקסס אינסטרומנטס הוא SWRA231.
ביישום זה, דוגמת “היישום הגנרי” (GenericApp) שמשדרת בעיקרון הודעת “Hello World” מדי 5 שניות ללא כל פרופיל ציבורי, שונתה לפי המתואר בהמשך. יש לציין שהיישום הגנרי מאפשר שידור בשני הכיוונים, כלומר, אפשר לשדר הודעת “Hello World” מיישום המתאם אל הנתב ואל התקן הקצה ובכיוון ההפוך. יישום תאורת הרחוב משדר את המידע בכיוון אחד בלבד, כלומר מיישום המתאם אל הנתבים או אל יישומי הקצה.
צעד 1: חיישן אור
ביישום זה עוצמת האור עוברת הדמיה באמצעות פוטנציומטר במעגל ההערכה SmartRF05. הממיר מאנלוגי לספרתי המשולב של CC2530 משמש כדי להפוך את המתח האנלוגי המופק מהפוטנציומטר לערך ספרתי. על ידי בחינת השרטוטים של מעגל ההערכה, אפשר למצוא שהזחלן של הפוטנציומטר מחובר לפין חיבור מספר 12 אשר תואם לחיבור port 0, לפין 7 או P0.7.
חיבור פין זה, כמו כל פיני הכניסות והיציאות, מוגדר בברירת המחדל ככניסה. לפני הגדרת הקונפיגורציה של ממיר ADC ושל ההתקן ההיקפי קוצב הזמן (timer) (ההתקן timer 1 ישמש ביישום זה, אם כי אפשר גם בכל קוצב זמן אחר, למעט timer 2, המשמש את מחסנית ZigBee כקוצב זמן OSAL) יש להגדיר בצורה נכונה את חיבור פין המוצא עבור אפנון PWM.
חיבור פין 11 (Port 1, Bit 0:P1.0) מחובר לנורית LED על מעגל ההערכה EVB) SmartRF05) ומשמש להעברת היציאה של אות PWM כך ש-P1DIR צריך להיות מוגדר ל-0x01. פרוייקטים ב-ZigBee משתמשים בדיוק באותו מינוח המשמש במדריך למשתמש של (CC2530 (SWRU191B אשר מתאר את כל האוגרים (register) של CC2530.
על פי המסמך “ממשק תכנות יישומים של מנהלי התקני (HAL” (HAL Driver APIנדרשות שתי קריאות לפונקציות על מנת לקרוא את ממיר ADC:
1. (HalAdcSetReference (HAL_ADC_REF_AVDD
קריאה לפונקציה זו מגדירה את מתח הייחוס עבור ממיר ADC, כלומר, משמעות השימוש במתח AVDD שמתח הייחוס היא שממיר ADC ממיר 0 וולט לאפס ואת המתח המרבי בכניסה שהוא 3 וולט ל–255 במקרה של רזולוציה של 8 סיביות ויציאה בינרית.
2. HalAdcRead (HAL_ADC_CHN_AIN7, HAL_ADC_RESOLUTION_12)
קריאה לפונקציה זו קוראת את ערוץ 7 אשר מחובר לזחלן של הפוטנציומטר ומגדירה את הרזולוציה ל–12 סיביות.
יש פעול בתשומת לב רבה מאחר שממיר ADC של CC2530 מפיק את כל הנתונים בתבנית של משלים לשתיים, והמשמעות היא שהנתונים שלנו יימצאו בטווח שבין 0 ל-2047.
לשתי הפונקציות נדרש שהקובץ “hal_adc.h” יוגדר בהכרזת include.
הגרסה הנוכחית של המסמך “ממשק תכנות יישומים של מנהלי התקני HAL עדיין מפרטת כמה שירותים של קוצבי זמן שכבר אינם תקפים ואינם נתמכים עוד על ידי מחסנית ZigBee . מאחר שהקוצב Timer 2 שמור עבור שכבת OSAL (שכבת ההפשטה של מערכת ההפעלה), Timer 1 (קוצב זמן של 16 סיביות) והקוצבים Timer 3 ו-Timer 4 (שני קוצבים של 8 סיביות) חופשיים לשימוש עבור היישום.
בהמשך מופיעים תיאורים בנוגע להגדרת הקונפיגורציה של קוצב הזמן Timer 1:
יש להגדיר את חיבור P1.0 לפונקציה היקפית (Peripheral) (באופן כזה תחובר היציאה של הקוצב Timer 1 לפין 12, PERCFG |= 0x40;).
יש להגדיר את אוגר בקרת ההתקנים ההיקפיים “למיקום חלופי 2” (Alternative 2 – P1SEL |= 0x01;).
הגדר את אוגר הבקרה Timer 1 Control של קוצב הזמן 1 כך שיחלק את אות שעון הזמן של המערכת של 32 מגה-הרץ ב-8, והתוצאה תהיה אותות במקצב של 1.4 מגה-הרץ והגדר את קוצב הזמן למצב מודולו (Modulo) כדי שיספור מ-0 עד לערך של זמן המחזור המופיע בהמשך (T1CTL = 0x06;).
הגדר את זמן המחזור של הקוצב Timer 1 ל-2048 (T1CC0H = 0x08; T1CC0L = 0x00;) אשר תואם לזמן מחזור של T = 2048 • 1/4 מגה-הרץ = 512 מיקרו-שנייה (עיין באיור הבא).
הגדר את מצב ההשוואה (Compare) של אוגר בקרת הלכידה/ השוואה (Capture/ Compare) של הקוצב Timer 1 “ל-1 כאשר מתקיים שוויון עם T1CC0 ול-0 כאשר מתקיים שוויון עם T1CC2” ;.
צעדים אלו פועלים להפקת יציאה של אות PWM בפין 12. אפשר ליצור בקרה על מחזור העבודה על ידי הגדרת אוגר בקרת הלכידה/ השוואה (Capture/Compare) בערוץ 2 של הקוצב Timer 1 – T1CC2H ו-T1CC2L.
כל היתר אמור להיות קל ביותר לביצוע. לאחר קריאה של הערך האנלוגי באמצעות פקודת (HalAdcRead) יש להגדיר בהתאם את אוגרי הלכידה/ השוואה. אפשר להקצות את הערך בן 12 הסיביות בעזרת פקודות מאקרו המוגדרות מראש – HI_UNIT8 ו-LO_UNIT8 – [T1CC2H = HI_UNIT8 (קרא ערך); ו-T1CC2L = LO_UNIT8 (קרא ערך);].
יש להדגיש שהערך המשודר חייב להיות מסוג תו (character). לכן יש לשנות את ערך הקריאה ממספר שלם (integer) לסוג תו באמצעות הפונקציה _itoa (עם המשתנים: הערך הנקרא מממיר ADC, מחרוזת תווים, שארית) פונקציה שימושית זו, בדומה לפונקציות רבות אחרות, נכללת אף היא בתוך מחסנית ZigBee.
יש לבצע הידור (compile) של המתאם בתוך כלי הפיתוח IAR ולקשר אותו כ-ZigBee PRO Coordinator.
צעד 2: נתב
לנתב לא נדרש ממיר ADC מאחר שהוא יקבל את מחזור העבודה הממשי באות PWM, ישירות מהמתאם. לכן אפשר להשתמש באותן הגדרות של קוצב זמן המשמשות במתאם. לאחר קבלת הערך של מחזור העבודה עליך לקבוע את אוגרי הלכידה/ השוואה T1CC2H ו-T1CC2L בהתאם. יש לבצע הידור של הנתב ולקשר אותו כ-ZigBee PRO Router.
סיכום:
הפרויקט לדוגמה מוכיח שקל לשנות את דוגמאות התוכנה של מחסנית ZigBee המסופקות על ידי טקסס אינסטרומנטס ולהתאים אותן לצורכי היישום של הלקוח. רוב היישומים מקבלים מענה בעזרת התיאור של האופן שבו יש להשתמש בממיר מאנלוגי לספרתי והיצירה של אות PWM.
בהמשך מוצגת דוגמה של רשת עם 7 דילוגים [hop] (הרשת אולצה להיות מצורפת בטופולוגית עץ):
אפשר לקבל ממחבר המאמר את הקוד השלם של הפרויקט עבור כלי הפיתוח להתקנים משובצים IAR.
אודות המחבר:
האנס-גונטר קרמזר (Hans–Günter Kremser) עובד כיום כמהנדס יישומים בכיר ליישומים אנלוגיים מעשיים בחברת טקסס אינסטרומנטס במינכן (גרמניה). לאחר שהשלים את התואר בתקשורת בקלן, הוא עבד בחברת EADS באולם, כמהנדס פיתוח ולאחר מכן, בשתי חברות של אספקת מוליכים למחצה, לפני שהצטרף לטקסס אינסטרומנטס, ביוני 2006.