כאן אנו הולכים ליצור תקשורת בין מיקרו-בקר ATmega8 לבין Arduino Uno. התקשורת שנוצרה כאן היא מסוג UART (משדר מקלט אסינכרוני אוניברסלי). זו תקשורת סדרתית. על ידי תקשורת טורית זו ניתן לשתף נתונים בין שני בקרים, דבר הנדרש ביישומי מערכת משובצים שונים.
במערכות משובצות עלינו להיות בעלי ידע בסיסי אודות תקשורת מערכת, לכן לשם כך אנו עושים את הפרויקט הזה. בפרויקט זה נדון במערכת תקשורת בסיסית ונשלח נתונים מהמשדר למקלט באופן סדרתי.
בפרויקט זה ATMEGA8 משמש כמשדר ו- ARDUINO UNO משמש כמקבל. בתקשורת סדרתית נשלח נתונים BIT BY BIT, עד להעברת נתונים של BYTE לחלוטין. הנתונים יכולים להיות בגודל 10 סיביות, אך נשמור על 8BITS לעת עתה.
רכיבים נדרשים
חומרה: ATMEGA8, ARDUINO UNO, ספק כוח (5 וולט), AVR-ISP PROGRAMMER, קבל 100uF (מחובר באמצעות ספק כוח), נגד 1KΩ (שני חלקים), LED, כפתור.
תוכנה: Atmel studio 6.1, קסם פרוגיספ או פלאש, ARDUINO NIGHTLY.
תרשים מעגל והסבר
לפני שנדון בתרשים המעגל ובתכנות עבור משדר ומקלט, עלינו להבין על התקשורת הסדרתית. ATMEGA כאן שולח נתונים לאו"ם באופן סדרתי כפי שפורט קודם.
יש לו אופני תקשורת אחרים כמו תקשורת MASTER SLAVE, תקשורת JTAG, אך לצורך תקשורת קלה אנו בוחרים ב- RS232. כאן נחבר את ה- PIN של TXD (משדר) של ATMEGA8 ל- PIN של RXD (מקלט) של ARDUINO UNO
תקשורת הנתונים שנוצרה מתוכנתת כך:
- שמונה סיביות נתונים
- שתי עצירות
- אין ביטוי לבדיקת זוגיות
- קצב שידור של 9600 BPS (ביט לשנייה)
- תקשורת אסינכרונית (אין שיתוף שעון בין ATMEGA8 ל- UNO (לשניהם יחידות שעון שונות))
לצורך הקמת UART בין Arduino Uno ל- ATMEGA8 עלינו לתכנת את ההגדרה בצורה מדויקת. לשם כך עלינו לשמור על הפרמטרים שהוזכרו לעיל זהים בשני הקצוות. בזה מתפקד כמשדר ואחרים משמש כמקבל. נדון בכל הגדרות הצד בהמשך.
כעת עבור ממשק RS232, יש לספק את התכונות הבאות לצד משדר (ATMEGA8):
1. יש להפעיל את סיכת ה- TXD (תכונת קבלת נתונים) של הבקר הראשון למעבר.
2. מכיוון שהתקשורת סדרתית עלינו לדעת מתי נתון נתוני הנתונים מתקבל, כדי שנוכל להפסיק את התוכנית עד לקבלת בתים מלאים. זה נעשה על ידי הפעלת הפרעה מוחלטת לקבלת נתונים.
3. DATA מועבר ומתקבל לבקר במצב 8bit. אז שתי תווים יישלחו לבקר בכל פעם.
4. אין ביטים זוגיים, ביט עצירה אחד בנתונים שנשלחו על ידי המודול.
התכונות לעיל מוגדרות ברשומות הבקר; אנו נדון בהם בקצרה:
DARK GREY (UDRE): סיבית זו לא מוגדרת במהלך ההפעלה, אך היא משמשת במהלך העבודה כדי לבדוק אם המשדר מוכן להעברה או לא. ראה את התוכנית ב- TRASMITTER SIDE לפרטים נוספים.
VOILET (TXEN): סיבית זו מוגדרת להפעלת סיכת משדר בצד TRASMITTER.
צהוב (UCSZ0, UCSZ1 ו- UCSZ2): שלוש סיביות אלה משמשות לבחירת מספר סיביות הנתונים שאנו מקבלים או שולחים בבת אחת.
התקשורת בין שני SIDES מבוססת כתקשורת של שמונה סיביות. על ידי התאמת התקשורת לטבלה יש לנו, UCSZ0, UCSZ1 לאחד ו- UCSZ2 לאפס.
ORANGE (UMSEL): סיבית זו נקבעת על סמך אם המערכת מתקשרת בצורה אסינכרונית (שניהם משתמשים בשעון אחר) או באופן סינכרוני (שניהם משתמשים באותו שעון).
שני ה- SYTEMS אינם חולקים שום שעון. מכיוון ששניהם משתמשים בשעון פנימי משלהם. אז עלינו להגדיר את UMSEL ל- 0 בשני הבקרים.
ירוק (UPM1, UPM0): שני סיביות אלה מותאמות על סמך זוגיות הסיביות בה אנו משתמשים בתקשורת.
הנתונים ATMEGA כאן מתוכנתים לשליחת נתונים ללא זוגיות, מכיוון שאורך העברת הנתונים קטן, אנו יכולים בבירור לצפות לאובדן נתונים או שגיאה. אז אנחנו לא קובעים כאן שום זוגיות. אז הגדרנו את שניהם UPM1, UPM0 לאפס או שהם נותרו, מכיוון שכל הסיביות הן 0 כברירת מחדל.
כחול (USBS): סיבית זו משמשת לבחירת מספר סיביות העצירה בהן אנו משתמשים במהלך התקשורת.
התקשורת שביססה אותה היא מסוג אסינכרוני, כך שכדי לקבל העברת נתונים וקליטה מדויקים יותר, עלינו להשתמש בשני סיביות עצירה, ולכן הגדרנו את ה- USB ל- '1' בצד המשדר..
קצב השידור נקבע בבקר על ידי בחירת ה- UBRRH המתאים:
ערך UBRRH נבחר על ידי קצב שידור מצולב ותדר גביש המעבד:
אז על ידי הפניה צולבת ערך UBRR נתפס כ- '6', ולכן קצב השידור מוגדר.
בעזרת זה קבענו הגדרות בצד השידור; נדבר על קבלת צד עכשיו.
התקשורת הטורית המאפשרת ב- UNO יכולה להיעשות באמצעות פקודה אחת.
|
התקשורת שהנחנו להקים נעשית בקצב BAUD של 9600 ביט לשנייה. אז כדי ש- UNO יקבע קצב שידור כזה ויתחיל תקשורת טורית אנו משתמשים בפקודה "Serial.begin (9600);". כאן 9600 הוא קצב שידור והוא משתנה.
עכשיו כל שנותר אם לקבל נתונים, אחד הנתונים מתקבל על ידי האו"ם, הוא יהיה זמין לקחת. נתונים אלה נאספים על ידי הפקודה "receiveddata = Serial.read ();". לפי פקודה זו נתונים סידוריים מועברים ל'קבל נתונים 'בשם מספר שלם.
כפי שמוצג במעגל לחצן מחובר בצד המשדר, כאשר לחצן זה לחוץ נתונים של שמונה סיביות נשלחים על ידי TRANSMITTER (ATMEGA8) ונתונים אלה מתקבלים על ידי RECEIVER (ARDUINO UNO). בקבלת נתונים אלה בהצלחה הוא מחליף את ה- LED המחובר אליו לכיבוי וכיבוי, כדי להראות העברת נתונים מוצלחת בין שני בקר.
על ידי UART זה נוצרה תקשורת בין בקר ATMEGA8 לבין ARDUINO UNO.