ที่นี่เราจะไปสร้างการสื่อสารระหว่างไมโครคอนโทรลเลอร์ ATmega8 และ Arduino Uno การสื่อสารที่สร้างขึ้นที่นี่คือประเภทUART (Universal Asynchronous Receiver Transmitter) เป็นการสื่อสารแบบอนุกรม โดยข้อมูลการสื่อสารแบบอนุกรมนี้สามารถใช้ร่วมกันระหว่างตัวควบคุมสองตัวซึ่งจำเป็นในแอปพลิเคชันระบบฝังตัวต่างๆ
ในระบบฝังตัวเราต้องมีความรู้พื้นฐานเกี่ยวกับการสื่อสารของระบบดังนั้นเราจึงทำโครงการนี้ ในโครงการนี้เราจะพูดถึงระบบการสื่อสารพื้นฐานและเราจะส่งข้อมูลบางส่วนจากเครื่องส่งไปยังเครื่องรับแบบอนุกรม
ในโครงการนี้ ATMEGA8 ทำหน้าที่เป็น TRANSMITTER และ ARDUINO UNO ทำหน้าที่เป็น RECIVER ในการสื่อสารแบบอนุกรมเราจะส่งข้อมูลแบบ BIT BY BIT จนกว่าจะถ่ายโอนข้อมูล BYTE อย่างสมบูรณ์ ข้อมูลอาจมีขนาด 10 บิต แต่ตอนนี้เราจะเก็บไว้ที่ 8BITS
ส่วนประกอบที่จำเป็น
ฮาร์ดแวร์: ATMEGA8, ARDUINO UNO, พาวเวอร์ซัพพลาย (5v), AVR-ISP PROGRAMMER, ตัวเก็บประจุ 100uF (เชื่อมต่อกับแหล่งจ่ายไฟ), ตัวต้านทาน1KΩ (สองชิ้น), LED, ปุ่ม
ซอฟต์แวร์: Atmel studio 6.1, progisp หรือ flash magic, ARDUINO NIGHTLY
แผนภาพวงจรและคำอธิบาย
ก่อนที่เราจะหารือเกี่ยวกับวงจรและการเขียนโปรแกรมสำหรับเครื่องส่งและรับเราต้องทำความเข้าใจเกี่ยวกับการสื่อสารแบบอนุกรมATMEGA ที่นี่จะส่งข้อมูลไปยัง UNO แบบอนุกรมตามที่กล่าวไว้ก่อนหน้านี้
แต่ก็มีโหมดอื่น ๆ ของการสื่อสารเช่นการสื่อสารนายทาส, การสื่อสาร JTAGแต่สำหรับการสื่อสารที่ง่ายที่เราจะเลือกRS232ที่นี่เราจะเชื่อมต่อ PIN TXD (เครื่องส่งสัญญาณ) ของ ATMEGA8 กับ RXD (ตัวรับ) PIN ของ ARDUINO UNO
การสื่อสารข้อมูลที่จัดตั้งขึ้นถูกตั้งโปรแกรมให้มี:
- ข้อมูลแปดบิต
- สองบิตหยุด
- ไม่มีบิตตรวจสอบความเท่าเทียมกัน
- อัตราบอด 9600 BPS (Bits ต่อวินาที)
- การสื่อสารแบบอะซิงโครนัส (ไม่มีนาฬิการ่วมระหว่าง ATMEGA8 และ UNO (ทั้งสองมีหน่วยนาฬิกาต่างกัน)
สำหรับการสร้างUART ระหว่าง Arduino Uno และ ATMEGA8เราจำเป็นต้องตั้งโปรแกรมการตั้งค่าให้ถูกต้อง สำหรับสิ่งนี้เราจำเป็นต้องให้พารามิเตอร์ดังกล่าวข้างต้นเหมือนกันที่ปลายทั้งสองด้าน ในตัวนี้ทำหน้าที่เป็น TRANSMITTER และทำหน้าที่อื่น ๆ เป็น RECEIVER เราจะพูดถึงการตั้งค่าแต่ละด้านด้านล่าง
ตอนนี้สำหรับอินเทอร์เฟซ RS232คุณสมบัติต่อไปนี้ต้องเป็นที่พอใจสำหรับฝั่ง TRANSMITTER (ATMEGA8):
1. ต้องเปิดใช้งานพิน TXD (คุณสมบัติการรับข้อมูล) ของคอนโทรลเลอร์ตัวแรกสำหรับ TRANSMITTER
2. เนื่องจากการสื่อสารเป็นแบบอนุกรมเราจึงจำเป็นต้องทราบเมื่อใดก็ตามที่ได้รับข้อมูลเพื่อที่เราจะสามารถหยุดโปรแกรมได้จนกว่าจะได้รับไบต์ที่สมบูรณ์ ซึ่งทำได้โดยการเปิดใช้งานการรับข้อมูลขัดจังหวะโดยสมบูรณ์
3. ข้อมูลถูกส่งและรับไปยังคอนโทรลเลอร์ในโหมด 8 บิต ดังนั้นสองตัวอักษรจะถูกส่งไปยังคอนโทรลเลอร์พร้อมกัน
4. ไม่มีพาริตีบิตบิตหยุดหนึ่งในข้อมูลที่ส่งโดยโมดูล
คุณสมบัติข้างต้นถูกตั้งค่าในรีจิสเตอร์คอนโทรลเลอร์ เราจะพูดถึงพวกเขาสั้น ๆ:
DARK GREY (UDRE): บิตนี้ไม่ได้ตั้งค่าระหว่างการเริ่มต้น แต่จะใช้ในระหว่างการทำงานเพื่อตรวจสอบว่าเครื่องส่งสัญญาณพร้อมที่จะส่งหรือไม่ ดูโปรแกรมใน TRASMITTER SIDE สำหรับรายละเอียดเพิ่มเติม
VOILET (TXEN): บิตนี้ถูกตั้งค่าสำหรับการเปิดใช้งานพินเครื่องส่งสัญญาณบน TRASMITTER SIDE
สีเหลือง (UCSZ0, UCSZ1 และ UCSZ2): บิตทั้งสามนี้ใช้สำหรับเลือกจำนวนบิตข้อมูลที่เรากำลังรับหรือส่งในครั้งเดียว
การสื่อสารระหว่างสองด้านถูกสร้างขึ้นเป็นการสื่อสารแบบแปดบิต โดยการจับคู่การสื่อสารกับตารางเรามี UCSZ0, UCSZ1 เป็นหนึ่งและ UCSZ2 เป็นศูนย์
สีส้ม (UMSEL): บิตนี้ถูกตั้งค่าตามว่าระบบกำลังสื่อสารแบบอะซิงโครนัส (ทั้งคู่ใช้นาฬิกาต่างกัน) หรือซิงโครนัส (ทั้งคู่ใช้นาฬิกาเดียวกัน)
ทั้งสองระบบไม่แบ่งปันนาฬิกาใด ๆ เนื่องจากทั้งคู่ใช้นาฬิกาภายในของตัวเอง ดังนั้นเราต้องตั้งค่า UMSEL เป็น 0 ในตัวควบคุมทั้งสอง
สีเขียว (UPM1, UPM0): สองบิตนี้ได้รับการปรับตามความเท่าเทียมกันของบิตที่เราใช้ในการสื่อสาร
ข้อมูล ATMEGA ที่นี่ถูกตั้งโปรแกรมให้ส่งข้อมูลโดยไม่มีความเท่าเทียมกันเนื่องจากความยาวในการส่งข้อมูลมีขนาดเล็กเราจึงสามารถคาดหวังได้อย่างชัดเจนว่าข้อมูลสูญหายหรือผิดพลาด ดังนั้นเราจึงไม่ได้ตั้งค่าความเท่าเทียมกันที่นี่ ดังนั้นเราจึงตั้งค่าทั้ง UPM1, UPM0 เป็นศูนย์หรือเหลือไว้เพราะบิตทั้งหมดเป็น 0
BLUE (USBS): บิตนี้ใช้สำหรับเลือกจำนวนบิตหยุดที่เราใช้ระหว่างการสื่อสาร
การสื่อสารทำให้เธอเป็นประเภทอะซิงโครนัสดังนั้นเพื่อการรับส่งข้อมูลและการรับข้อมูลที่แม่นยำยิ่งขึ้นเราจำเป็นต้องใช้บิตหยุดสองตัวดังนั้นเราจึงตั้งค่า USBS เป็น '1' ในด้าน TRANSMITTER..
อัตราการส่งข้อมูลถูกตั้งค่าในตัวควบคุมโดยเลือก UBRRH ที่เหมาะสม:
ค่า UBRRH ถูกเลือกโดยอัตราการส่งข้อมูลอ้างอิงข้ามและความถี่คริสตัลของ CPU:
ดังนั้นโดยค่า UBRR การอ้างอิงไขว้จะถูกมองว่าเป็น '6' ดังนั้นจึงกำหนดอัตราการส่งข้อมูล
ด้วยเหตุนี้เราจึงได้กำหนดการตั้งค่าบน TRANSMITTER SIDE เราจะพูดถึงการรับ SIDE ตอนนี้
การเปิดใช้งานการสื่อสารแบบอนุกรมใน UNO สามารถทำได้โดยใช้คำสั่งเดียว
|
การสื่อสารที่เราคาดว่าจะสร้างขึ้นนั้นทำโดยอัตรา BAUD ที่ 9600 บิตต่อวินาที ดังนั้นสำหรับ UNO ในการสร้างอัตราการส่งข้อมูลดังกล่าวและเพื่อเริ่มการสื่อสารแบบอนุกรมเราใช้คำสั่ง "Serial.begin (9600);" นี่คืออัตราการรับส่งข้อมูล 9600 และสามารถเปลี่ยนแปลงได้
ตอนนี้ทั้งหมดที่เหลือถ้าจะรับข้อมูลหนึ่งข้อมูลจะได้รับจาก UNO มันจะพร้อมใช้งานสำหรับการรับ ข้อมูลนี้มารับโดยคำสั่ง“ receiveddata = Serial.read ();” โดยคำสั่งนี้ข้อมูลอนุกรมจะถูกนำไปที่ 'receiveddata' ชื่อจำนวนเต็ม
ดังแสดงในวงจรปุ่มที่เชื่อมต่อที่ด้านเครื่องส่งสัญญาณเมื่อกดปุ่มนี้ข้อมูลแปดบิตจะถูกส่งโดย TRANSMITTER (ATMEGA8) และรับข้อมูลนี้โดย RECEIVER (ARDUINO UNO) ในการรับข้อมูลนี้สำเร็จมันจะสลับ LED ที่เชื่อมต่อกับมันเป็นเปิดและปิดเพื่อแสดงการถ่ายโอนข้อมูลที่ประสบความสำเร็จระหว่างตัวควบคุมสองตัว
โดยการสื่อสาร UART ระหว่างคอนโทรลเลอร์ ATMEGA8 และ ARDUINO UNO ได้รับการจัดตั้งขึ้นเรียบร้อยแล้ว