Tuesday, December 27, 2005

אבטיפוס/דגם/סימולציה מסכמת


אלגוריתם ומבנה התוכנה

כללי
התוכנה נכתבה בשפת Cבסביבת העבודה של MPLAB עם קומפיילר PICC של חברת HITECH.קוד התוכנה שיובא בהמשך בשילוב החומרה שפורטה בפרקים הקודמים מבצעים הלכה למעשה את המתואר בסעיף "ממשק המשתמש ותיאור דרך פעולת המערכת" בפרק הקודם.
תרשים זרימה
תרשים 12 – תרשים זרימה
המבנה הכללי של התוכנה
התוכנה מורכבת משבעה קבצי מקור (Source), מתוכם קובץ אחד ראשי – logic.c, אשר מכיל בתוכו את ה-MAIN ומשישה קבצים מישנים, הקרויים בשמות רלוונטיים לפונקציות אותן קבצים אלו מכילים. (ראה תרשימים 13 ו-14)לכל אחד מה- CODEC יש גם קבצי כותר (Header), אשר מכיל את חתימות הפונקציות.הקובץ logic.c מכיל בתוכו את כל הכותרים (headers) והוא משתמש בהם בעת הצורך, ע"פ הכתוב בתוכנה.להלן תרשים מה- Work Place של מבנה התוכנה:
תרשים 13 – תיאור מבנה התוכנה מתוך סביבת העבודה
תיאור תכולת הקבצים:
Logic – מכיל בתוכו את ה- Main, שירות בפסיקה, ופונקצית דגימת החיישנים שמופעלת
בפסיקה.
Globals - מכיל את כל המשתנים הגלובליים בנוסף לפונקצית הקריאה מהמקלדת.
Lcd_functions – מכיל בתוכו את כל פונקציות האתחול של המסך, פונקציות הדפסת הודעות ע"ג הצג והעברת פקודות שליטה על המסך.
Phone_numbers – מכיל בתוכו את הפונקציה שמבצעת את קליטת מספרי הטלפון שמזינים בתהליך האתחול.
Sensors_names - מכיל בתוכו את הפונקציה שמבצעת את קליטת שמות החיישנים שמזינים בתהליך האתחול.
Serial_com – מכיל בתוכו את פונקציות השידור, פונקציות האחראיות על העברת מילות האתחול למודם ושליחת הטקסט עצמו.
Setup_menu – מכיל בתוכו את פונקציות הצגת התפריטים המתחלפים בתהליך האתחול.
להלן תרשים המתאר את מבנה הקבצים:
תרשים 14 – תיאור מבנה התוכנה
קוד התוכנה והסברו:
בתת פרק זה מובאת כל תכולת קבצי הקוד אשר מתוארים לעיל.
globals.c :
בקובץ זה מובאים כל המשתנים הגלובאליים ופונקצית הקריאה מהמקלדת:

























logic.c:
הערה: קובץ logic מובא כאן לפי הסדר שנכתב מלווה בהסברים מהותיים בלבד.
בחלק זה מוגדרים שני משתנים גלובאליים (sense_detect;armed) כמו גם רוטינת הפסיקה אשר נכנסת לפעולה כאשר מתקבלת פסיקה מ-RB0 ועולה דגל הפסיקה INTF.אם אחד מהחיישנים הופעל יורם דגל sens_detect ודגל הפסיקה יאופס... בחלק זה מוגדרים שני משתנים גלובאליים (sense_detect;armed) כמו גם רוטינת הפסיקה אשר נכנסת לפעולה כאשר מתקבלת פסיקה מ-RB0 ועולה דגל הפסיקה INTF.אם אחד מהחיישנים הופעל יורם דגל sens_detect ודגל הפסיקה יאופס...


...להלן הפונקציה שאחראית על דגימת החיישנים לאחר שנקראת מה-MAIN שיובא בהמשך.
הפונקציה הנ"ל בודקת את מצב החיישנים ומשרשרת הודעות מתאימות למשתנה גלובלי sms_msg לאחר מכן היא שולחת את ההודעה המשורשרת לפונקציה ששולחת SMS....

ה-MAIN:

בחלק זה מותחלים כל הפורטים של ה-PIC למצבי input או output
לאחר מכן מודפסת ההודעה שמופיעה בתמונה 1 כל עוד לא נלחץ לחצן הדריכה (RC5)או ENTER (*). בתוך ה-do אם נלחץ לחצן הדריכה\נטרול, יורם דגל armed והמערכת תדרך...












בשלב זה פסיקת RB0 מאופשרת, כל עוד המערכת המצב דרוך היא נכנסת למצב SLEEP
אם נלחץ שוב לחצן הדריכה\נטרול שוב, דגל sens_detect יורד לאפס והמערכת מנוטרלת...















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

...אם נלחץ ENTER יורם דגל setup והמערכת תיכנס למצב אתחול, בשלב זה נקראות הפונקציות print_screen_setup1 ו- print_screen_setup2 שנמצאות בקובץ setup_menu.c ע"מ להציג את המסכים המתחלפים אשר מוצגים בתמונות 2 ו- 3 בהתאמה. בכל זמן תוך כדיי התחלפות המסכים על המשתמש לבחור ספרה בין 1 ל- 3.
לאחר שנבחרה ספרה מורם דגל flag אשר זורק את ריצת התוכנית החוצה מהלולאה...

לאחר שנבחר מס' בין 1 ל- 3 נקראת אחת משלוש הפונקציות לאתחול.

סוף ה-MAIN.

lcd_functions:


phone_numbers.c:

פונקציה זו נקראת מה-MAIN והיא קולטת מהמשתמש עד שישה מספרי טלפון ע"פ בחירתו ומאחסנת בזיכרון ה-EEPROM את המספרים המוזנים.

...כל מספר טלפון מוגבל ל- 10 ספרות בדיוק, רק אז יתקבל ENTER והמשתמש יוכל להזין את המספר הבא. המספר שמייצג את כמות מספרי הטלפון שברצון המשתמש להזין מאוחסן בתוך במשתנה total_cell_numbers בתא 100 של זיכרון ה-EEPROM ע"מ שפונקצית התקשורת תשתמש בו בעת שליחת ההודעות(כפי שיובא בהמשך)...











sensor_names.c:






























הפונקציה הנ"ל ממפה אותיות בהתאם למקש הנלחץ ומספר הלחיצות עליו.
...המשך:
ניתן לראות שהמשתנה count מתעדכן כאשר נלחץ מקש זהה לזה שלפניו ואז הוא נשלח לפונקציה: find_letter
Serial_com.c

הפונקציה הנ"ל אחראית על אתחול ה-USART , היא מקבלת מחרוזות טקסט מהמשתנה הגלובלי buf ומכניסה אותו ל- TXREG , ניתן לראות שלאורך כל התהליך נדלק LED שמראה שהתוכנה בתהליך התקשורת...

הפונקציה הנ"ל שולחת את הטקסט המשורשר שנשלח מהפונקציה send_sms_setup (הפונ' הבאה)
לסוף הטקסט משורשר התו ה- ASCII של ^Z על מנת להודיע למודם שכל הטקסט נשלח.




הפונקציה הנ"ל מקבלת את המשתנה שנשלח לה מ-sensor_status שב- MAIN.
שולחת למודם הודעות אתחול אשר מכניסות אותו למצב שליחת הודעה.
בנוסף הפונקציה משתמשת בנתון של total_cell_numbers שהוכנס ל-EEPROM בפונקצית phone_numbers מעמודים 40-41, לפי נתון זה היא שולפת את מספרי הטלפונים הדרושים, משרשרת " משני צידי מספר הטלפון שנשלף מה-EEPROM.ומעבירה את הכול לפונקציה send_buf_to_TXREG. בסופו של דבר, היא שולחת msg עם הטקסט בתוכו הטקסט שנשלח לפונקציה send_sms_text.

setup_menu.c:
פונקציה זו מדפיסה על הצג את הודעות תפריט האתחול שמופיעות בתמונות 2 ו-3 בהתאמה.


מפת מצב זיכרון המיקרו מחשב
להלן מצב הזיכרון של ה-PIC לאחר צריבת התוכנה המלאה על כל קבציה:


Memory Usage Map:

Program space:
CODE used 9A2h ( 2466) of 2000h words ( 30.1%)
CONST used 14Eh ( 334) of 2000h words ( 4.1%)
ENTRY used 16h ( 22) of 2000h words ( 0.3%)
STRING used Fh ( 15) of 2000h words ( 0.2%)

Data space:
BANK0 used 4Ch ( 76) of 60h bytes ( 79.2%)
BANK1 used 50h ( 80) of 50h bytes (100.0%)
BANK2 used 0h ( 0) of 60h bytes ( 0.0%)
BANK3 used 0h ( 0) of 60h bytes ( 0.0%)
COMBANK used 1h ( 1) of 10h bytes ( 6.3%)

EEPROM space:
EEDATA used 0h ( 0) of 100h bytes ( 0.0%)

ID Location space:
IDLOC used 0h ( 0) of 4h bytes ( 0.0%)

Configuration bits:
CONFIG used 0h ( 0) of 1h word ( 0.0%)


Summary:
Program space used B15h ( 2837) of 2000h words ( 34.6%)
Data space used 9Dh ( 157) of 170h bytes ( 42.7%)
EEPROM space used 0h ( 0) of 100h bytes ( 0.0%)
ID Location space used 0h ( 0) of 4h bytes ( 0.0%)
Configuration bits used 0h ( 0) of 1h word ( 0.0%)

0 Comments:

<< Home