# Interfacing and Communication

## UART

&#x20;     UART หรือชื่อเต็ม Universal Asynchronous Receiver and Transmitter เป็นการสื่อสารข้อมูลผ่านพอร์ตอนุกรมแบบอะซิงโครนัส แบบ full-duplex ที่สามารถสื่อสารได้สองทางในเวลาเดียวกันได้ โดยการส่งข้อมูล แบบ UART ไม่จำเป็นต้องใช้ Clock ในการกำหนดจังหวะการส่งข้อมูล จะใช้การส่งแบบ กำหนด 1บิต เป็นตัวบอกการเริ่มต้นส่งข้อมูล (Start) แล้วตามด้วยข้อมูลที่ต้องการส่งและจบด้วยใช้ 1บิต จบการส่งข้อมูล (Stop) การส่งข้อมูลแบบ UART ใช้สำหรับการสื่อสารระหว่าง MCU to MCU ผ่าน Pin TX,RX  และเพื่อให้สามารถส่งข้อมูลได้ไกลจึงมีการนำมาตรฐานRS232 และ RS485 มาใช้  ซึ่งทั้งสองมาตรฐานมี IC ที่ช่วยในการปรับระดับแรงดันให้กับ MCU ที่มีการสื่อสารกันผ่าน UART&#x20;

![แหล่งที่มา: https://www.circuitbasics.com/basics-uart-communication/](https://1856353139-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MClo3nC-1US0rbK8Qau%2Fuploads%2Fs3M1Y8iPKLlcUsY5wpc6%2FIntroduction-to-UART-Basic-Connection-Diagram.png?alt=media\&token=5de1de2b-8016-4096-81e7-9b8d2cced11d)

### RS 232

เป็นการส่งแบบอนุกรม (serial) แบบ full duplex ได้เช่นเดียวกับแบบ UART แต่การส่งผ่าน RS 232 นั้นจะไปได้ไกลกว่าเนื่องจากกำลังส่งนั้นสูงกว่า (ใช้แรงดันตั้งแต่ -15V ถึง +15V) การส่งนั้นสามารถไปได้ไกลสูงสุดที่ 15 เมตรและ bitrate สูงสุดที่ 20 Kbps

![การสื่อสารจาก MCU ไป MCU แหล่งที่มา: blog.thaieasyelec.com](https://1856353139-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MClo3nC-1US0rbK8Qau%2F-MI8D8yrbOzmYaikVSa2%2F-MI8GKlmpgRxj9eYbovM%2Fimage.png?alt=media\&token=198ed75a-3891-4303-aba2-593076399474)

ตัวอย่าง [Schematic](https://docs.m5stack.com/#/en/app/demo-board?id=schematic) RS232 post on [M5Stack Demo Board](https://docs.m5stack.com/#/en/app/demo-board) &#x20;

### RS 485

เป็นการส่งแบบอนุกรม (serial) แบบ half-duplex ซึ่งหมายความว่าจะไม่สามารถรับและส่งข้อมูลในเวลาเดียวกันได้ รูปแบบการส่งข้อมูลจะถูกส่งไปยังสาย A และ B แต่ข้อมูลภายในสายจะเป็นส่วนกลับของกันและกัน

![Communication-via-RS485-3 แหล่งที่มา: www.janitza.com](https://paper-attachments.dropbox.com/s_05785FC9F0858DAD40E12BDBD752FF11EA3B8365CAB9FABADC1480EAB0133C84_1601110586475_image.png)

\
การส่งแบบสายคู่นี้ทำให้ลดสัญญาณรบกวนได้เมื่อถอดสัญญาณออกมา ทำให้สามารถส่งได้ไกลถึง 3 กิโลเมตรและมี bitrate สูงถึง 10Mbps&#x20;

## I2C&#x20;

&#x20;          I2C เป็นการสื่อสารแบบอนุกรม(Serial communication bus) สามารถส่งข้อมูลแบบ half-duplex ได้ ใช้ช่อง 2 สายคือ Serial Data (SDA) สำหรับรับส่งข้อมูล และ Serial Clock (SCL) สำหรับส่งสัญญาณ clock โดยมีตัว Master จะเป็นตัวกำหนดค่าความถี่ clock ส่งไปยัง slave ตัวอื่นๆ ผ่านทางสาย SCL และข้อมูลการสื่อสารระหว่าง Master และ slave จะถูกส่งผ่านทางสาย SDA&#x20;

&#x20;          การสื่อสารจะเป็นแบบการสื่อสารสองทางไปกลับระหว่าง Master กับ Slave ซึ่ง Master จะเป็นตัวระบุเส้นทางของข้อมูลว่าจะติดต่อกับ slave ตัวใด โดยการระบุตำแหน่ง address ของ slave ตัวนั้น ๆ แล้วทำการเริ่มรับส่งข้อมูลกัน

![Basics of the I2C Communication Protocol แหล่งที่มา: www.circuitbasics.com](https://www.circuitbasics.com/wp-content/uploads/2016/01/Introduction-to-I2C-Single-Master-Single-Slave.png)

&#x20;     จากภาพด้านล่างเป็นการต่อ I2C ของอุปกรณ์หลายตัวเข้ามายัง I2C เดียวกัน สำหรับ i2C ทั้ง SDA และ SCL สองสายจำเป็นต้องต่อ Pull-up resistor ด้วยเพราะเป็น Open-drain ทั้งคู่  เพื่อให้มีสถานะเป็น High &#x20;

![I2C communication แหล่งที่มา: www.geeksforgeeks.org](https://lh6.googleusercontent.com/EcjoFLlYTIdlhi6SNN-AbPtokNYe06tUWXUmCfWQSrpZPDWuvm6hEYl_ImgpzjJy5L_ImqWE8uENEHFKocf6P6dWr1srlVmuFsd0bR4GCGokO_ExgbP2cLJTA6aPgiD7IoZg9KeaJF2V)

&#x20;   สำหรับการทำงาน I2C เมื่อต้องการส่งข้อความจะมีชุดข้อมูลตามภาพด้านล่าง โดยในแต่ละชุดข้อความจะทำการส่งสัญญาณให้ไปยัง devices หรือ Slaves ทุกตัวที่อยู่ในสายสื่อสารวงจรเดียวกัน Slave รอรับคำสั่งจาก Master เมื่อมีการเรียก address I2C ตรงกับ address ของตัวเอง Slave ที่ address ตรงตามที่ master เรียกจะทำการส่งข้อมูลตอบกลับซึ่งมี Data frame หรือชุดข้อมูลดังตัวอย่างภาพด้านล่าง

![ชุดข้อมูล i2C แหล่งที่มา: https://www.circuitbasics.com](https://1856353139-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MClo3nC-1US0rbK8Qau%2Fuploads%2FsIvjzfuDDmI9FXTrJHqZ%2FIntroduction-to-I2C-Message-Frame-and-Bit-2.png?alt=media\&token=9e892336-e6d1-434a-b60a-c548afe49a90)

ตัวอย่าง DiagramsReference sequence ของ DHT12

![DiagramsReference sequence แหล่งที่มา: datasheet page 7 ](https://lh3.googleusercontent.com/Ha9nzt710mYLrx1zCwM78-qNOVrRUmFqZlS3U_b8hOSP35VDPUDEB94FgfHvRtutVXG9M_TZYQGILeI7kfDeIx25GtMxFwqNgaGMR9kqp1nb7U_kCKBwA6OWyAjfs8hOfaeEB8XpecCV)

## SPI

SPI ทำงานในรูปแบบที่ให้อุปกรณ์ตัวหนึ่งทำหน้าที่เป็น MASTER ในขณะที่อีกตัวหนึ่งทำหน้าที่เป็น SLAVE รูปแบบการส่งข้อมูลเป็นแบบ Full-duplex ซึ่ง MASTER และ SLAVE สามารถส่งข้อมูลไปกลับหากันได้ การสื่อสารแบบ SPI ไม่มีการกำหนดแอดเดรส แต่Master จะเป็นตัวควบคุมการส่งข้อมูลโดยเป็นกำหนดการเรียกใช้งานขา SS ที่ต้องการสื่อสาร ซึ่งขึ้นอยู่กับผู้ใช้งานเป็นคนกำหนดเอง

![SPI interface แหล่งที่มา: en.wikipedia.org](https://1856353139-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MClo3nC-1US0rbK8Qau%2F-MI8D8yrbOzmYaikVSa2%2F-MI8JmyiejvOxVDZfn1L%2Fimage.png?alt=media\&token=0d77f200-0b6b-406e-ac70-6bcb1ae1aad6)

## Logic analyzer <a href="#logic-analyzer" id="logic-analyzer"></a>

เป็นเครื่องมือใช้อ่านและถอดสัญญาณดิจิตอลที่มีการส่งข้อมูลที่ใช้โปรโตคอลประเภท UART, I2C, SPI, CAN เป็นต้น

![Logic analyzer www.qdkingst.com รุ่น LA1016logic analyzer ](https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MClo3nC-1US0rbK8Qau%2Fuploads%2FxTs6uxOXPy3St125J792%2Fimage.png?alt=media\&token=c0dc2a64-8c9b-42b8-87c2-f6f40c846cb8)

แต่ละรุ่นจะมีความสามารถในอ่านค่าได้ไม่เท่ากัน โดยรุ่นที่ยกตัวอย่างมานี้คือรุ่น LA1016 เป็นรุ่นที่มี 16 channel เก็บค่า sampling rate ได้ถึง 100Hz สามารถใช้วิเคราะห์ลอจิกของโปรโตคอลต่าง ๆ ได้ดังนี้

![Protocol Support List](https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MClo3nC-1US0rbK8Qau%2Fuploads%2FU9QsDfnx6k4WW1c0pqjY%2Fimage.png?alt=media\&token=bca393ac-c12f-43ea-8301-cf374e8faae2)
