Page 1

Proto Knowledge

Communication Noomnamon

O R P e e B

X

จำกตอนที่ 3 ที่เรำได้ลองจับคู่ไมโครคอนโทรลเลอร์ 2 ตัวมำติดต่อ แลกเปลี่ยนข้อมูลแบบไร้สำยโดยใช้โดูล XBee-PRO เป็นตัวกลำง มำถึง ตอนที่ 4 ซึ่งเป็นตอนจบของซีซั่นแรก (ว่ำกันเป็นภำพยนต์ซีรีส์แบบฝรั่ง) จะน�ำเสนอตัวอย่ำงกำรสื่อสำรข้อมูลระหว่ำงระบบสมองกลฝังตัว (ซึ่งแทน ด้วยไมโครคอนโทรลเลอร์ ATmega16) 3 ชุดแบบไร้สำยครับ….ขอย�้ำ 3 ชุด ในลักษณะที่เรียกว่ำ Point-to-Multipoint ซึ่งเชื่อเหลือเกินว่ำ คุณๆ ที่ ติดตำมเรื่องรำวของระบบสมองกลฝังตัวกับกำรสื่อสำรข้อมูลแบบไร้สำยคง หำอ่ำนตัวอย่ำงในลักษณะนี้ได้ไม่ง่ำย แต่ที่นี่.. TPE เรำจัดให้ครับ…

กําËนดเป‡าËมาย ก�ำหนดให้มีระบบสมองกลฝังตัว 3 ชุดซึ่งเลือกใช้วงจรไมโครคอน โทรลเลอร์ ATmega16 ในแบบเดียวกับที่น�ำเสนอไปในตอนที่ 3 (ตีพิมพ์ ใน TPE #9 เมษำยน 2553) โดยต่อกับสวิตช์และ LED อย่ำงละ 1 ตัว อุปกรณ์ส�ำหรับสื่อสำรไร้สำยเลือกใช้โมดูล XBee-PRO ติดตั้งเข้ำกับไมโคร คอนโทรลเลอร์ ATmega16 ฝังละ 1 ตัว ก�ำหนดให้วงจรหนึ่งเป็นมำสเตอร์ ส่วนที่เหลือเป็นสเลฟ เป้ำหมำยคือ ทดลองสร้ำงระบบควบคุมในแบบเครือข่ำยอย่ำงง่ำย โดยมีวงจรมำสเตอร์ 1 ชุดรับส่งข้อมูลควบคุมกับวงจรสเลฟอีก 2 ชุด วงจรไมโครคอนโทรลเลอร์ที่ท�ำหน้ำที่เป็นมำสเตอร์ จะส่งค�ำสั่งซึ่งตรง กับอักขระ ‘1’ หรือ ‘2’ ไปยังวงจรสเลฟจำกกำรกดสวิตช์ซึ่งมี 2 ตัวเพื่อกลับ สถำนะของ LED ที่ต่อกับไมโครคอนโทรลเลอร์ในวงจรสเลฟเป้ำหมำย

าย บ ส  ร ไ าร ับระบ จบ ส อ ่ ื ส สําหร อน ง ้ ึ ผ ฝูง Hz งตัว ต 2.4G งกลฝ สมอ

วงจรไมโครคอนโทรลเลอร์ ที่ ท� ำ หน้ ำ ที่ เ ป็ น สเลฟตั ว ที่ 1 จะรอรั บ ค�ำสั่งซึ่งตรงกับอักขระ ‘1’ จำกมำสเตอร์เพื่อกลับสถำนะ LED ที่ต่อกับ ไมโครคอนโทรลเลอร์ วงจรไมโครคอนโทรลเลอร์ ที่ ท� ำ หน้ ำ ที่ เ ป็ น สเลฟตั ว ที่ 2 จะรอรั บ ค�ำสั่งซึ่งตรงกับอักขระ ‘2’ จำกมำสเตอร์เพื่อกลับสถำนะ LED ที่ต่อกับ ไมโครคอนโทรลเลอร์ ดังแสดงไดอะแกรมกำรท�ำงำนในรูปที่ 1 เตรียมยØทโ¸ปกร³

ประกอบดวย

1. โมดูล XBee-PRO 3 ตัว

2. บอร์ดเชื่อมต่อ XBee-PRO กับคอมพิวเตอร์ (จำก TPE #7 และ 8 ก็คือบอร์ด ZX-XBee)

มาถึ ง ตอนจบของการน� า เสนอตั ว อย่ า ง การน� า ไมโครคอนโทรลเลอร์ ม าคุ ย กั น แบบไร้สาย ทีนี้ว่ากัน 3 ตัว แบบว่าสร้าง เครือข่ายแบบย่อมๆ กันเลยทีเดียว 34

The Prototype Electronics

3. บอร์ดเชื่อมต่อ XBee-PRO กับไมโครคอนโทรลเลอร์ ในที่นี้ใช้บอร์ด ADX-XBee จำก INEX (อำจไม่ต้องใช้หำกท�ำกำรต่อวงจรตรงตำมรูปที่ 2 และ 3) 4. บอร์ดไมโครคอนโทรลเลอร์ ATmega16 จะใช้ของค่ำยไหนอย่ำงไร หรืออยำกท�ำเอง ก็ดูวงจรได้จำกรูปที่ 2 และ 3 5. เครื่องโปรแกรมไมโครคอนโทรลเลอร์ AVR แบบ ISP ในที่นี้ใช้รุ่น PX-4000 จำก INEX


MY = AB12, DH = 00 DL = 01 ATmega16

MY = 01, DH = 00 DL = FFFF

XBee-TxD XBee-RxD

ATmega16

วงจรสเลฟชุดที่ 1

คลื่นวิทยุ 2.4GHZ

MY = 05, DH = 00 DL = 01

XBee-TxD

ATmega16

XBee-RxD

วงจรมาสเตอร

รูปที่ 1 ไดอะแกรมการท�างานของระบบควบคุมไร้สายแบบ Multipoint โดยใช้โมดูล XBee-PRO อย่างง่าย

เตรียมการสําËรับโมดÙล XBee-PRO (1) ติดตั้งโมดูล XBee-PRO ตัวที่ 1 ซึ่งก�ำหนดให้ใช้ในวงจรสเลฟชุด ที่ 1 ลงบนบอร์ด ZX-XBee แล้วต่อสำยเข้ำพอร์ตอนุกรมของคอมพิวเตอร์ แล้วต่ออะแดปเตอร์ +9Vdc จ่ำยให้แก่บอร์ด ZX-XBee และโมดูล XBeePRO

XBee-TxD

Point-to-

(2) เปดโปรแกรม X-CTU แล้วท�ำกำรก�ำหนดค่ำดังนี้ MY = AB12

XBee-RxD

วงจรสเลฟชุดที่ 2

MY = 01

DH = 00

DL = FFFF

อั น เป็ น กำรก� ำ หนดให้ โ มดู ล XBee-PRO ตั ว นี้ ท� ำ งำนในโหมด Broadcast เพือ่ ให้สำมำรถส่งข้อมูลให้กบั โมดูล XBee-PRO ตัวอืน่ ได้ (5) ถอดโมดูล XBee-PRO ตัวที ่ 3 ออกจำกบอร์ด ZX-XBee และปลด กำรเชือ่ มต่อระหว่ำงบอร์ด ZX-XBee และคอมพิวเตอร์

DH = 00

เตรียมการ½˜ง› ไมโครคอนโทรลเลอร

DL = 01

แบ่งออกเป็น 3 ส่วนคือ เตรียมกำรส�ำหรับวงจรไมโครคอนโทรลเลอร์ ทีก่ ำ� หนดเป็นวงจรสเลฟ 2 ชุดและวงจรมำสเตอร์ 1 ชุด

(3) จำกนั้นปดไฟเลี้ยง แล้วถอดโมดูล XBee-PRO ตัวที่ 1 ออก และน�ำโมดูล XBee-PRO ตัวที่ 2 มำติดตั้งบนบอร์ด ZX-XBee แทน โดย ก�ำหนดให้โมดูล XBee-PRO ตัวที ่ 2 นีใ้ ช้ในวงจรสเลฟชุดที ่ 2 จำกนั้นใช้โปรแกรม X-CTU ก�ำหนดค่ำให้แก่ XBee-PRO ตัวที่ 2 ดังนี้ MY = 05

DH = 00

DL = 01

(4) ปดไฟเลีย้ ง แล้วถอดโมดูล XBee-PRO ตัวที ่ 2 ออก น�ำโมดูล XBeePRO ตัวที ่ 3 มำติดตัง้ บนบอร์ด ZX-XBee แทน โดยก�ำหนดให้โมดูล XBeePRO ตัวที ่ 3 นีใ้ ช้ในวงจรมำสเตอร์ ใช้โปรแกรม X-CTU เพือ่ ก�ำหนดค่ำดังนี้

การเตรียมการสําหรับไมโครคอนโทรลเลอร ในวงจรสเลฟชุดที่ 1 (1) สร้ำงไฟล์โปรเจ็กต์ของโปรแกรมภำษำ C จำก AVR studio โดย ตัง้ ชือ่ เป็น xbee_03slave01 และพิมพ์โปรแกรมภำษำ C ตำมตัวอย่ำงไฟล์ xbee_03slave01.c (2) คอมไพล์และดำวน์โหลดโปรแกรมไปยังไมโครคอนโทรลเลอร์ ATmega16 จำกนัน้ ปดไฟเลีย้ ง (3) ติดตัง้ โมดูล XBee-PRO ตัวที ่ 1 ลงบนบอร์ด ADX-XBee 5V ต่อ สำยจำกจุดต่อ RxD และ TxD เข้ำกับพอร์ต PD1 และ PD0 ของไปยังไมโคร คอนโทรลเลอร์ ATmega16 แต่ละตัว ขัน้ ตอนนีอ้ ำจข้ำมไปหำกสร้ำงวงจรขึ้น ใหม่ตำมวงจรในรูปที่ 2

The Prototype Electronics

35


RF : XBee-PRO รูปที่ 2 วงจรไมโครคอนโทรลเลอร์ ATmega16 ที่ก�าหนดให้เปนวงจร สเลฟใช้โมดูล XBee-PRO ในการติดต่อกับวงจรมาสเตอร์ โดยมีการต่อ LED เพื่อแสดงการท�างานว่าได้รับ ค�าสั่งจากวงจรมาสเตอร์แบบไร้สายถูกต้อง โดยให้ต่อวงจรแบบนี้ 2 ชุด เพื่อก�าหนดเปนวงจรสเลฟชุดที่ 1 และ 2

รูปที่ 3 วงจรไมโครคอนโทรลเลอร์ ATmega16 ที่ก�าหนดให้เปน วงจรมาสเตอร์ ซึ่งใช้ในการติดต่อกับโมดูล XBee-PRO โดยมีการ ต่อสวิตช์เพื่อเลือกวงจรสเลฟที่ต้องการติดต่อด้วย

36

The Prototype Electronics


โปรแกรมที่ 1 ไฟล์ xbee_03slave01.c โปรแกรมภาษา C ส�าหรับ Atmega16 เพื่อติดต่อกับโมดูล XBee-PRO ส�าหรับก�าหนดเปนวงจรสเลฟ ชุดที่ 1 เพื่อสร้างระบบควบคุมแบบเครือข่ายอย่างง่ายในลักษณะ Pointto-Multipoint โดยพัฒนาบน AVR Studio และใช้ WinAVR เปนตัวคอม ไพล์

การทํางานของโปรแกรม

แบงออกเปน 6 สวนคือ 1. ส่วนผนวกไฟล์ไลบรารีที่ส�าคัญ ซึ่งใช้ค�าสั่ง #include และส่วน ประกาศค่าคงที่เพื่อก�าหนดความถี่ของสัญญาณนาฬกาและบอดเรตที่ใช้ ในการสื่อสารข้อมูลด้วยค�าสั่ง #define

//----------------------------------------------------// #include <avr/io.h> // Header file for AVR MCU #include <avr/interrupt.h> // Header file for use sei() function #include <avr/signal.h> // Header file for use define vector interrupt #include <avr/delay.h> // For used _delay_ms function #define F_OSC 16000000 // Constant for Crystal frequency in Hz #define UART_BAUD_CALC(x,F_OSC) ((F_OSC)/((x)*16l)-1)

2. ฟงก์ชั่น uart_init เพื่อเตรียมความพร้อมในการท�างานของ โมดูล USART ของ ATmega16 โดยก�าหนดให้โมดูล USART อันเปนโมดูล สื่อสารข้อมูลผ่านพอร์ตอนุกรมท�างานด้วยบอดเรต 9600 บิตต่อวินาที 8 บิตข้อมูล 1 บิตหยุด และไม่มีการตรวจสอบพาริตี้ และมีการอินเตอร์รัปต์ เกิดขึ้นเมื่อมีการรับหรือส่งข้อมูล

//----------------------------------------------------// //------------- Function for initial USART -----------// //----------------------------------------------------// void uart_init(unsigned int baud) {

3. ฟงก์ชั่น uart_putc เปนฟงก์ชั่นส่งข้อมูลอักขระซึ่งเปนรหัสแอสกี้ 1 ไบต์ออกไปยังโมดูล USART

// Equation for calculate baudrate

UBRRH = (unsigned int)(UART_BAUD_CALC(baud,F_OSC)>>8); // Keep baudrate high byte

UBRRL = (unsigned int)UART_BAUD_CALC(baud,F_OSC); // Keep baudrate low byte

// Enable receiver and transmitter, enable RX interrupt

UCSRB |= (1 << RXEN) | (1 << TXEN) | (1 << RXCIE); // Asynchronous 8N1

UCSRC |= (1 << URSEL) | (1 << UCSZ1)| (1 << UCSZ0); sei(); // enable interrupts } //-------------------------------------------------------------// //------------- Function for send 1 character -----------------// //-------------------------------------------------------------// void uart_putc(unsigned char c) { while(!(UCSRA & (1 << UDRE))); // Wait for transmit Ready UDR = c; // send character } //-------------------------------------------------------------// //----------------- Function for send string ------------------// //-------------------------------------------------------------// void uart_puts(char *s) { while (*s) // Loop for send string { uart_putc(*s); // Send character s++; // Point to next character } } //-------------------------------------------------------------// //-------------------ISR for Receive USART --------------------// //-------------------------------------------------------------// SIGNAL(SIG_UART_RECV) { char key=0; // For Keep character key = UDR; // Keep character if(key==’1’) // Toggle LED1? { // Toggle LED1 PORTB ^= 0x01; } } //-------------------------------------------------------------// //----------------------- Main Program ------------------------// //-------------------------------------------------------------// void main() { DDRB |= 0x01; // Set PB0 as output for LED1 uart_init(9600); // Initial UART while(1); // Break program }

4. ฟงก์ชั่น uart_puts เปนฟงก์ชั่นส่งสายอักขระหรือสตริงออกไป ยังโมดูล USART 5. ฟงก์ชั่น SIGNAL เปนฟงก์ชั่นตอบสนองการอินเตอร์รัปต์ เนื่องจากเกิดการรับข้อมูลเข้ามาของโมดูล USART ในฟงก์ชั่นนี้จะตรวจ สอบข้อมูลที่รับเข้ามาว่าเปน อักขระ 1 หรือไม่ ถ้าใช่ จะท�าการกลับ สถานะลอจิกที่ขา PB0 6. ส่วนของโปรแกรมหลัก โดยเริ่มต้นด้วยก�าหนดให้ขา PB0 เปน เอาต์พุต โดยก�าหนดค่าเริ่มต้นเปน "0" ท�าให้ LED ที่ต่ออยู่ดับ ล�าดับ ต่อมาเปนการอินิเชียลหรือเตรียมความพร้อมของโมดูล USART ซึ่งใช้ เชื่อมต่อกับโมดูล XBee-PRO จากนั้นเข้าสู่ลูป while เพื่อวนรอรับข้อมูล ของอักขระ 1 ของโมดูล USART จากโมดูล XBee-PRO ผ่านทางขา RxD ของโมดูล USART หากมีการรับข้อมูลเข้ามาก็จะเกิดอินเตอร์รัปต์ ซีพียูจะ กระโดดไปท�างานยังฟงก์ชั่นตอบสนองการอินเตอร์รัปต ซึ่งจะตรวจสอบ ข้อมูลที่ รับเข้ามาว่าเปนอักขระ 1 หรือไม่ หากใช่ ก็จะกลับสถานะลอจิก ที่ขา PB0 จากนั้นจะออกจากฟงก์ชั่นตอบสนองการอินเตอร์รัปต์ กลับไป ยังโปรแกรมหลักต่อไป

การเตรียมการสําหรับไมโครคอนโทรลเลอรในวงจรสเลฟชุดที่ 2 (1) สร้ำง ไฟล์โปร เจ็กต์ ของ โปรแกรม ภำษำ C จำก AVR studio โดย ตั้งชื่อ เป็น xbee_03slave02 และ พิมพ์ โปรแกรม ภำษำ C ตำม ตัวอย่ำง ไฟล์ xbee_03slave02.c (2) คอมไพล์ และ ดำวน์โหลด โปรแกรม ไป ยัง ไมโคร คอนโทรลเลอร์ ATmega16 จำกนั้นป ดไฟ เลี้ยง (3) ติดตั้ง โมดูล XBee-PRO ตัว ที่ 1 ลง บน บอร์ด ADX-XBee 5V ต่อ สำย จำก จุด ต่อ RxD และ TxD เข้ำกับ พอร์ต PD1 และ PD0 ของ ไป ยัง ไมโคร คอนโทรลเลอร์ ATmega16 แต่ละตัว ขั้น ตอนนี้ อำจ ข้ำม ไป หำก สร้ำง วงจร ขึ้น ใหม่ ตำม วงจร ใน รูป ที่ 2

The Prototype Electronics

37


//--------------------------------------------------------------//

โปรแกรมที่ 2 ไฟล์ xbee_03slave02.c โปรแกรมภาษา C ส�าหรับ Atmega16 เพื่อติดต่อกับโมดูล XBee-PRO ส�าหรับก�าหนดเปนวงจรสเลฟชุดที่ 2 เพื่อสร้าง ระบบควบคุมแบบเครือข่ายอย่างง่ายในลักษณะ Point-to-Multipoint โดย พัฒนาบน AVR Studio และใช้ WinAVR เปนตัวคอมไพล์ /-----------------------------------------------------//

// Program : Communication between 3 MCU via XBee Pro // Description : Slave at node 2 for control LED2 // Frequency : Crystal 16 MHz // Filename : xbee_03slave2.c // C compiler : WinAVR //--------------------------------------------------------------// // Header file for AVR MCU #include <avr/io.h> #include <avr/interrupt.h> // Header file for use sei() function #include <avr/signal.h> // Header file for use define vector interrupt #include <avr/delay.h> // For used _delay_ms function #define F_OSC 16000000 // Constant for Crystal frequency in Hz #define UART_BAUD_CALC(x,F_OSC) ((F_OSC)/((x)*16l)-1) // Equation for calculate baudrate

//--------------------------------------------------------------// //------------------ Function for initial USART ----------------// //--------------------------------------------------------------// void uart_init(unsigned int baud) { UBRRH = (unsigned int)(UART_BAUD_CALC(baud,F_OSC)>>8); // Keep baudrate high byte

UBRRL = (unsigned int)UART_BAUD_CALC(baud,F_OSC); // Keep baudrate low byte

// Enable receiver and transmitter, enable RX interrupt

UCSRB |= (1 << RXEN) | (1 << TXEN) | (1 << RXCIE); // Asynchronous 8N1

UCSRC |= (1 << URSEL) | (1 << UCSZ1)| (1 << UCSZ0); sei(); // enable interrupts

} //--------------------------------------------------------------// //--------------- Function for send 1 character ----------------// //-------------------------------------------------------------// void uart_putc(unsigned char c) { while(!(UCSRA & (1 << UDRE))); // Wait for transmit Ready UDR = c; // send character } //-------------------------------------------------------------// //---------------- Function for send string -------------------// //-------------------------------------------------------------// void uart_puts(char *s) { while (*s) // Loop for send string { uart_putc(*s); // Send character s++; // Point to next character } } //--------------------------------------------------------------// //----------------- ISR for Receive USART ---------------------// //-------------------------------------------------------------// SIGNAL(SIG_UART_RECV) { char key=0; // For Keep character key = UDR; // Keep character if(key==’2’) // Toggle LED2? { PORTB ^= 0x01; // Toggle LED2 } } //-------------------------------------------------------------// //------------------ Main Program -----------------------------// //-------------------------------------------------------------// void main() { DDRB |= 0x01; // Set PB0 as output for LED2 uart_init(9600); // Initial UART while(1); // Break program }

การทํางานของโปรแกรม เหมือนกับโปรแกรม xbee_03slave01.c เพียงเปลี่ยนการตรวจ สอบข้อมูลที่รับได้จากอักขระ 1 เปน 2 โปรแกรมที่ 3 ไฟล์ xbee_03master.c โปรแกรมภาษา C ส�าหรับ Atmega16 เพื่อติดต่อกับโมดูล XBee-PRO ส�าหรับก�าหนด)ในวงจร มาสเตอร์ เพื่ อ สร้ า ง ระบบ ควบคุ ม แบบ ครื อ ข่ า ย อย่ า ง ง่ า ย ใน ลั ก ษณะ Point-to-Multipoint โดยพัฒนาบน AVR Studio และใช้ WinAVR เปน ตัวคอมไพล์

38

The Prototype Electronics

// Header file for AVR MCU #include <avr/io.h> #include <avr/interrupt.h> // Header file for use sei() function #include <avr/signal.h> // Header file for use define vector interrupt #include <avr/delay.h> // For used _delay_ms function #define F_OSC 16000000 // Constant for Crystal frequency in Hz #define UART_BAUD_CALC(x,F_OSC) ((F_OSC)/((x)*16l)-1) // Equation for calculate baudrate

//--------------------------------------------------------------// //------------------ Function for initial USART ----------------// //--------------------------------------------------------------// void uart_init(unsigned int baud) { UBRRH = (unsigned int)(UART_BAUD_CALC(baud,F_OSC)>>8); // Keep baudrate high byte

UBRRL = (unsigned int)UART_BAUD_CALC(baud,F_OSC); // Keep baudrate low byte // Enable transmitter

UCSRB |=

(1 << TXEN);

// Asynchronous 8N1

UCSRC |= (1 << URSEL) | (1 << UCSZ1)| (1 << UCSZ0); } //--------------------------------------------------------------// //---------------- Function for send 1 character ---------------// //--------------------------------------------------------------// void uart_putc(unsigned char c) { while(!(UCSRA & (1 << UDRE))) // Wait for transmit Ready UDR = c; // send character } //--------------------------------------------------------------// //--------------- Function for send string ---------------------// //--------------------------------------------------------------// void uart_puts(char *s) { while (*s) // Loop for send string { uart_putc(*s); // Send character s++; // Point to next character } } //--------------------------------------------------------------// //-------------- Function delay time ---------------------------// //--------------------------------------------------------------// void delay_ms(unsigned int time) { unsigned int i; // loop for counter for(i=0;i<time;i++) { _delay_ms(1); // Delay 1 ms } } //-------------------------------------------------------------// //--------------- Main Program --------------------------------// //-------------------------------------------------------------// void main() { // Ensure Set PA0,PA1 as input for switch DDRA &= 0xFC; uart_init(9600); // Initial UART while(1) // Infinite loop { if((PINA & 0x01)==0) // SW1 pressed? { uart_putc(‘1’); // Send command toggle LED1 delay_ms(200); // Delay 0.2 second } if((PINA & 0x02)==0) // SW2 pressed? { uart_putc(‘2’); // Send command toggle LED2 delay_ms(200); // Delay 0.2 second } } }

การทํางานของโปรแกรม แบ่งออกเปน 6 ส่วนคือ 1. ส่วนผนวกไฟล์ไลบรารีที่ส�าคัญ ซึ่งใช้ค�าสั่ง #include และส่วนประกาศ ค่าคงที่เพื่อก�าหนดความถี่ของสัญญาณนาฬกาและบอดเรตที่ใช้ในการสื่อสาร ข้อมูลด้วยค�าสั่ง #define 2. ฟงก์ชั่น uart_init เตรียมความพร้อมในการท�างานของโมดูล USART ของ ATmega16 โดยก�าหนดให้โมดูล USART อันเปนโมดูลสื่อสารข้อมูลผ่าน พอร์ตอนุกรมท�างานด้วยบอดเรต 9600 บิตต่อวินาที 8 บิตข้อมูล 1 บิตหยุด ไม่มีการตรวจสอบพาริตี้ มีการอินเตอร์รัปต์เกิดขึ้นเมื่อมีการรับหรือส่งข้อมูล 3. ฟงก์ชั่น uart_putc ใช้ส่งข้อมูลอักขระรหัสแอสกี้ 1 ไบต์ออกไปยัง โมดูล USART 4. ฟงก์ชั่น uart_puts ใช้ส่งสายอักขระหรือสตริงออกไปยังโมดูล USART 5. ฟงก์ชั่น delay_ms เปนฟงก์ชั่นหน่วงเวลาในหน่วยมิลลิวินาที 6. ส่วนของโปรแกรมหลัก โดยเริม่ ต้นด้วยก�าหนดให้ขา PA0 และ PA1 เปน อินพุตดิจิตอลเพื่อต่อและรับค่าจากการกดสวิตช์ ล�าดับต่อมาเปนการอินิเชียล หรือเตรียมความพร้อมของโมดูล USART ซึง่ ใช้เชือ่ มต่อกับโมดูล XBee-PRO จาก นัน้ จะเข้าสูลู่ ป while เพือ่ วนตรวจสอบการกดสวิตช์ทีขา ่ พอร์ต PA0 และ PA1 เมือ่ เกิดการกดสวิตช์ จะส่งข้อมูลของอักขระ 1 ออกไปยังโมดูล USART หากสวิตช์ ทีต่ อ่ กับ PA0 ถูกกด และส่งอักขระ 2 หากสวิตช์ทีต่ อ่ กับ PA1 ถูกกด


การเตรียมการสําหรับวงจรมาสเตอร (1) สร้ำงไฟล์โปรเจ็กต์ของโปรแกรมภำษำ C จำก AVR studio โดย ตั้งชื่อเป็น xbee_03master และพิมพ์โปรแกรมภำษำ C ตำมตัวอย่ำงไฟล์ xbee_03master.c (2) คอมไพล์ และ ดำวน์โหลด โปรแกรม ไป ยัง ไมโคร คอนโทรลเลอร์ ATmega16 จำกนั้นป ดไฟ เลี้ยง (3) ติดตั้ง โมดูล XBee-PRO ตัว ที่ 1 ลง บน บอร์ด ADX-XBee 5V ต่อ สำย จำก จุด ต่อ RxD และ TxD เข้ำกับ พอร์ต PD1 และ PD0 ของ ไป ยัง ไมโคร คอนโทรลเลอร์ ATmega16 แต่ละตัว ขั้น ตอนนี้ อำจ ข้ำม ไป หำก สร้ำง วงจร ขึ้น ใหม่ ตำม วงจร ใน รูป ที่ 3 การทดสอบ

(1) จ่ำยไฟ ให้ กับ วงจร ทั้งหมด

(2) กด สวิตช์ SW1 ที่ต่อ กับ ขำ PA0 ของ ATmega16 ใน วงจร มำสเตอร์ หลำยๆ ครั้ง สังเกต กำร ติด ดับ ของ LED ที่ วงจร สเลฟ ชุด ที่ 1 และ 2 จะ พบ ว่ำ ทุกครั้ง ที่ กด สวิตช์ LED ที่ วงจร สเลฟ ชุด ที่ 1 เท่ำนั้น ที่ มี กำร ติด ดับ ตำมจังหวะ กำร กด สวิตช์ SW1 (3) กด สวิตช์ SW2 ที่ต่อ กับ ขำ PA1 ของ ATmega16 ใน วงจร มำสเตอร์ หลำยๆ ครั้ง สังเกต กำร ติด ดับ ของ LED ที่ วงจร สเลฟ ชุด ที่ 1 และ 2 จะ พบ ว่ำ ทุกครั้ง ที่ กด สวิตช์ SW2 จะ ท�ำให้ LED ที่ วงจร สเลฟ ชุด ที่ 2 เท่ำนั้น ที่ มี กำร ติด ดับ ตำมจังหวะ กำร กด สวิตช์

Boardcast หรือ ส่ง กระจำย ข้อมูล ซึ่ง ท�ำให้ ไมโคร คอนโทรลเลอร์ ที่ ท�ำหน้ำที่ เป็น มำสเตอร์ สำมำรถ กระจำย ข้อมูล ไป ยัง ไมโคร คอนโทรลเลอร์ ที่ ท�ำหน้ำที่ เป็น สเลฟ ได้ พร้อมกัน ครำว ละ หลำยๆ ตัว เพื่อให้ เกิด กำร ตอบสนอง งำนใน รูปแบบ เครือข่ำย ไร้สำย ได้ ตำม ต้องกำร โดย เรำ สำมำรถ ควบคุม หรือ ตรวจ สอบ สถำนะ บำงอย่ำง ของ สเลฟ ทุก ตัว ที่ กระจำย ออกไป อยู่ ตำม จุด ต่ำงๆ ได้ ไม่ยำก ถ้ำหำก ลักษณะ งำน เริ่มมี ควำม ซับซ้อน มำกขึ้น อำจ จ�ำเป็น ต้อง มี กำร ก�ำหนด รูปแบบ ใน กำร สื่อสำร หรือ ที่ เรียกว่ำ โปรโตคอล (Protocol) เข้ำมำ ช่วย จัดกำร ข้อมูล อีก ชั้นหนึ่ง

บทควำม เชิง ปฏิบัติ กำร ชุด นี้ เดินทำง มำถึง ตอนจบ แล้ว แต่ เรื่องรำว ของ XBee-PRO PRO ฝูงผึ้ง สื่อสำร ไร้สำย 2.4GHz ส�ำหรับ ระบบ สมอง กล ฝังตัว ยังมี อีก มำก ซึ่ง ทำง ผู้เขียน และ กอง บรรณำธิกำร ของ TPE จะ ได้ จัด เตรียม และ น�ำ เสอน ต่อ คุณๆ ใน ซี ซั่น หน้ำ (รับรอง ว่ำ ไม่นำน เกิน รอ) ขอให้ คน รัก ฝูงผึ้ง สื่อสำร ไร้ สำยตัว นี้ สำมำรถ ใช้งำน และ สร้ำง ประโยชน์ ได้ จำก มัน อย่ำง เต็ม ประสิทธิภำพ แล้ว พบกัน ใหม่ ใน โอกำส ต่อไป ครับ

www.tpemagazine.com

บทสรØป จำก ตัวอย่ำง ที่ น�ำเสนอ ใน ตอนนี้ เป็นกำร ทดสอบ กำร สื่อสำร ข้อมูล อย่ำง ง่ำยๆ ระหว่ำง ไมโคร คอนโทรลเลอร์ 3 ตัว ผ่ำน โมดูล XBee-PRO ใน แบบ Point-to-Multipoint ซึ่ง ใน กำร ใช้งำน จริง สำมำรถ ท�ำได้ มำกกว่ำ นี้ ใน กำร ทดสอบ แสดงให้เห็น ถึง กำร ใช้งำน โมดูล XBee-PRO ใน โหมด

The Prototype Electronics

39

XBee-Pro Article (Thai) Chapter 3 (End)  

มาถึงตอนจบของการนำเสนอตัวอย่าง การนำไมโครคอนโทรลเลอร์มาคุยกัน แบบไร้สาย ทีนี้ว่ากัน 3 ตัว แบบว่าสร้าง เครือข่ายแบบย่อมๆ กันเลยทีเดียว

Read more
Read more
Similar to
Popular now
Just for you