# 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)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.aic-eec.com/embedded-systems/resources/basic-hardware-and-firmware/interfacing-and-communication.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
