תקשורת טורית – UART
תוכן עניינים
- 1 תקשורת טורית – UART
- 1.1 הקדמה:
- 1.2 מהי תקשורת טורית UART
- 1.3 מאפיינים תקשורת טורית
- 1.4 מבנה חבילת נתונים בתקשורת טורית
- 1.5 ביט זוגיות (Parity Bit):
- 1.6 תקשורת טורית בלוח ארדואינו אונו
- 1.7 קצב שליחת נתונים
- 1.8 רכיבים שעובדים בתקשורת טורית
- 1.9 שליחת נתונים בתקשורת טורית
- 1.10 חיבור בין 2 רכיבים בתשורת טורית
- 1.11
- 1.12 קבלת נתונים בתקשורת טורית
- 1.13 הגדרת רגלים נוספים לתקשורת טורית
- 1.14 דוגמא: תוכנית לשליחת נתונים דרך הגדרת רגלים נוספות בתקשורת טורית (רגלים 2,3)
מדריך למידה הסבר מפורט על תקשורת טורית – UART העובדת במיקרו-בקר ארדואינו אונו, במדריך שלפניכם ניתן למצוא פירוט בשפה פשוטה:
1. מהו?
2. עיקרון פעולה.
3. שימושים שניתן לעשות איתו בלוח ארדואינו.
4. רכיבים שעובדים בתקשורת טורית.
הפוסט מומלץ לכל תלמיד, סטודנט, מורה או מרצה בתחום ה- Arduino ובתחום הנחיית הפרויקטים.
הקדמה:
תקשורת טורית (UART) היא שיטה נפוצה מאוד להעברת מידע בצורה טורית (סידרתית) בין שני התקנים דיגיטליים, כגון בין מיקרובקר לבין מחשב או מודם. כל פין בין שני ההתקנים מיועד להעברת הנתונים באחד הכיוונים.
בפוסט זה נלמד מהי בדיוק תקשורת טורית וכיצד עובדים פרוטוקולים תקשורתיים לשידור וקליטת מידע בצורה אמינה ויעילה. נסביר מושגי יסוד חשובים כמו “סינכרון”, “קצב תעבורה”, “ביטים לשנייה”, ועוד, ונבין את היתרונות המעשיים של UART כדרך תקשורת פשוטה וזולה.
הינך מוזמן ללמוד ברמה מתקדמת על עקרונות הפעולה של תקשורת טורית מהבסיס, הכל בשפה פשוטה וברורה.
מהי תקשורת טורית UART
תקשורת טורית (UART) היא שיטה פשוטה ונפוצה להעברת מידע בין שני התקנים דיגיטליים, למשל בין מיקרו-בקר כמו ארדואינו לבין מחשב.
בתקשורת UART המידע מיוצג כסדרה של אותות חשמליים (רמות מתח גבוהות ונמוכות – ראה תמונה בהמשך) המועברות בכבל תקשורת יחיד בין שני המכשירים. כל מכשיר מחובר עם שני פינים לפחות – קלט (RX) ופלט (TX).
כדי לשדר מידע, ההתקן (למשל ארדואינו) שולח את הביטים בזה אחר זה בקצב קבוע דרך פין TX. בצד השני, ההתקן המקבל מאזין באותו קצב לאותות המתח בכניסת ה-RX שלו ומפענח אותם בחזרה למידע דיגיטלי.
עקרונות חשובים ב-UART הם קצב תעבורה קבוע מראש (כמה ביטים בשנייה), אורך מילה קבוע (5-8 ביטים לרוב), ביט תחילה ועצירה, ביט זוגיות, ותהליך סינכרון להתאמת קצב השידור והקליטה.
יתרונותיה הגדולים של תקשורת טורית הן פשטות יישום בחומרה ותוכנה, מהירות מספקת להעברת נתונים ומחיר נמוך.
לכן UART היא אחת השיטות הנפוצות להעברת נתונים בין מיקרו-בקרים לבין מחשבים במגוון יישומים כמו התקני אינטרנט של דברים, מערכות בקרה תעשייתיות, רובוטיקה ועוד.
לסיכום: תקשורת טורית מאפשרת לנו לשדר ולקלוט נתונים באופן אמין ופשוט יחסית בין כל סוגי ההתקנים הדיגיטליים.
מאפיינים תקשורת טורית
☸ תקשורת סידרתית (סריאלית) – המידע מועבר בטור, ביט אחר ביט, על גבי קו תקשורת יחיד
☸ אסינכרונית – אין שעון משותף, כל התקן פועל לפי שעונו הפנימי
☸ תקשורת דו-כיוונית – יכולה לשדר ולקלוט נתונים
☸ שידור וקליטה בקצב זהה וקבוע מראש (לדוגמה 9,600 ביט לשנייה)
☸ מבנה מוגדר היטב של מסגרת נתונים (פריים) – סיבית התחלה, נתונים, סיבית עצירה
☸ דרישות חיווט פשוטות – בדרך כלל 2 קווים בלבד לכל כיוון (TX ו-RX)
☸ ממשק חומרה פשוט וסטנדרטי (למשל UART 16550 במחשבים)
☸ שימוש נרחב במערכות משובצות מחשב ובתקשורת בין מכשירים
☸ פופולרי לחיבור התקני קצה כגון מסופים, מדפסות, מודמים ועוד
☸ פרוטוקולים נפוצים הבנויים מעל UART : RS-232, RS-422, RS-485
מבנה חבילת נתונים בתקשורת טורית
כאשר מתקן (למשל מיקרו-בקר) מעוניין לשדר נתונים, הוא בונה חבילת נתונים במבנה מוגדר הכולל מספר שדות:
ביט התחלה – ביט התחלה (Start Bit) ירידה מ’1′ לוגי ל’0′ לוגי, המסמן את תחילת השידור.
נתונים – המידע עצמו כסדרה של ביטים (בדרך כלל 5-8 ביטים).
ביט זוגיות – (Parity Bit) אופציונלי לבדיקת שגיאות.
ביט עצירה – (Stop Bit) 1 לוגי, המסמן את סוף השידור.
דוגמה
במידה ונרצה לשלוח את הנתון 0x3F (המספר 63 בעשרוני) ייבנה מסר באורך 8 ביטים:
Start Bit(0) → 00111111 → Stop Bit(1)
כלומר, ביט התחלה אחד(0), אחריו (מימין לשמאל) הביטים של הנתון(00111111), ולבסוף ביט עצירה אחד(1).
בין כל שידור של חבילה כזו יש מרווח זמן קצר ללא שידור, כך שהצד המקבל יוכל לזהות היטב את ביט ההתחלה הבא ובכך את תחילת הנתונים החדשים.
ביט זוגיות (Parity Bit):
ביט הזוגיות משמש לזיהוי שגיאות בסיסי בתקשורת טורית. הוא מוסיף ביט נוסף למסגרת הנתונים, כך שמספר הביטים עם ערך 1 יהיה תמיד זוגי (זוגיות זוגית) או אי-זוגי (זוגיות אי-זוגית). אם בקליטת המידע מספר הביטים עם ערך 1 לא מתאים לסוג הזוגיות שנקבע, המקלט יכול לזהות שאירעה שגיאה בשידור. עם זאת, ביט זוגיות לא מאפשר לתקן שגיאות או לזהות שגיאות מרובות ביטים, ולכן הוא שיטה בסיסית בלבד לווידוא שלמות הנתונים.
תקשורת טורית בלוח ארדואינו אונו
בלוח ארדואינו קיימת תקשורת טורית אחת בלבד הפועלת ברגלים 0 ורגל 1.
רגל 0 – באמצעות רגל זו מקבלים נתונים בתקשורת טורית. שמה של הרגל הוא RX קיצור למילה receive באנגלית אשר הפירוש שלה: קבלה.
רגל 1 – באמצעות רגל זו שולחים את הנתונים בתקשורת טורית. שמה של הרגל הוא Tx קיצור למילה transmit באנגלית אשר הפירוש שלה: שידור.
קצב שליחת נתונים
אנו מגדירים את תקצב שליחת הנתונים בתקשורת טורית הפקודה פעם אחת בלבד בvoid Setup באמצעות הפקודה:
;Serial.begin(9600)
רשימת קצבי השידור הנפוצים בתקשורת טורית (UART):
300 ביט לשנייה
600 ביט לשנייה
1,200 ביט לשנייה
2,400 ביט לשנייה
4,800 ביט לשנייה
9,600 ביט לשנייה
19,200 ביט לשנייה
38,400 ביט לשנייה
57,600 ביט לשנייה
115,200 ביט לשנייה
230,400 ביט לשנייה
460,800 ביט לשנייה
921,600 ביט לשנייה
ניתן לראות שיש מגוון רחב של קצבי שידור, החל מ-300 ביט לשנייה במערכות ישנות יותר, ועד למיליוני ביטים לשנייה בממשקים טוריים מהירים יותר.
הקצבים הנפוצים ביותר הם: 9,600 ביט לשנייה ו-115,200 ביט לשנייה.
קצב השידור נקבע מראש וחייב להיות זהה בין שני ההתקנים המתקשרים כדי לאפשר קליטה נכונה של הנתונים.
רכיבים שעובדים בתקשורת טורית
☸ מודולי בלוטות – HC-05, HC-06
☸ מודולי WiFi – ESP8266, ESP32
☸ מודולי LoRa ו-LoRaWAN לתקשורת מרחוק
☸ מודולי תקשורת סלולרית – SIM800L, SIM900
☸ מודולי GPS – NEO-6M, UBLOX
☸ צגי LCD ו-OLED I2C וטוריים
☸ חיישני טמפרטורה, לחות, אור ותנועה
☸ מודולי קוראי RFID ו-NFC
☸ מודולי מצלמות טוריות
☸ כרטיסי SD וקוראי כרטיסי SD
☸ ממסרים ומפסקים טוריים
שליחת נתונים בתקשורת טורית
ניתן לשלוח נתונים בתקשורת טורית באמצעות הפקודה
;()Serial.print
כל מה שנרשום בין הסוגרים () עם מרכאות ישלח בתור מלל, ללא מרכאות ישלח בתור ערך של משתנה, בפקודה זו אין ירידת שורה, במידה ונרצה לרדת שורה אנו צריכים להשתמש בפקודה:
;()Serial.println
חיבור בין 2 רכיבים בתשורת טורית
בחיבור UART בין שני התקנים נדרשים לפחות 3 חוטים – TX של צד אחד מתחבר ל-RX של הצד השני, וחוט הארקה משותף (GND).
לעתים נדרש גם חיבור של מתח הזנה (Vcc) אם אחד ההתקנים מספק כוח לשני. יש לוודא התאמה של רמות המתח בין שני הצדדים (3.3V או 5V).
קבלת נתונים בתקשורת טורית
במידה ואנו רוצים לקבל נתונים בתקשורת טורית אנו צריכים לכתוב את התוכנית הבאה:
// הגדרת משתנה val מסוג int
int val;
void setup()
{
// פותח חיבור תקשורת טורית בקצב 9600
Serial.begin(9600);
}
void loop()
{
// בודק אם יש נתונים זמינים בפורט התקשורת הטורית
if(Serial.available() > 0)
{
// קורא את הערך הבא כמספר שלם ושומר במשתנה
val = Serial.parseInt();
// מדפיס את הערך של המשתנה בשורת התקשורת הטורית
Serial.println(val);
}
}
הגדרת רגלים נוספים לתקשורת טורית
קיימת אפשרות באמצעות הפקודה לא להשתמש דווקא ברגלים 0 ו 1 בתקשורת טורית אלא באיזה 2 רגלים שאני בוחר בלוח ארדואינו.
#include
SoftwareSerial blue(2, 3);
הסבר התוכנית:
אנו הגדרנו את רגלים 2 ו 3 בתור רגלים של תקשורת טורית בלוח ארדואינו, בכך הוספנו עוד 2 רגלים בלוח הארדואינו שיכולים לתקשר בתקשורת טורית חוץ מהרגלים 0 ו 1
דוגמא: תוכנית לשליחת נתונים דרך הגדרת רגלים נוספות בתקשורת טורית (רגלים 2,3)
#include
// מגדירים את הרגליים 2,3 כרגלי תקשורת טורית
SoftwareSerial blue(2, 3);
void setup() {
// פותח חיבור תקשורת טורית בקצב של 9600 ביט לשנייה
blue.begin(9600);
}
void loop() {
// שולח את המחרוזת "שלום עולם" דרך התקשורת הטורית
blue.println("Hello World");
// המתנה של 1000 מילישניות
delay(1000);
}