במדריך זה אנו הולכים ליצור תקשורת טורית בין שני בקרי ATMEGA8 מיקרו. התקשורת שנוצרה כאן היא מסוג UART (משדר מקלט אסינכרוני אוניברסלי). על ידי תקשורת טורית זו ניתן לשתף נתונים בין שני מיקרו-בקרים, דבר הנדרש במערכות מוטבעות שונות.
רכיבים נדרשים
חומרה: ATMEGA8 (2 חתיכות), ספק כוח (5v), AVR-ISP PROGRAMMER, קבל 100uF (מחובר על פני ספק כוח), נגד 1KΩ (שתי חתיכות), LED, כפתור.
תוכנה: Atmel studio 6.1, פרוגיספ או קסם פלאש.
תרשים מעגל והסבר
תן לנו להבין את התקשורת הסדרתית במיקרו-בקרים AVR. כאן ATMEGA שולח נתונים ל- ATMEGA האחרים באופן סדרתי. יש לו אמצעי תקשורת אחר אך לצורך תקשורת קלה אנו בוחרים ב- RS232. סיכת ה- RS232 של ATMEGA8 הראשון מחוברת לסיכת RXD של ATMEGA8 השנייה.
תקשורת הנתונים שנוצרה מתוכנתת כך:
- שמונה סיביות נתונים
- שתי עצירות
- אין ביטוי לבדיקת זוגיות
- קצב שידור של 2400 BPS (ביט לשנייה)
- תקשורת אסינכרונית (אין שיתוף שעון בין שני ATMEGA8)
אז יש לנו שני רושמים קבועים עבור שני ATMEGA8 באופן שונה, כאשר אחד מהם משמש כמשדר ואחר פועל כקולט.
כעת עבור ממשק ה- RS232 בין שני מיקרו-בקרי ATmega, יש לספק את התכונות הבאות עבור ה- TRANSMITTER ו- Receiver:
1. יש לאפשר את סיכת ה- TXD (תכונת קבלת הנתונים) של הבקר הראשון עבור TRANSMITTER ואת הפין RXD של הבקר השני צריך להיות מופעל עבור RECEIVER.
2. מכיוון שהתקשורת סדרתית עלינו לדעת מתי מתקבל בית הנתונים, כך שנוכל להפסיק את התוכנית עד לקבלת בתים מלאים. זה נעשה על ידי הפעלת הפרעה מוחלטת לקבלת נתונים.
3. DATA מועבר ומתקבל לבקר במצב 8bit. אז שתי תווים יישלחו לבקר בכל פעם.
4. אין ביטים זוגיים, ביט עצירה אחד בנתונים שנשלחו על ידי המודול.
התכונות לעיל מוגדרות ברשומות הבקר; אנחנו הולכים לדון בהם בקצרה,
DARK GREY (UDRE): (TRASMITTER SIDE) סיבית זו לא מוגדרת במהלך ההפעלה, אך היא משמשת במהלך העבודה כדי לבדוק אם המשדר מוכן להעברה או לא. ראה את התוכנית ב- TRASMITTER SIDE לפרטים נוספים.
LIGHT GREY (RXC): (קבלת צד) סיבית זו לא מוגדרת במהלך ההפעלה, אך היא משמשת במהלך העבודה כדי לבדוק אם המקלט מוכן לקבל נתונים או לא. עיין בתכנית בקבלת הצד לפרטים נוספים.
VOILET (TXEN): (TRASMITTER SIDE) סיבית זו מוגדרת להפעלת סיכת משדר בצד TRASMITTER.
אדום (RXEN): (קבלת צד) סיבית זו מייצגת את מאפיין נתוני הקבלה, יש להגדיר סיביות זו על מנת שהנתונים מהמודול יתקבלו על ידי הבקר, זה גם מאפשר סיכת RXD של הבקר.
BROWN (RXCIE): יש להגדיר סיבית זו לקבלת הפרעה לאחר קבלת נתונים מוצלחת. על ידי הפעלת סיבית זו אנו מכירים, מיד לאחר קבלת נתונים של 8 סיביות. אנחנו לא מתכוונים להשתמש במעט הזה כאן ולכן הוא נשאר לבד.
PINK (URSEL): יש להגדיר סיביות זו לפני הפעלת סיביות אחרות ב- UCSRC, לאחר הגדרת סיביות נדרשות אחרות ב- UCSRC; יש להשבית את URSEL או להכניס אותו לאפס. אנחנו לא מתכוונים להשתמש במעט הזה כאן ולכן הוא נשאר לבד.
צהוב (UCSZ0, UCSZ1, UCSZ2): (קבלת צד ושידור) שלוש סיביות אלה משמשות לבחירת מספר סיביות הנתונים שאנו מקבלים או שולחים בבת אחת.
התקשורת בין שני ATMEGA מבוססת כתקשורת של שמונה סיביות. על ידי התאמת התקשורת לטבלה יש לנו, UCSZ0, UCSZ1 לאחד ו- UCSZ2 לאפס.
עלינו להגדיר את אלה הן בצד המקבל והן בצד המשדר.
ORANGE (UMSEL): (קבלת צד & TRASMITTER SIDE) סיבית זו נקבעת על סמך אם המערכת מתקשרת בצורה אסינכרונית (שניהם משתמשים בשעון אחר) או באופן סינכרוני (שניהם משתמשים באותו שעון).
שני הבקרים אינם חולקים שום שעון. מכיוון ששניהם משתמשים בשעון פנימי משלהם. אז עלינו להגדיר את UMSEL ל- 0 בשני הבקרים.
ירוק (UPM1, UPM0): (קבלת צד ושידור צד) שני ביטים אלה מותאמים על פי זוגיות הסיבית בה אנו משתמשים בתקשורת.
ה- ATMEGA מתוכנת לשלוח נתונים ללא זוגיות, מכיוון שאורך העברת הנתונים הוא קטן, אנו יכולים בבירור לצפות לאובדן נתונים או שגיאה. אז אנחנו לא קובעים כאן שום זוגיות. אז הגדרנו את שניהם UPM1, UPM0 לאפס או שהם נותרו, כי כל הביטים הם 0 כברירת מחדל.
כחול (USBS): (קבלת צד ושידור) ביט זה משמש לבחירת מספר סיביות העצירה בהן אנו משתמשים במהלך התקשורת.
התקשורת שנוצרה כאן היא מסוג אסינכרוני, כך שכדי לקבל העברת נתונים וקליטה מדויקים יותר, עלינו להשתמש בשני ביטים עצורים, ומכאן שהגדרנו USBS ל- '1' בשני הבקרים.
קצב השידור נקבע בבקר על ידי בחירת ה- UBRRH המתאים.
ערך ה- UBRRH נבחר על ידי קצב שידור מצולב ותדר גביש המעבד.
אז על ידי הפניה צולבת ערך UBRR נתפס כ- '25', ולכן קצב השידור נקבע.
כפי שמוצג במעגל לחצן מחובר בצד המשדר. כאשר לחצן זה נלחץ נשלח נתונים של שמונה סיביות על ידי TRANSMITTER ונתונים אלה מתקבלים על ידי RECEIVER. בקבלת נתונים אלה בהצלחה הוא מחליף את ה- LED המחובר אליו למצב מופעל וכיבוי, שמראה העברת נתונים מוצלחת בין שני בקר.