ในบทช่วยสอนนี้เราจะสร้างการสื่อสารแบบอนุกรมระหว่างไมโครคอนโทรลเลอร์ ATMEGA8 สองตัว การสื่อสารที่สร้างขึ้นที่นี่คือประเภทUART (Universal Asynchronous Receiver Transmitter) โดยข้อมูลการสื่อสารแบบอนุกรมนี้สามารถใช้ร่วมกันระหว่างไมโครคอนโทรลเลอร์สองตัวซึ่งจำเป็นในระบบฝังตัวต่างๆ
ส่วนประกอบที่จำเป็น
ฮาร์ดแวร์: ATMEGA8 (2 ชิ้น), แหล่งจ่ายไฟ (5v), AVR-ISP PROGRAMMER, ตัวเก็บประจุ 100uF (เชื่อมต่อกับแหล่งจ่ายไฟ), ตัวต้านทาน1KΩ (สองชิ้น), LED, ปุ่ม
ซอฟต์แวร์: Atmel studio 6.1, progisp หรือ flash magic
แผนภาพวงจรและคำอธิบาย
ขอให้เราเข้าใจการสื่อสารแบบอนุกรมในไมโครคอนโทรลเลอร์ AVR ที่นี่ ATMEGA ส่งข้อมูลไปยัง ATMEGA อื่นแบบอนุกรม มีโหมดการสื่อสารอื่น ๆ แต่เพื่อการสื่อสารที่ง่ายเราเลือก RS232 พิน RS232 ของ ATMEGA8 ตัวแรกเชื่อมต่อกับพิน RXD ของ ATMEGA8 ตัวที่สอง
การสื่อสารข้อมูลที่จัดตั้งขึ้นถูกตั้งโปรแกรมให้มี:
- ข้อมูลแปดบิต
- สองบิตหยุด
- ไม่มีบิตตรวจสอบความเท่าเทียมกัน
- อัตราบอด 2400 BPS (บิตต่อวินาที)
- การสื่อสารแบบอะซิงโครนัส (ไม่มีนาฬิการ่วมระหว่าง ATMEGA8 สองเครื่อง)
ดังนั้นเราจึงมีการลงทะเบียนสองชุดสำหรับ ATMEGA8 สองชุดที่แตกต่างกันโดยที่หนึ่งทำหน้าที่เป็น TRANSMITTER และอื่น ๆ ทำหน้าที่เป็น RECEIVER
ตอนนี้สำหรับการเชื่อมต่อ RS232 ระหว่างไมโครคอนโทรลเลอร์ ATmega สองตัวคุณสมบัติต่อไปนี้จะต้องเป็นที่พอใจสำหรับตัวส่งและตัวรับ
1. ต้องเปิดใช้งานพิน TXD (คุณสมบัติการรับข้อมูล) ของคอนโทรลเลอร์ตัวแรกสำหรับขา TRANSMITTER และ RXD ของคอนโทรลเลอร์ตัวที่สองสำหรับ RECEIVER
2. เนื่องจากการสื่อสารเป็นแบบอนุกรมเราจึงจำเป็นต้องทราบเมื่อใดก็ตามที่ได้รับไบต์ข้อมูลเพื่อที่เราจะสามารถหยุดโปรแกรมได้จนกว่าจะได้รับไบต์ที่สมบูรณ์ ซึ่งทำได้โดยการเปิดใช้งานการรับข้อมูลขัดจังหวะโดยสมบูรณ์
3. ข้อมูลถูกส่งและรับไปยังคอนโทรลเลอร์ในโหมด 8 บิต ดังนั้นสองตัวอักษรจะถูกส่งไปยังคอนโทรลเลอร์พร้อมกัน
4. ไม่มีพาริตีบิตบิตหยุดหนึ่งในข้อมูลที่ส่งโดยโมดูล
คุณสมบัติข้างต้นถูกตั้งค่าในรีจิสเตอร์คอนโทรลเลอร์ เราจะพูดถึงพวกเขาสั้น ๆ
DARK GREY (UDRE): (TRASMITTER SIDE) บิตนี้ไม่ได้ถูกตั้งค่าระหว่างการเริ่มต้น แต่จะใช้ในระหว่างการทำงานเพื่อตรวจสอบว่าเครื่องส่งสัญญาณพร้อมที่จะส่งหรือไม่ ดูโปรแกรมใน TRASMITTER SIDE สำหรับรายละเอียดเพิ่มเติม
LIGHT GREY (RXC): (RECEIVING SIDE) บิตนี้ไม่ได้ถูกตั้งค่าระหว่างการเริ่มต้น แต่จะใช้ในระหว่างการทำงานเพื่อตรวจสอบว่าเครื่องรับพร้อมที่จะรับข้อมูลหรือไม่ ดูโปรแกรมเกี่ยวกับการรับด้านสำหรับรายละเอียดเพิ่มเติม
VOILET (TXEN): (TRASMITTER SIDE) บิตนี้ถูกตั้งค่าสำหรับการเปิดใช้งานพินเครื่องส่งสัญญาณที่ด้าน TRASMITTER
RED (RXEN): (RECEIVING SIDE) บิตนี้แสดงถึงคุณสมบัติการรับข้อมูลต้องตั้งค่าบิตนี้เพื่อให้ข้อมูลจากโมดูลได้รับจากคอนโทรลเลอร์และยังเปิดใช้งานพิน RXD ของคอนโทรลเลอร์
BROWN (RXCIE): ต้องตั้งค่าบิตนี้สำหรับการขัดจังหวะหลังจากการรับข้อมูลสำเร็จ เมื่อเปิดใช้งานบิตนี้เราจะได้รับรู้ทันทีหลังจากได้รับข้อมูล 8 บิต เราจะไม่ใช้บิตตรงนี้ดังนั้นจึงถูกทิ้งไว้เฉยๆ
PINK (URSEL): ต้องตั้งค่าบิตนี้ก่อนเปิดใช้งานบิตอื่นใน UCSRC หลังจากตั้งค่าบิตที่จำเป็นอื่น ๆ ใน UCSRC ต้องปิดใช้งาน URSEL หรือทำให้เป็นศูนย์ เราจะไม่ใช้บิตตรงนี้ดังนั้นจึงถูกทิ้งไว้เฉยๆ
สีเหลือง (UCSZ0, UCSZ1, UCSZ2): (รับด้านข้าง & ด้านเครื่องส่งสัญญาณ) บิตทั้งสามนี้ใช้สำหรับเลือกจำนวนบิตข้อมูลที่เรารับหรือส่งในครั้งเดียว
การสื่อสารระหว่าง ATMEGA สองเครื่องถูกสร้างขึ้นเป็นการสื่อสารแบบแปดบิต โดยการจับคู่การสื่อสารกับตารางเรามี UCSZ0, UCSZ1 เป็นหนึ่งและ UCSZ2 เป็นศูนย์
เราต้องตั้งค่าเหล่านี้ทั้งด้านรับและส่ง
ORANGE (UMSEL): (รับด้านข้าง & ด้าน TRASMITTER) บิตนี้ตั้งค่าตามว่าระบบกำลังสื่อสารแบบอะซิงโครนัส (ทั้งคู่ใช้นาฬิกาต่างกัน) หรือซิงโครนัส (ทั้งคู่ใช้นาฬิกาเดียวกัน)
ตัวควบคุมทั้งสองไม่ใช้นาฬิการ่วมกัน เนื่องจากทั้งคู่ใช้นาฬิกาภายในของตัวเอง ดังนั้นเราต้องตั้งค่า UMSEL เป็น 0 ในตัวควบคุมทั้งสอง
GREEN (UPM1, UPM0): (RECEIVING SIDE & TRASMITTER SIDE) สองบิตนี้ได้รับการปรับตามความเท่าเทียมกันของบิตที่เราใช้ในการสื่อสาร
ATMEGA ได้รับการตั้งโปรแกรมให้ส่งข้อมูลโดยไม่มีความเท่าเทียมกันเนื่องจากความยาวในการส่งข้อมูลมีขนาดเล็กเราจึงสามารถคาดหวังได้อย่างชัดเจนว่าข้อมูลสูญหายหรือผิดพลาด ดังนั้นเราจึงไม่ได้ตั้งค่าความเท่าเทียมกันที่นี่ ดังนั้นเราจึงตั้งค่าทั้ง UPM1, UPM0 ให้เป็นศูนย์หรือเหลือเพราะบิตทั้งหมดเป็น 0 โดยค่าเริ่มต้น..
สีน้ำเงิน (USBS): (รับด้านข้างและด้านเครื่องส่งสัญญาณ) บิตนี้ใช้สำหรับเลือกจำนวนบิตหยุดที่เราใช้ระหว่างการสื่อสาร
การสื่อสารที่สร้างขึ้นที่นี่เป็นประเภทอะซิงโครนัสดังนั้นเพื่อการรับส่งข้อมูลและการรับข้อมูลที่แม่นยำยิ่งขึ้นเราต้องใช้บิตหยุดสองตัวดังนั้นเราจึงตั้งค่า USBS เป็น '1' ในคอนโทรลเลอร์ทั้งสอง
อัตราการรับส่งข้อมูลถูกกำหนดไว้ในตัวควบคุมโดยเลือก UBRRH ที่เหมาะสม
ค่า UBRRH ถูกเลือกโดยอัตราการส่งข้อมูลอ้างอิงข้ามและความถี่คริสตัลของ CPU
ดังนั้นโดยค่า UBRR การอ้างอิงไขว้จะถูกมองว่าเป็น '25' ดังนั้นจึงกำหนดอัตราการส่งข้อมูล
ดังแสดงในวงจรปุ่มเชื่อมต่อที่ด้านเครื่องส่งสัญญาณ เมื่อกดปุ่มนี้ข้อมูลแปดบิตจะถูกส่งโดย TRANSMITTER และ RECEIVER ได้รับข้อมูลนี้ ในการรับข้อมูลนี้สำเร็จจะสลับ LED ที่เชื่อมต่อกับเปิดและปิดซึ่งแสดงการถ่ายโอนข้อมูลที่ประสบความสำเร็จระหว่างตัวควบคุมสองตัว