ZBM 사용자매뉴얼 2007. 6. 25 OL 마이크로웨이브 http://olmicrowaves.com 1 / 31
목차 Part 1. ZBM ZigBee 개발키트소개 1) 제품개요 2) 제품특징 3) 제품사양 Part 2. 프로그램개발환경 1) WinAVR 설치 2) AVR Studio 설치 3) JTAG ICE 설치 4) USB(VCP) Driver 설치 5) ZBM 설치 Part 3. 예제프로그램 1) 예제프로그램설치 2) 예제프로그램실행 3) 예제프로그램설명 4) 사용자프로그램개발 Part 4. ZBM 실습 2 / 31
Part 1. ZBM ZigBee 개발키트소개 1) 제품개요 ZBM은 CC2420과 Atmega128L로구성된 ZigBee 학습및개발용 H/W 플랫폼이다. CC2420은 TI사에서공급하는 RF 트랜시버칩으로서 IEEE 802.15.4 규격을만족하는무선송수신기능을제공한다. Atmega128L은 ATMEL사의 8bit RISC 마이콤으로서국내에서다양하게활용되고있으며사용자의입장에서다른타입의마이콤에비해상대적으로접근이용이하다고할수있다. ZigBee 개발용플랫폼은현재다양한제품들이나와있지만각기사용되는 RF칩이상이하고특히마이콤이임베디드개발자에게친숙하지않은제품들이많다. 따라서극소수의전문적인개발자가아닌일반학생이나초보자의입장에서는접근하기가상당히난해한관계로 CC2420과 Atmega128L로구성된 TI사의 CC2420DBK를기초로사용자가보다쉽게기술을습득하고개발할수있도록 ZBM을제작하였다. Battery 3.3V Regulator 8MHz X-tal 16MHz X-tal ZBM USB (VCP) USB To Serial UART Atmega128L 8-bit RISC MCU SPI CC2420 2.4GHz RF Transceiver I/O 3 / 31
2) 제품특징 USB 포트를통한가상시리얼접속방식으로서 9핀시리얼포트없이시리얼통신 마이콤의입출력핀들을커넥터를통해외부회로와접속가능 JTA G 포트를통한프로그래밍 고효율의 PC B 내장안테나 전원아답타없이일반건전지사용 [ 전면 ] 4 / 31
[ 후면 ] 5 / 31
3) 제품사양 Absolute Maximum Ratings Parameter Min. Max. Units Supply voltage 0.3 7.5 V Input RF level 10 dbm Storage temperature range 50 150 C Operating Conditions Parameter Min. Max. Units Supply voltage 4.8 7.5 V Operating ambient temperature range 30 85 C Electrical Specifications Parameter Min. Typ. Max. Units Overall RF Frequency Range 2400 2483.5 MHz Transmit Section Transmit bit rate 250 250 kbps Transmit chip rate 2000 2000 kchips/s Nominal output power 3 0 dbm Programmable output power range 24 db Receive Section Receiver Sensitivity 90 94 dbm Saturation (maximum input level) 0 10 dbm Frequency error tolerance 300 300 khz Symbol rate error tolerance 120 ppm RSSI / Carrier Sense Carrier sense level 77 dbm RSSI dynamic range 100 db RSSI accuracy ± 6 db RSSI linearity ± 3 db RSSI average time 128 µs 6 / 31
CC2420 Frequency Section Crystal oscillator frequency 16 MHz Crystal frequency accuracy requirement 40 40 ppm Atmega128L Frequency Section Crystal oscillator frequency 8 MHz Crystal frequency accuracy requirement 100 100 ppm Power Supply Current Consumption, transmit mode: P = 0 dbm 46 Current Consumption, receive mode 49 ma ma Physical Properties Parameter Size Weight Min. 100 mm x 70 mm X 24mm (with battery holder) 46 / 92 g (without/with battery) 7 / 31
External Pin Assignment Pin NO. Pin Name P1 (JTAG) 1 TCK 2 GND 3 TDO 4 3.3V 5 TMS 6 /RESET 7 3.3V 8 not connected 9 TDI 10 GND P2 (USB UART) 1 +5 (from PC) 2 DATA 3 +DATA 4 GND Pin NO. 1 PE0 2 3.3V P3 (ISP) Pin Name 3 not connected 4 GND 5 /RESE T 6 GND 7 SCLK 8 GND 9 PE1 10 GND 주의 : 외부확장핀은 3.3V 입 출력전압규격임. 8 / 31
Pin NO. Pin Name P4 (GPIO) 1 PA1 2 PA0 3 PA3 4 PA2 5 PA5 6 PA4 7 PA7 8 PA6 9 PC1 10 PC0 11 PC3 12 PC2 13 PC5 14 PC4 15 PC7 16 PC6 17 PG1 18 PG0 19 GND 20 PG2 Pin NO. Pin Name P5 (GPIO) 1 AREF 2 PF0 3 PF1 4 PF2 5 PF3 6 PE0 7 PE1 8 PE2 9 PE3 10 PE4 11 PE5 12 PE6 13 PE7 14 PB4 15 PB5 16 PB6 17 PB7 18 not connected 19 GND 20 3.3V 주의 : 외부확장핀은 3.3V 입 출력전압규격임. 9 / 31
Part 2. 프로그램개발환경 ZBM 을이용하여프로그램을개발하데필요한개발툴과개발절차는다음과같다. WinAVR 설치 AVR Studio 설치 JTAG ICE 설치 USB(VCP) Driver 설치 ZBM 설치 예제프로그램설치및실행 사용자프로그램개발 10 / 31
1) WinAVR 설치 다음의 URL을방문하여설치파일을다운로드하여설치한다. URL : http://sourceforge.net/project/showfiles.php?group_id=68108 설치파일 : WinAVR 20060421 install.exe 11 / 31
2) AVR Studio 설치 다음의 URL을방문하여설치파일을검색, 다운로드하여설치한다. URL : http://www.atmel.com 설치파일1 : AVR Studio 4.12 (build 460) (* 간단한등록과정필요 ) 설치파일2 : AVR Studio 4.12 Service Pack 4 (build 498) 12 / 31
3) JTAG ICE 설치 사용자별로 JTAG ICE를구비하여설치한다. ZBM 에사용가능한 JTAG ICE 의요건은다음과같다. Atmega128 지원 ATMEL 10 핀표준포트를제공 +3.3V 타겟보드와접속 4) USB(VCP) Driver 설치 다음의 URL을방문하여윈도우버전에해당하는설치파일을다운로드하여설치한다. URL : http://www.ftdichip.com/drivers/vcp.htm 설치파일 : CDM_Setup.exe 13 / 31
5) ZBM 설치 ZBM의 JTAG 포트에 JTAG ICE를연결한다. ZBM의 P2(USB포트 ) 와 PC의 USB 컨넥터를 USB 케이블을사용하여연결한다. ZBM의전원스위치를 ON한다. PC에서자동으로가상시리얼포트를할당한다. 시작 제어판 시스템 하드웨어 장치관리자에서포트설정을확인한다. ZBM 시리얼포트 JTAG ICE 포트 14 / 31
하이퍼터미널을실행한다. ( 시작 모든프로그램 보조프로그램 통신 /) 파일 새연결을수행한다. 이름 : ex) ZBM monitor 연결에사용할모뎀 : COM3 ( 장치관리자에서확인된포트 ) 비트 / 초 : 115200 데이터비트 : 8 패리티 : 없음정지비트 : 1 흐름제어 : 없음 ZBM 의리셋버턴 (S1) 을 ON/OFF 하면하이퍼터미널화면에 ZBM 초기화면이출력된다. 4 를타이핑하여 ZBM 의 Address 세팅값을확인한다. 15 / 31
Part 3. 예제프로그램 1) 예제프로그램설치 다음의 URL을방문하여압축파일을다운로드하여임의의작업디렉토리에압축해제한다. URL : http://olmicrowaves.com => Downloads => ZigBee 압축파일 : ZBM10.zip 2) 예제프로그램실행 Part 2. 프로그램개발환경 의 5) ZBM 설치 과정을수행하여 ZBM과 JTAG ICE 및하이퍼터미널을활성화한다. AVR Studio를실행한다. Project Open Project 과정으로압축해제한 ZBM10 디렉토리아래에있는 ZBM10.aps를로드한다. 프로그램을수정한다. ( 필요한경우 ) File Save All을수행하여작업한파일을저장한다. Build Build All을수행하여실행파일을생성한다. Tools Program AVR Connect를수행한다. Platform : JTAG ICE Port : COM5 ( 현재 JTAG ICE가접속되어있는포트 ) 프로그래머다이얼로그에서 Flash 카테고리의 Input HEX File 의경로를지정한다. ZBM10/default/ZBM10.hex 프로그래머다이얼로그에서 Flash 카테고리의 Program 버턴을클릭하면 ZBM 내의 MCU 로펌웨어프로그램이 다운로드된다. 16 / 31
3) 예제프로그램설명 예제프로젝트디렉토리 ZBM10은다음과같은파일과하위디렉토리로구성되어있다. ZBM10 apps default include sensing.c ZBM10.hex, 오브젝트파일 include.h basic_rf hal basic_rf.h hal_cc2420.h atmega128 hal.h hal_cc2420db.h lib basic_rf basic_rf_init.c basic_rf_receive.c basic_rf_send_packet.c hal atmega128 hal_wait.c hal_rf_set_channel.c hal_rf_wait_for_crystal_oscillator.c ZBM10.aps sensing.c : 응용프로그램으로서, main() 함수를포함하는기본프로그램 ZBM10.hex : MCU 다운로드파일 include.h : 기본적데이터타입이정의되어있고, 여러가지헤드파일들을 include 시킨다. basic_rf.h : basic rf library(lib/basic_rf/*.c) 파일에관련된정의 hal_cc2420.h : CC2420에관련된정의 hal.h : CC2420에접근하기위한 SPI 제어매크로정의 hal_cc2420db.h : CC2420과 MCU 주변장치와의접속을정의 17 / 31
basic_rf_init.c : CC2420의무선송신및수신동작을위한초기화 basic_rf_receive.c : 무선패킷을수신하기위한인터럽트서비스루틴 basic_rf_send_packet.c : 무선패킷을송신하기위한루틴 hal_wait.c : Delay 함수 hal_rf_set_channel.c : 주어진채널번호로부터 IEEE802.15.4 무선주파수설정 hal_rf_wait_for_crystal_oscillator.c : CC2420 내부오실레이터의안정화까지대기 ZBM10.aps : AVR Studio 프로젝트파일 ZBM 예제프로젝트 (ZBM10) 은 TI사의 CC2420DBK 예제프로그램을기초로작성되었다. TI사의원본을다운로드하려면다음의 URL을방문하여압축파일을다운로드한다. URL : http://focus.ti.com/docs/toolsw/folders/print/cc2420dbk.html 압축파일 : CC2420DBK Libraries (swrc024.zip, 22 KB) CC2420DBK Examples Release (swrc023.zip, 12 KB) TI 원본에서 ZBM10이수정된부분 (A) ZBM10 / include / include.h 수정... #include <string.h> #define CC2420DB #ifdef STK501 # include "include/hal/atmega128/hal_stk501.h" #endif #ifdef CC2420DB #include "include/hal/atmega128/hal_cc2420db.h" #endif 18 / 31
// HAL include files #include "include/hal/atmega128/hal.h" #include "include/hal/hal_cc2420.h" // BASIC RF include files #include "include/basic_rf/basic_rf.h" (B) 아래의각소스파일에서 include 경로수정 : #include "include\include.h" zbm / lib / basic_rf / basic_rf_init.c zbm / lib / basic_rf / basic_rf_receive.c zbm / lib / basic_rf / basic_rf_send_packet.c zbm / lib / hal / hal_rf_set_channel.c zbm / lib / hal / hal_rf_wait_for_crystal_oscillator.c zbm / lib / hal / atmega128 / hal_wait.c zbm / apps / basic_rf / rf_blink_led / rf_blink_led.c (C) hal_cc2420db.h 수정사항 < AVR과 CC2420 간의핀설정비교 > Signal Name CC2420DBK ZBM CSN PB0 " SCLK PB1 " SI PB2 " SO PB3 " VREG_EN PB5 PG3 RESETN PB6 PG4 CTS PD7 " CCA PD6 " RTS PD5 " SFD PD4 " TXD1 PD3 " RXD1 PD2 " FIFO PD1 " FIFOP PD0 " 19 / 31
// Port B #define CSN # define SCK 0 // PB.0 Output: SPI Chip Select (CS_N) 1 // PB.1 Output: SPI Serial Clock (SCLK) #define MOSI 2 // PB.2 Output: SPI Master out slave in (MOSI) #define MISO 3 // PB.3 Input: SPI Master in slave out (MISO) #define OLED //#define VREG_E N 4 // PB.4 Output: Orange LED 5 // PB.5 Output: VREG_EN to CC2420 //#def ine RESET_ N 6 // PB.6 Output: RESET_N to CC2420 #define GL ED 7 // PB.7 Output: Green LED // Port G // # define VREG_EN 3 // PG.3 Output: VREG_EN to CC2420 #define RESET_N 4 // PG.4 Output: RESET_N to CC2420 // Port initialization // Disables pull up on all inputs!!! #define PORT_INIT() \ do { \ SFIOR = BM(PUD); \ DDRB = BM (MOSI) BM(SCK) BM(CSN) BM(OLED) BM(GLED); \ PORTB = BM(MOSI) BM(S CK) BM(CSN); \ DDRD = BM(UAR T1_RTS) ; \ PORTD = BM(UART1_RTS) BM(UART 1_ CTS);\ DDRE = BM(R LED) BM(YLED); \ PORTE = 0x00; \ DDRG = BM(RESET_N) BM(VR EG_EN ); \ PORTG = BM(RESE T_N); \ } while (0) // CC2420 pin access // Pin status #define FIFO_IS_1 #define CCA_IS_1 #define RESET_IS_1 (!!(PIND & BM(FIFO))) (!!(PIND & BM(CCA))) (!!(PING & BM(RESET_N))) 20 / 31
#define VREG_IS_1 #define FIFOP_IS_1 #define SFD_IS_1 (!!(PING & BM(VREG_EN))) (!!(PIND & BM(FIFOP))) (!!(PIND & BM(SFD))) // The CC2420 reset pin #define SET_RESET_ACTIVE() PORTG &= ~BM(RESET_N) #define SET_RESET_INACTIVE() PORTG = BM(RESET_N) // CC2420 voltage regulator enable pin #define SET_VREG_ACTIVE() PORTG = BM(VREG_EN) #define SET_VREG_INACTIVE() PORTG &= ~BM(VREG_EN) (D) hal.h UART 관련오류수정 #define UART1_WAIT_AND_RECEIVE(x) do{ UDR1 = 0; UART1_WAIT(); UART1_RECEIVE(x); } while (0) (E) hal.h UART 관련매크로추가및수정 #define UART1_WAIT() do { while (!(UCSR1A & BM(UDRE1))); CLEAR_UART1_TX_INT(); } while (0) #define UART1_RXWAIT() do { while (!(UCSR1A & BM(RXC1))); CLEAR_UART1_RX_INT(); } while (0) #define UART1_SEND(x) do { UDR1 = (x); } while (0) #define UART1_WAIT_AND_SEND(x) do { UART1_WAIT(); UART1_SEND(x); } while (0) #define UART1_RECEIVE(x) do { (x) = UDR1; } while (0) # define UART1_WAIT_AND_RECEIVE(x) do {UDR1=0; UART1_RXWAIT(); UART1_RECEIVE(x); } while(0) #define UART1_LINEFEED() do { UART1_WAIT_AND_SEND(13); UART1_WAIT_AND_SEND(10); }while(0) 21 / 31
4) 사용자프로그램개발 ZBM은 ZigBee 프로토콜을개발하거나학습하는용도로사용될수있으며뿐만아니라외부확장용컨넥터 (P4, P5) 를통해각종센서나제어기와접속하여 ZigBee 응용시스템을개발하는용도로활용할수있다. 사용자별로응용프로그램개발하기위해서외부확장커넥터별신호구성을파악한후별도의도터보드를제작하여장착한다. ( 페이지 8 ~ 9 참조 ) P4 : 범용I/O 및메모리제어신호 외부메모리를확장하거나일반범용입출력으로외부장치와접속 P5 : ADC, 아나로그입력, 인터럽트, 범용I/O 센서장치나제어장치와접속하거나일반범용입출력으로외부장치와접속 ( 예 : 조명제어응용실습 ) 22 / 31
MAC프로그램이나 ZigBee 스택을포팅하고자하는경우에는각프로그램의 HAL 부분을 Atmega128에적합하게구성한후, AVR Studio(WinAVR/avr gcc) 나 IAR 컴파일러등을이용하여컴파일하고, 생성된 hex 파일을 AVR Studio나 PonyProg를사용하여 ZBM의 Flash ROM에다운로드한다. TI사에서는 Z stack이라는 ZigBee 표준스택을제공하며다음의 URL을방문하여무료로다운로드하여사용할수있다. ( 간단한사용자등록필요 ) URL : http://focus.ti.com/analog/docs/gencontent.tsp?familyid=367&gencontentid=31010 23 / 31
Part 4. ZBM 실습 ZBM에다운로드되어있는프로그램은예제프로젝트인 ZBM10이다. ZBM10에는두개의 ZBM을하나는마스터로다른하나는센서로간주하고각각의 Address를설정하여 ( 디폴트로 : 00, 99) 터미널 (PC) 로부터마스터를경유하여무선으로센서를제어하는동작이구현되어있다. 이예제를통해 MCU를사용하여 ZigBee용 RF 트랜시버칩인 CC2420을제어하는방법을습득할수있으며 ZBM을홈네트워크나기타다양한분야에활용할수있도록기본적인아이디어를제공한다. 마스터로사용할 ZBM 을 `Part 2. 프로그램개발환경 의 5) ZBM 설치 과정수행하여 셋업한다. 리셋버턴을누르면하이퍼터미널상에초기화면이출력된다. 24 / 31
`4 를입력하여현재 ZBM 에설정된 Address 를확인한다. 필요한경우 `5 를입력하여 Address 를다른값으로변경한다.(00 ~ 99 사이의값 ) 25 / 31
동일한방식으로센서로사용할 ZBM의 Address도확인하고필요하면 Addres를변경한다. 터미널 (PC) 에다시마스터 ZBM을접속하고, 센서 ZBM을 3미터정도의거리에설치한다. 하이퍼터미널로 `1 과 99 를차례로입력하여 Address가 99인센서 ZBM의 RSSI 값을읽는다. ( 센서 Address는사용자별로설정한값을입력 ) 이때, 출력되는 RSSI 값은센서가마스터로부터수신하는신호의세기를나타내며, ZBM의안테나출력전력은약 0dBm( 디폴트 ) 으로설정되어있다. 따라서하이퍼터미널상에출력되는 RSSI 값은수신전력값인동시에해당거리에서의경로손실 (Path Loss) 라고할수있다. 이러한사실로부터사용자는 RSSI 관련한다양한응용을할수있다. 마스터가센서로부터수신하는신호의세기도동일한값으로간주해도된다. 26 / 31
ZBM monitor의 2 과 3 명령은조도센서값을읽고, LED를켜거나끄는동작을수행한다. 그러나조도센서와 LED 회로는 ZBM 모듈에포함되지않느다. 따라서사용자는다음의과정을따라도터보드를제작하여실습을수행하도록한다. 준비물 : 만능기판 (HS 01 혹은기타 ), 조도센서 (A90.09등), LED, 저항 (180~200Ω), 가변저항 (100KΩ), 핀헤드 (2x10), 납땜용구 ( 인두기, 납 ) 도터보드회로도 만능기판을적당한크기로자른다. (3 cm x 3.5 cm 가량 ) 기판에회로도를참조하여부품을배치한후납땜한다. 핀헤드 (P5) 는센서 ZBM 의소켓 (P5) 에장착될수있도록한다. 27 / 31
[ 전면 ] [ 후면 ] 제작한도터보드를센서 ZBM 의소켓 (P5) 에장착한다. ( 방향에유의 ) 28 / 31
하이퍼터미널로 `2 와 99 를차례로입력하여 Address 가 99 인센서 ZBM 의조도값을 읽는다. ( 센서 Address 는사용자별로설정한값을입력 ) 조도값의범위는 0 ~ 255 이며 A/D 컨버터에서읽은값을 8 비트처리하여출력한다. 가변저항을조절하면특정한조도에출력값을튜닝할수있다. 29 / 31
하이퍼터미널로 `3, 99, 1 을차례로입력하여 Address가 99인센서 ZBM의 LED를 켠다. 센서 ZBM 의 LED 의상태를확인한다. 30 / 31
하이퍼터미널로 `3, 99, 0 을차례로입력하여 Address가 99인센서 ZBM의 LED를 끈다. 센서 ZBM 의 LED 의상태를확인한다. 31 / 31