Tuesday, December 27, 2005

תכנון מפורט

כלי פיתוח וצריבה
מעגל אספקת המתח
פירוט רכיבים עיקריים
יישומים ב- 16F877A
סכימת המעגל הראשי
הגבר השמע
ממשק המשתמש

כלי פיתוח וצריבה

ממשק הצריבה הוא של חברת microchip מדגם ICD2, הוא מתחבר למחשב הביתי דרך ממשק USB. למעגל המערכת, הוא מתחבר דרך מחבר מסוג RJ-11 6 פינים. מחירו כ-$160.
סביבת העבודה שבה נכתבה התוכנה היא MPLAB, דרכה ניתן לצרוב את כל סוגי המעבדים של חברת microchip ,ניתן גם לקבוע את כל הגדרות החומרה, כגון קביעת מהירות הגביש, הגדרת מתחי צריבה ובדיקתם.
התוכנה נכתבה בשפת C .
המהדר (compiler) , הוא של חברת HITECH מסוג PICC.


מעגל אספקת המתח

הזנת המתח הראשית מתקבלת מספק כוח אשר מתחבר במבואו לרשת החשמל הביתית ובמוצאו מתקבל מתח של 12V בדומה למתח המתקבל ממצבר של מכונית פרטית. זהו למעשה מתח המבוא של המעגל החשמלי. להדק המבוא מחובר ווסת מתח – LM7805 אשר במוצאו מתקבל מתח מיוצב של 5V, להלן: Vcc=5V שהוא המתח המזין את כל הרכיבים האלקטרוניים במעגל. להלן תרשים המתאר את חיבור מייצב המתח:

תרשים 3 – מעגל אספקת המתח

פירוט רכיבים עיקריים

PIC16F877A:

זהו לב ליבה של המערכת, המיקרו-מחשב, רכיב זה אחראי על כל הפעולות של המערכת, מאחסן ע"ג הזיכרון שלו את התוכנה והפרמטרים השונים.מהירות העבודה של הרכיב נקבעת ע"י גביש (Crystal) חיצוני בתדר מסוים שנקבע ע"י המתכנן והוא נע בתחום: 4MHz to 20MHz , בחירת גביש זה תפורט בהמשך.ל-16F877A יש שני סוגי זיכרון עיקריים:
· Program Memory – ROM
· Data Memory- RAM
גודל זיכרון ה- ROM הוא של 8k (של מילים בגודל 14bit כ"א) והוא מסוג FLASH, בלתי נדיף והוא מאחסן בתוכו את קוד התוכנה ומשתנים קבועים.גודל זיכרון ה- RAM והוא בגודל של 368Byte והוא מאחסן בתוכו את כל המשתנים הזמניים שנוצרים תוך כדי ריצת התוכנית. זיכרון זה מחולק לארבעה בנקים: bank0 עד bank3.בנוסף ל-PIC יש זיכרון EEPROM בגודל של 256Byte. ל-16F877A ישנם חמישה פורטים (ports) I/O : A,B,C,D,E כאשר הפורטים A ו- E בעלי כניסות\יציאות אנלוגיות.בנוסף, קיים ממשק תקשורת USART לתקשורת טורית.לפרטים נוספים על ה16F877A ניתן לעיין בנספח דפי הנתונים או במפרט הטכני בעמוד 8.GR-47: המודם הסלולארי, מבוסס טכנולוגית GSM, נמצא על לוח הדגמה (demonstration board) מודם זה הוצע ע"י המנחה כחלק אינטגראלי מהצעת הפרויקט. קצב התקשורת ברירת המחדל הוא 9600 סיביות בשנייה. (Baud Rate)פרטים נוספים זמינים בדפי הנתונים או במפרט הטכני.

גביש 4MHz : גביש זה נבחר משום שהוא מפחית את צריכת הזרם של ה-16F877A , מכיוון שהוא עובד בתדר נמוך יחסית ומבצע פחות פעולות בשנייה , אולם המהירות הנמוכה יחסית אינה פוגעת בביצועים, משום שיישומי התוכנה אינם נזקקים למהירות גבוהה, נהפוך הוא, ישנן הרבה השהיות בקוד התוכנה, מכיוון שישנן הרבה יישומי ממשק-אנוש.
לגביש חוברו שני קבלים בקיבול של 22pF כ"א. בהתאם להוראות היצרן, ניתן להשתמש בקבלים בתחום: 15-68pF עבור גביש בתדר 4MHz.
תדר עבודת (שעון) ה-16F877A מחושב כך:
,כלומר מיליון פעולות אסמבלי בשנייה.

מסך LCD : מסך נוזל גבישי באורך 16 תווים על 2 שורות, מחובר בקידוד של 8 סיביות ישירות אל ה-PIC,
בנוסף מחוברות שתי רגליים נוספות:
· Register Select – RS: סיבית אשר קובעת את אוגר הקבלה במסך: אוגר מידע /שליטה(data/control).
· Enable – EN: סיבית אשר מנודנדת בכל פעם שיש להעביר מידע או שליטה למסך.
המסך משמש לתצוגת ממשק המשתמש וחיווי עבור מצב המערכת.

מקלדת 16 לחצנים 4X4 : המקלדת נועדה להזנת פרמטרים בלבד. ע"מ לקלוט את המידע מהמקלדת יש להשתמש בבקר 74C922.

בקר מקלדת 74C922 : ניתן לחבר את המקלדת ללא בקר זה, אולם אז יש צורך בהגדרת 0 רץ בתוכנה וחיבור נגדי Pull-Up.
בפועל בקר זה חוסך את ההתעסקות עם התוכנה והוא ממפה את הלחיצה ע"י הצלבה בין מבואות הלחצנים. הוא עושה זאת בעזרת 0 רץ ע"פ מטריצת המקשים ונגדי Pull-Up . לרכיב יש יציאת DA-Data Available : יציאה זו מוציאה "1" בכל פעם שנלחץ לחצן במקלדת, לאותה יציאה מחוברת גם למבוא מהפך שמחובר במוצאו לכניסת - Output Enable, מוחק בחזרה את DA.
פרטים נוספים זמינים בדפי הנתונים.

MAX232: בקר התקשורת הטורית לתקשורת בפרוטוקול RS-232. רכיב זה מחובר לממשק התקשורת של ה-PIC לרגלי TX ו- RX. מכיוון שרגליים אלה עובדות רק בתחום של 0-5V הדבר אינו תואם את פרוטוקול RS-232 , כאמור פרוטוקול זה עובד בתחום -12 to +12V , יש צורך ב MAX232 , אשר ממיר את רמת המתח +5V ל- +10V ולאחר מכן הופך את +10 ל -10V , כך למעשה מתקבלת תקשורת שנע בתווך -10Vto+10V אשר מתאימה לפרוטוקול RS-232 וניתן להעבירה בכבל.
לרכיב מחוברים חמישה קבלים אלקטרוליטיים בקיבול של 1μF כ"א.תפקיד הקבלים להוות חלק ממכפילי המתח הפנימיים של הרכיב, בכדי לספק מתח גדול יותר לשידור בקבל (10V) יש צורך במכפילי מתח.

להלן תרשים המתאר את חיבור הרכיב: (פרטים נוספים זמינים בדפי הנתונים)

תרשים 4 – חיבור MAX232 למעגל


יישומים ב- 16F877A

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


חיבור ממשק הצריבה ל- PIC16F877A


על מנת לאפשר את צריבת התוכנה ע"ג זיכרון ה-PIC16F877, יש צורך בחיבור לרגליים RB7 ו- RB6.
בפרויקט נעשה שימוש בצורב של חברת Microchip מדגם: MPLAB ICD2. לצורב זה יש ממשק צריבה מסוג RJ-משום כך הורכב מחבר (נקבה) מסוג זהה על הלוח הראשי.
להלן תרשים המתאר את תצורת המחבר ואת מספרי הרגליים:



תרשים 5 – תיאור ממשק הצריבה RJ-11

הערה: רגל 6 אינה מחוברת משום שאיננה הכרחית לצריבה.

להלן תרשים המתאר את תצורת חיבור רגלי המחבר RJ-11 לרגלי ה-PIC עצמו:

תרשים 6 – חיבור ממשק הצריבה ל –PIC


Master Clear pin on the PIC

רגל מס' 1 - Master Clear מאפסת את המעגל כאשר היא מקבלת "0" .
היא מאפשרת את איפוס התוכנה הרצה ב-PIC16F877 בכל עת. ע"מ לאלץ אפס, חובר לחצן למחלק מתח לפי המתואר בתרשים הבא:

תרשים 7 – חיבור הלחצן לרגל MCLR/

מצב SLEEP – Power Down

מצב SLEEP מתאפשר לאחר כתיבת הפקודה SLEEP( ) בקוד התוכנה,
מאותו הרגע שהפקודה ניתנה ה-PIC נכנס למצב של חיסכון באנרגיה ע"י צריכת זרם נמוכה ביותר בטווח: 5-19μA , תלוי במתח הכניסה והטמפרטורה. זהו חסכון ניכר בהתחשב בעובדה שה-PIC צורך במצב אופייני כ- 0.6mA (חסכון של שני סדרי גודל).
את ה- PIC ניתן להוציא ממצב SLEEP, רק כאשר אחד מהמצבים הבאים מתרחש:
1. לחיצה על לחצן RESET החיצוני.
2. פקיעת טיימר "כלב השמירה" Watchdog Timer Wake Up. (אשר לא נעשה בו שימוש בפרויקט זה)
3. פסיקה מפורט RB הוא פסיקות פריפריאליות, כגון: USART, TMR1, A/D וכולי.לפרטים נוספים, ניתן לעיין בנספח דפי נתוני יצרן.
בפרויקט זה נעשה שימוש בפסיקת RB0.לאחר יציאה ממצב SLEEP, התוכנה תתחיל שוב משורת הפקודה הבאה אחרי שורת הפקודה SLEEP( ) והמערכת חוזרת לתפקוד רגיל.


פסיקת RB0

רקע: פסיקת RB0 היא פסיקה חומרה, אשר מיושמת ע"י שינוי מתח ברגל RB0 של ה-PIC (רגל מס' 33) , פסיקה זו יכולה להוציא את ה-PIC ממצב SLEEP ע"י שינוי מתח על רגל 33. הפסיקה יכולה להתבצע גם בשינויי מתח מגבוה לנמוך ולהיפך. בחירת המצב נעשית ע"י סיבית שליטה שנקראת INTEDG- Interrupt Edge Select bit:
1 = פסיקה בעליית מתח .
0 = פסיקה בירידת מתח.
ע"מ לאפשר את הפסיקה יש לשים "1" בסיבית אפשור: INTE=1.
בנוסף יש להרים את סיבית אפשור הפסיקות הגלובלי GIE=1.
כאשר הפסיקה מתקבלת היא מרימה דגל INTF , שגורם לה להיכנס לרוטינת הפסיקות שנכתבה בקוד התוכנה, אשר תפורט בהמשך.בדף הבא, נתון תרשים המתאר את תהליך אפשור הפסיקות ובו הדגשה של תהליך פסיקת RB0 הרלוונטית:

תרשים 8 - תיאור תהליך הפסיקות

יישום הפסיקה במערכת: המערכת תוכננה כך שפסיקה תתקבל ב- RB0 כאשר, אחד או יותר מהחיישנים הופעל או כשלחצן ARM/DISARM (לחצן הדריכה/נטרול) נלחץ.
כל החיישנים וגם לחצן הדריכה מחוברים עם נגדי Pull-Down לרגלי החיווי ב-PORTA ובמקביל לרגל RB0 וכאשר הם מופעלים מתקבל "1" ברגליים החיווי של ה-PIC וגם ברגל RB0, לכן, סיבית: INTEDG=1 .
החיישנים ולחצן הדריכה מחוברים לרגל RB0 דרך שער OR במקביל לכניסות אשר אחריות על חיווי מס' החיישן, כלומר אם אחד הוא יותר מהם עולה ל- "1" מתקבל אחד ברגל RB0 ומתבצעת פסיקה.שרטוט המתאר את האמור נמצא בסכימת המעגל הראשי.

USART

רקע:ל-PIC16F877 יש ממשק תקשורת טורית אשר מכונה USART, זהו מודול תקשורת רב תכליתי, אשר משמש לתקשורת עם רכיבים חיצוניים כגון: מחשבי PC ,מעבדים אחרים, זיכרון חיצוני, ממירי A/D ו- D/A.
ה- USART יכול לעבוד בשלושה מצבים:
· א-סינכרוני ב- Full Duplex
· סינכרוני Master ב- Half Duplex
· סינכרוני Slave ב- Half Duplex
כדי לשייך את ה- USART לרגליים RC6/TX/CK ו- RC7/RX/DT יש לאתחל את הסיבית: SPEN=1 Serial Port Enable
ניתן לבחור את קצב מהירות השידור ישנה סיבית BRGH, כאשר היא '1' , קצב השידור גבוה ולהיפך.
מומלץ להשתמש בקצב שידור מהיר, גם כאשר לא נדרשת מהירות שידור גבוהה מכיוון שזה מפחית את הטעות בקביעת הקצב. כפי שהנוסחאות הבאות ידגימו.
קצב שליחת המידע נקרא BRG-Baud Rate Generator. כדי לקבוע את הקצב יש לקבוע ערך באוגר: SPRBG. ע"מ לחשב את ערך זה נתונה הנוסחא הבאה, כאשר:

BRGH=1

כאשר: BRGH=0

המידע המשודר נכנס לתוך אוגר 8 סיביות שנקרא TXREG ומשם הוא מעביר לאוגר חוצץ בצורה מקבילית, את 8 סיביות המידע לאוגר שנקרא TSR Transmit Shift Register -, משם הוא מועבר לחוצץ השליטה לפני יציאתו דרך RC6/TX .

בתרשים הבא מתואר תהליך השליחה:
תרשים 9 – דיאגראמת בלוקים המתאר את תהליך השידור

יישום התקשורת במערכת: במערכת זו נעשה שימוש במצב הא-סינכרוני, כאשר המערכת מסוגלת לשדר ולקלוט בו זמנית כלומר, Asynchronic Full Duplex.
המידע מקודד בקידוד של 8 סיביות מידע. (TX9=0)
קצב שידור המידע נקבע לגבוה, כלומר BRGH=1 ע"מ להגדיל את רמת הדיוק.
ע"מ לעבוד עם המודם נדרש קצב Baud של 9600bits/sec שהוא קצב ברירת המחדל של המודם GR-47.
ה- Baud Rate נקבע ע"פ הנוסחא הבאה:

כלומר אוגר SPBRG=25. כל האוגרים הנ"ל מותחלים בתוך קוד התוכנה אשר תפורט בהמשך.

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


סכימת המעגל הראשי


תרשים 10 - סכימת orcad של המעגל הראשי


הגבר השמע

למערכת מחובר רמקול בהתנגדות 8Ω ,אשר מדמה את צופר האזעקה, אולם הרמקול והמעגל צורכים יותר זרם ממה שיציאת ה-PIC16F877 יכולה לספק 200mA לכל פורט.

על כן, נדרש פתרון לאספקת הזרם שהרמקול צורך. הפתרון הפשוט ביותר היה: טרנזיסטור NPN אשר מתפקד כמפסק.
כלומר, שהזרם ממקור המתח יזרום ישירות למעגל שמחובר לרמקול ומשם לקולקטור ואילו פיקוד של ה-PIC יחובר דרך הבסיס עם נגד של 10kΩ להגבלת זרם, ע"מ להקטין את צריכתו מכיוון ה-PIC. האמיטר מחובר ישירות לאדמה.
להלן סכימת מעגל הגבר השמע:


תרשים 11 - סכימת הגבר השמע.


ממשק המשתמש ו
תיאור דרך פעולת המערכת

המערכת תוכננה כך שהשימוש במקלדת ומסך ה-LCD יהיו מחוברים ורק בשעת התקנת המערכת ברכב יעשה בהם שימוש. זאת על מנת לחסוך בעלויות ובגודל פיזי.
הערה: לצורך ההדגמה הותקן המסך בקופסת הפרויקט והוא יציג הודעות אשר יקלו על הבנת המצב שבו המערכת נמצאת בכל שלב.
לאחר ההתקנה, על המתקין להזין את מספרי טלפון שעימם המערכת תיזום קשר בעת הפעלת האזעקה, ניתן להזין עד 6 מספרי טלפון. בנוסף על המתקין להזין את שמות סוגי החיישנים שהותקנו על הרכב, ניתן לחבר עד 3 חיישנים.
הנתונים הנ"ל מאוחסנים ע"ג זיכרון ה-EEPROM ומשם הם נשלפים אוטומטית בעת הצורך.
לאחר הזנת הנתונים, המתקין מסיר את המקלדת והמסך והמערכת פועלת באופן עצמאי.
עם חיבור המערכת תופיע הודעת פתיחה ומיד לאחריה תופיע על הצג ההודעה הבאה:


תמונה 1 – הודעת setup , כפי שמופיע ע"ג ה-LCD


אף מקש לא ייקלט פרט ל- ENTER.
כאשר מסך זה מופיע תיתכנה שתי האפשרויות הבאות:
a) אתחול (Set Up) ע"י לחיצה על ENTER.
b) דריכת המערכת ע"י לחיצה על לחצן ARM/DISARM (לחצן דריכה/נטרול).


a) אתחול ע"י לחיצה על ENTER: לאחר שהמשתמש לחץ ENTER מופיעים על המסך תפריטים מתחלפים עם אופציות לבחירה:
1. Sensor names – הזנת שמות החיישנים.
2. Phone numbers – הזנת מספרי הטלפון הסלולאריים.
3. Exit – יציאה למצב התחלתי.
אף מקש לא ייקלט מלבד 1,2 או3.
כך נראים המסכים המתחלפים על גבי הצג:

תמונה 2 – מסךsetup ראשון, כפי שמופיע ע"ג ה-LCD


תמונה 3 – מסך setup שני, כפי שמופיע ע"ג ה-LCD

1. במידה ונבחרה אופציה מס' 1 , יופיע המסך הבא:

תמונה 4 – הודעת הזנת חיישן, כפי שמופיע ע"ג ה-LCD

על המשתמש להזין את שם החיישן הראשון, ללא רווחים וללא ספרות, עד 10 תווים לכל חיישן.
האותיות מוזנות בתהליך דומה לזה שקיים בכתיבת הודעת SMS ע"ג טלפון סלולארי,
כלומר כל לחיצה על אותה ספרה תציג אות אחרת על המסך, עד 4 אותיות לכל ספרה.
במידה ותילחץ ספרה אחרת בתוך כשנייה, יוצגו האותיות של הספרה האחרת. במידה ולא תילחץ ספרה אחרת בתוך שנייה, האות האחרונה תישמר והסמן יעבור לתו הבא אוטומטית.
לדוגמא: אם נלחצה הספרה 2, האות A תופיע על המסך, כל לחיצה נוספת על 2 תחליף בין האותיות B,C ושוב A.
אם ספרה 2 לא נלחצה שוב בתוך שנייה, האות האחרונה שהופיעה תישמר והסמן יעבור לתו הבא.
במידה והמשתמש עשה טעות וברצונו למחוק, הוא יכול להקיש על מקש DELETE בכל עת.
בתהליך זהה מאוחסנים גם חיישנים 2 ו-3.
חיישן 1 מאוחסן החל מתא 0 ב- EEPROM.
חיישן 2 מאוחסן החל מתא 20 ב- EEPROM.
חיישן 2 מאוחסן החל מתא 40 ב- EEPROM.
לאחר אחסון שלושת החיישנים תופיע הודעה ע"ג הצג: "Sensors names are stored"

2. במידה ונבחרה אופציה 2 , יופיע המסך הבא:

תמונה 5 – הודעה לבחירת מספרי טלפונים אותם ניתן להזין, כפי שמופיע ע"ג ה-LCD

ניתן לבחור עד ששה מספרי טלפון אותם אפשר להזין. לכל אחד מהטלפונים שיוזנו תשלח הודעת SMS בעת הצורך.
על המשתמש להקיש על ספרה מ-1 עד 6 (אף מקש אחר לא ייקלט).
הספרה שתילחץ תאוחסן בתא 100 ב-EEPROM בספרה שנשלחה יעשה שימוש בפונקצית השליחה בקוד התוכנה כפי שיפורט בהמשך.
לאחר מכן תופיע ההודעה הבאה על הצג:

תמונה 6 – הודעת הזנת מס' טלפון, כפי שמופיע ע"ג ה-LCD

על המשתמש להקיש ספרות בלבד, ולהזין מספרי טלפון סלולאריים בלבד, בעלי 10 ספרות בדיוק. לאחר הזנת המספר, יש ללחוץ ENTER . במידה והמשתמש עשה טעות וברצונו למחוק, הוא יכול להקיש על מקש DELETE בכל עת.
תהליך ההזנה זהה לכל מספרי הטלפון.
הטלפונים מאוחסנים בתאים הבאים בתוך זיכרון ה- EEPROM:
טלפון 1: 100 עד 110.
טלפון 2: 110 עד 120.
טלפון 3: 120 עד 130.
טלפון 4: 130 עד 140.
טלפון 5: 140 עד 150.
טלפון 6: 150 עד 160.
10Byteלכל מס' טלפון בעל 10 ספרות.
לאחר הזנת כל מספרי הטלפון (עפ"י בחירת המשתמש), תופיע על המסך ההודעה הבאה: "Phone numbers are stored" .


3. במידה ונבחרה אופציה 3:
ההודעה שבתמונה 1 תחזור להופיע על הצג וניתן יהיה להתחיל את תהליך האתחול מההתחלה או לדרוך את המערכת.

b) לחיצה על לחצן ARM/DISARM: לחיצה ראשונה על לחצן הדריכה יגרום לדריכת המערכת. לאחר הלחיצה תופיע על המסך הודעה (אם המסך מחובר) "System is armed" ויישמע צפצוף בודד וקצר ע"י הצופר.
החל מרגע זה המערכת נכנסת למצב SLEEP Power Down, במצב זה ה-PIC מפסיק לעבוד ועובר לצריכת זרם נמוכה (19μA) במצב זה רק הפסיקה RB0 במעבר מנמוך לגבוה יכולה "להעיר" את ה- PIC ממצב SLEEP.
פסיקה זו יכולה להתממש אך ורק כאשר אחד או יותר מהחיישנים הופעל או נלחץ לחצן ARM/DISARM .
אם יילחץ לחצן הנטרול/דריכה פעם נוספת המערכת תנוטרל, תופיע על הצג ההודעה:
"System is disarmed" ויישמעו שני צפצופים מהירים וקצרים. לאחר מכן המערכת חוזרת למצבה ההתחלתי וניתן לדרוך אותה שוב או להיכנס לתהליך האתחול.

במידה ואחד הלחצנים יופעל כאשר המערכת עדיין במצב דרוך, המערכת תצא ממצב SLEEP יופעל הצופר ותופיע על הצג ההודעה: ALARM! ALARM!"" (במידה והצג מחובר).
מיד אח"כ התוכנה תיזום פנייה למודם דרך פורט התקשורת, ומשם תשלח הודעת טקסט, שנכתבה מראש, למספרים שאוחסנו מראש בזיכרון ה-EEPROM , עם המידע על אודות מצב החיישנים. כל עוד המערכת משדרת תידלק נורה (LED) כתומה המעידה על שליחת מידע. המערכת תישאר במצב הנ"ל כל עוד לא נלחץ לחצן הדריכה/נטרול.
במידה ונלחץ כפתור הנטרול זמזום הצופר יופסק והמערכת תנוטרל וחוזר חלילה.

0 Comments:

<< Home