xbee-pro article (thai) chapter 3 (end)

6
34 The Prototype Electronics Proto Knowledge Communication Noomnamon จำกตอนที่ 3 ที่เรำได้ลองจับคู่ไมโครคอนโทรลเลอร์ 2 ตัวมำติดต่อ แลกเปลี่ยนข้อมูลแบบไร้สำยโดยใช้โดูล XBee-PRO เป็นตัวกลำง มำถึง ตอนที่ 4 ซึ่งเป็นตอนจบของซีซั่นแรก (ว่ำกันเป็นภำพยนต์ซีรีส์แบบฝรั่ง) จะน�ำเสนอตัวอย่ำงกำรสื่อสำรข้อมูลระหว่ำงระบบสมองกลฝังตัว (ซึ่งแทน ด้วยไมโครคอนโทรลเลอร์ ATmega16) 3 ชุดแบบไร้สำยครับ….ขอย�้ำ 3 ชุด ในลักษณะที่เรียกว่ำ Point-to-Multipoint ซึ่งเชื่อเหลือเกินว่ำ คุณๆ ทีติดตำมเรื่องรำวของระบบสมองกลฝังตัวกับกำรสื่อสำรข้อมูลแบบไร้สำยคง หำอ่ำนตัวอย่ำงในลักษณะนี้ได้ไม่ง่ำย แต่ที่นี่.. TPE เรำจัดให้ครับ… มาถึงตอนจบของการน�าเสนอตัวอย่าง การน�าไมโครคอนโทรลเลอร์มาคุยกัน แบบไร้สาย ทีนี้ว่ากัน 3 ตัว แบบว่าสร้าง เครือข่ายแบบย่อมๆ กันเลยทีเดียว ฝูงผึ้งสื่อสารไรสาย 2.4GHz สําหรับระบบ สมองกลฝงตัว ตอนจบ กําËนดเป‡าËมาย ก�ำหนดให้มีระบบสมองกลฝังตัว 3 ชุดซึ่งเลือกใช้วงจรไมโครคอน โทรลเลอร์ ATmega16 ในแบบเดียวกับที่น�ำเสนอไปในตอนที่ 3 (ตีพิมพ์ ใน TPE #9 เมษำยน 2553) โดยต่อกับสวิตช์และ LED อย่ำงละ 1 ตัว อุปกรณ์ส�ำหรับสื่อสำรไร้สำยเลือกใช้โมดูล XBee-PRO ติดตั้งเข้ำกับไมโคร คอนโทรลเลอร์ ATmega16 ฝังละ 1 ตัว ก�ำหนดให้วงจรหนึ่งเป็นมำสเตอร์ ส่วนที่เหลือเป็นสเลฟ เป้ำหมำยคือ ทดลองสร้ำงระบบควบคุมในแบบเครือข่ำยอย่ำงง่ำย โดยมีวงจรมำสเตอร์ 1 ชุดรับส่งข้อมูลควบคุมกับวงจรสเลฟอีก 2 ชุด วงจรไมโครคอนโทรลเลอร์ที่ท�ำหน้ำที่เป็นมำสเตอร์ จะส่งค�ำสั่งซึ่งตรง กับอักขระ ‘1’ หรือ ‘2’ ไปยังวงจรสเลฟจำกกำรกดสวิตช์ซึ่งมี 2 ตัวเพื่อกลับ สถำนะของ LED ที่ต่อกับไมโครคอนโทรลเลอร์ในวงจรสเลฟเป้ำหมำย วงจรไมโครคอนโทรลเลอร์ที่ท�ำหน้ำที่เป็นสเลฟตัวที่ 1 จะรอรับ ค�ำสั่งซึ่งตรงกับอักขระ ‘1’ จำกมำสเตอร์เพื่อกลับสถำนะ LED ที่ต่อกับ ไมโครคอนโทรลเลอร์ วงจรไมโครคอนโทรลเลอร์ที่ท�ำหน้ำที่เป็นสเลฟตัวที่ 2 จะรอรับ ค�ำสั่งซึ่งตรงกับอักขระ ‘2’ จำกมำสเตอร์เพื่อกลับสถำนะ LED ที่ต่อกับ ไมโครคอนโทรลเลอร์ ดังแสดงไดอะแกรมกำรท�ำงำนในรูปที่1 เตรียมยØทโ¸ปกร³ ประกอบดวย 1. โมดูล XBee-PRO 3 ตัว 2. บอร์ดเชื่อมต่อ XBee-PRO กับคอมพิวเตอร์ (จำก TPE #7 และ 8 ก็คือบอร์ด ZX-XBee) 3. บอร์ดเชื่อมต่อ XBee-PRO กับไมโครคอนโทรลเลอร์ ในที่นี้ใช้บอร์ด ADX-XBee จำก INEX (อำจไม่ต้องใช้หำกท�ำกำรต่อวงจรตรงตำมรูปที่2 และ 3) 4. บอร์ดไมโครคอนโทรลเลอร์ ATmega16 จะใช้ของค่ำยไหนอย่ำงไร หรืออยำกท�ำเอง ก็ดูวงจรได้จำกรูปที่ 2 และ 3 5. เครื่องโปรแกรมไมโครคอนโทรลเลอร์ AVR แบบ ISP ในที่นี้ใช้รุ่น PX-4000 จำก INEX X Bee- P RO

Upload: innovative-experiment-coltd

Post on 05-Mar-2016

231 views

Category:

Documents


0 download

DESCRIPTION

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

TRANSCRIPT

Page 1: XBee-Pro Article (Thai) Chapter 3 (End)

34 The Prototype Electronics

Prot

o Kn

owled

ge

Communication

Noomnamon

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

มาถึงตอนจบของการน�าเสนอตัวอย่าง

การน�าไมโครคอนโทรลเลอร์มาคุยกัน

แบบไร้สายทีนี้ว่ากัน3ตัวแบบว่าสร้าง

เครือข่ายแบบย่อมๆกันเลยทีเดียว

ฝูงผึ้งสื่อสารไรสาย

2.4GHz ส

ําหรับระบบ

สมองกลฝงตัว ตอนจบ

กําËนดเป‡าËมาย

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

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

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

วงจรไมโครคอนโทรลเลอร์ที่ท�ำหน้ำที่เป็นสเลฟตัวที่ 1จะรอรับค�ำสั่งซึ่งตรงกับอักขระ ‘1’ จำกมำสเตอร์เพื่อกลับสถำนะ LED ที่ต่อกับไมโครคอนโทรลเลอร์

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

เตรียมยØทโ¸ปกร³

ประกอบดวย

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

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

3.บอร์ดเชื่อมต่อXBee-PROกับไมโครคอนโทรลเลอร์ในที่นี้ใช้บอร์ดADX-XBee จำก INEX (อำจไม่ต้องใช้หำกท�ำกำรต่อวงจรตรงตำมรูปที่ 2และ3)

4.บอร์ดไมโครคอนโทรลเลอร์ATmega16จะใช้ของค่ำยไหนอย่ำงไรหรืออยำกท�ำเองก็ดูวงจรได้จำกรูปที่2และ3

5. เครื่องโปรแกรมไมโครคอนโทรลเลอร์ AVR แบบ ISP ในที่นี้ใช้รุ่นPX-4000จำกINEX

Noomnamon

จำกตอนที่ 3 ที่เรำได้ลองจับคู่ไมโครคอนโทรลเลอร์ 2 ตัวมำติดต่อแลกเปลี่ยนข้อมูลแบบไร้สำยโดยใช้โดูล XBee-PRO เป็นตัวกลำง มำถึง

XBee-PRO

Page 2: XBee-Pro Article (Thai) Chapter 3 (End)

The Prototype Electronics 35

เตรียมการสําËรับโมดÙล XBee-PRO

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

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

MY=AB12

DH=00

DL=01

(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ออกน�ำโมดลูXBee-PROตวัที่3มำตดิตัง้บนบอร์ดZX-XBeeแทนโดยก�ำหนดให้โมดลูXBee-PROตวัที่3นีใ้ช้ในวงจรมำสเตอร์ใช้โปรแกรมX-CTUเพือ่ก�ำหนดค่ำดงันี้

MY=01

DH=00

DL=FFFF

อันเป ็นกำรก�ำหนดให้โมดูลXBee-PROตัวนี้ท�ำงำนในโหมดBroadcastเพือ่ให้สำมำรถส่งข้อมลูให้กบัโมดลูXBee-PROตวัอืน่ได้

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

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

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

การเตรียมการสําหรับไมโครคอนโทรลเลอร ในวงจรสเลฟชุดที่ 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

วงจรมาสเตอร

XBee-TxD

XBee-RxD

XBee-TxD

XBee-RxD

XBee-TxD

XBee-RxD

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

ATmega16

ATmega16

MY = 01,

DH = 00

DL = FFFF

MY = AB12,

DH = 00

DL = 01

MY = 05,

DH = 00

DL = 01

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

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

ATmega16

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

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

36 The Prototype Electronics

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

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

RF : XBee-PRO

Page 4: XBee-Pro Article (Thai) Chapter 3 (End)

The Prototype Electronics 37

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

//----------------------------------------------------//#include <avr/io.h> // Header fi le for AVR MCU#include <avr/interrupt.h> // Header fi le for use sei() function#include <avr/signal.h> // Header fi le for use defi ne vector interrupt#include <avr/delay.h> // For used _delay_ms function#defi ne F_OSC 16000000 // Constant for Crystal frequency in Hz #defi ne 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==’1’) // Toggle LED1?

{ PORTB ^= 0x01; // Toggle LED1

}}//-------------------------------------------------------------////----------------------- Main Program ------------------------////-------------------------------------------------------------//void main(){ DDRB |= 0x01; // Set PB0 as output for LED1

uart_init(9600); // Initial UART

while(1); // Break program }

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

แบงออก เปน 6 สวน คือ

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

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

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

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-XBee5Vต่อสำยจำกจุดต่อ RxD และ TxD เข้ำกับพอร์ต PD1 และ PD0 ของไปยังไมโครคอนโทรลเลอร์ATmega16แต่ละตัวขั้นตอนนี้อำจข้ำมไปหำกสร้ำงวงจรขึ้นใหม่ตำมวงจรในรูปที่2

Page 5: XBee-Pro Article (Thai) Chapter 3 (End)

38 The Prototype Electronics

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

แบ่งออก เปน 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 ถกู กด

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

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

#include <avr/io.h> // Header fi le for AVR MCU

#include <avr/interrupt.h> // Header fi le for use sei() function

#include <avr/signal.h> // Header fi le for use defi ne vector interrupt

#include <avr/delay.h> // For used _delay_ms function

#defi ne F_OSC 16000000 // Constant for Crystal frequency in Hz #defi ne 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; for(i=0;i<time;i++) // loop for counter

{ _delay_ms(1); // Delay 1 ms

}}//-------------------------------------------------------------////--------------- Main Program --------------------------------////-------------------------------------------------------------//void main(){ DDRA &= 0xFC; // Ensure Set PA0,PA1 as input for switch

uart_init(9600); // Initial UART

while(1) // Infi nite 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

} } }

โปรแกรม ที่ 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//--------------------------------------------------------------//#include <avr/io.h> // Header fi le for AVR MCU

#include <avr/interrupt.h> // Header fi le for use sei() function

#include <avr/signal.h> // Header fi le for use defi ne vector interrupt

#include <avr/delay.h> // For used _delay_ms function

#defi ne F_OSC 16000000 // Constant for Crystal frequency in Hz

#defi ne 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

Page 6: XBee-Pro Article (Thai) Chapter 3 (End)

The Prototype Electronics 39

การเตรียมการสําหรับวงจรมาสเตอร

(1) สร้ำงไฟล์โปรเจ็กต์ของโปรแกรมภำษำCจำกAVR studio โดยตั้งชื่อเป็น xbee_03master และพิมพ์โปรแกรมภำษำCตำมตัวอย่ำงไฟล์xbee_03master.c

(2)คอมไพล์และดำวน์โหลดโปรแกรมไปยังไมโครคอนโทรลเลอร์ATmega16จำกนั้นปดไฟเลี้ยง

(3)ติดตั้งโมดูลXBee-PROตัวที่1ลงบนบอร์ดADX-XBee5Vต่อสำยจำกจุดต่อ 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เท่ำนั้นที่มีกำรติดดับตำมจังหวะกำรกดสวิตช์

บทสรØป

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

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

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

www.tpemagazine.com