1 / 15

Ubiquitous Computing Practice - Part 4(RSSI) -

Spring Semester, 2011. Ubiquitous Computing Practice - Part 4(RSSI) -. Laboratory of Intelligent Networks @ KUT ( http://link.kut.ac.kr ) Yong-hwan Kim. 7. RF Power Control, Multichannel and RSSI. RF Power Control 과 Multichannel 에 대해 이해 RSSI 값 활용 방법 예제 수행. 기본 지식. Power Control

edwardjames
Download Presentation

Ubiquitous Computing Practice - Part 4(RSSI) -

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Spring Semester, 2011 Ubiquitous Computing Practice- Part 4(RSSI) - Laboratory of Intelligent Networks@ KUT (http://link.kut.ac.kr) Yong-hwan Kim

  2. 7. RF Power Control, Multichannel and RSSI RF Power Control과 Multichannel 에 대해 이해 RSSI 값 활용 방법 예제 수행 Ubiquitous Computing

  3. 기본 지식 • Power Control • 무선 전파는 전송되는 거리의 제곱or네제곱에 반비례 • 어느 정도의 세기가 보장되어야수신측에서 데이터 값을 읽을 수 있다. • 전송거리가 클수록 링크가 유지되기 쉬우나, 다른 노드들의 통신을 방해하며 전력 소모가 많다. • CC2420 RF 인터페이스는 8단계로 Power Control Ubiquitous Computing

  4. 기본 지식 • Multichannel • IEEE 802.15.4 표준 – 26 채널 • CC2420 – 16개 채널 지원 • F = 2405 + 5(k-11) Mhz , k = 11, 12, …, 26 • RSSI(Received Signal Strength Indicator) • RF 인터페이스에서 수신한 전파의 세기(dBm) • RSSI가 -94dBm 이상이어야 메시지 디코딩 가능 • RSSI.RSSI_VAL 레지스터에 저장 • 저장 값이 -20일 경우, 실제 RSSI는 -65dBm Ubiquitous Computing

  5. MCH_PTRSSI 예제 소개 • 1번 노드 • RF_Configuration_Setting() Task 함수에서 노드 자신의 파워 및 채널을 변경 • 변경된 설정에 의해 1초마다 데이터 무선 전송 • 0번 노드 • 받은 RSSI 값을 계산하여 PC로 전달(제대로 수신 되었을 경우 Red LED 점멸) 무선통신 시리얼케이블 ZigbeX 1 ZigbeX 0 MCH_PTRSSI ID : 1 MCH_PTRSSI ID : 0 Ubiquitous Computing

  6. MCH_PTRSSI.nc • CC2420ActiveMessageC : 전송 파워 제어 • CC2420ControlC : 채널 제어 • 무선 통신, 시리얼 통신 동시 사용 Ubiquitous Computing

  7. MCH_PTRSSI.nc configuration MCH_PTRSSI { } implementation { components MainC, MCH_PTRSSIM, new TimerMilliC(), LedsC, BusyWaitMicroC , ActiveMessageC, new AMSenderC(AM_MCH_PTRSSI_Msg) , new AMReceiverC(AM_MCH_PTRSSI_Msg), CC2420ActiveMessageC , CC2420ControlC, SerialActiveMessageC as Serial; MCH_PTRSSIM.Boot -> MainC; MCH_PTRSSIM.Timer -> TimerMilliC; MCH_PTRSSIM.Leds -> LedsC; MCH_PTRSSIM.BusyWait ->BusyWaitMicroC; // RF Component MCH_PTRSSIM.CommControl -> ActiveMessageC; MCH_PTRSSIM.RecvMsg -> AMReceiverC; MCH_PTRSSIM.DataMsg -> AMSenderC; MCH_PTRSSIM.CC2420Packet -> CC2420ActiveMessageC; //전송 파워제어 MCH_PTRSSIM.CC2420Config -> CC2420ControlC; //채널 제어 // Serial Component MCH_PTRSSIM.Serial_Control -> Serial; MCH_PTRSSIM.Serial_Packet -> Serial; MCH_PTRSSIM.Serial_Send -> Serial.AMSend[AM_MCH_PTRSSI_Uart]; } Ubiquitous Computing

  8. MCH_PTRSSIM.nc • MCH_PTRSSIM.nc 파일 • 경로: • /opt/tinyos-2.x/contrib/zigbex/MCH_PTRSSI/MCH_PTRSSIM.nc • 함수 실행순서 • Boot.booted() → CommControl, SerialControl → RF configuration(파워, 채널 설정) → CC2420config.sync() • CC2420config.syncDone() → Timer.startPeriodic () • 반복 Timer.fired () → task TryToSend () → DataMsg.send () • RecvMsg.receive() → Serial_Send.sendDone() Ubiquitous Computing

  9. MCH_PTRSSIM.nc 1: includes MCH_PTRSSI; 2: module MCH_PTRSSIM{ 3: uses { 4: interface Boot; interface Timer<TMilli>; 5: interface Leds; 6: interface BusyWait<TMicro, uint16_t>; 7: interface SplitControl as CommControl; 8: interface AMSend as DataMsg; 9: interface Receive as RecvMsg; 10: interface SplitControl as Serial_Control; 11: interface AMPacket as Serial_Packet; 12: interface AMSend as Serial_Send; 13: interface CC2420Packet; 14: interface CC2420Config; }} 15: implementation 16: { 17: message_t sendmsg, uartmsg; 18: uint16_t mySeq; 19: uint8_t myPowerLevel; 20: uint8_t myChannel; 21: task void RF_Configuration_Setting (); 22: task void TryToSend(); 7~9: RF 관련 인터페이스 10~12: Serial 관련 인터페이스 Ubiquitous Computing

  10. MCH_PTRSSIM.nc 23: event void Boot.booted() { 24: atomic mySeq = 0; 25: call CommControl.start(); 26: } 27: event void CommControl.startDone(error_t error) { 28: call Serial_Control.start(); 29: } 30: event void Serial_Control.startDone(error_t error) { 31: post RF_Configuration_Setting (); 32: } 33: event void CommControl.stopDone(error_t error) {} 34: event void Serial_Control.stopDone(error_t error) {} 35: task void RF_Configuration_Setting () { 36: call BusyWait.wait(3000); 37: atomic myPowerLevel = 0x1f; 38: call CC2420Packet.setPower (&sendmsg, myPowerLevel); 39: atomic myChannel = 15; 40: call CC2420Config.setChannel (myChannel); 41: call CC2420Config.sync(); 42: } 23: RF 컴포넌트를 시작하기 위해 CommControl .start() 호출(원형은 ActiveMessageC와 연결되는 SplitControl) 27: Serial 컴포넌트를 시작하기 위해 Serial_Control.start() 호출 30: 모트의 RF 채널과 파워를 조절하기 위한 RF_ Configuration_Setting() 함수를 호출 38 : RF 파워 조절 함수 호출 실제 RF 파워는 message_t 구조체의 Meta필드에 있는 tx_power 변수에 의해 설정되는데 이 함수로 그 값을 조절한다 // 0x1f = 0 dBm // 0x1b = -1 dBm // 0x17 = -3 dBm // 0x13 = -5 dBm // 0x0f = -7 dBm // 0x0b = -10 dBm // 0x07 = -15 dBm // 0x03 = -25 dBm 40: RF 채널 변경 함수 호출 // Channel Ranges: 11 ~ 26 41: 설정된 값을 CC2420 RF 칩으로 전송 Ubiquitous Computing

  11. MCH_PTRSSIM.nc 43: event void CC2420Config.syncDone ( error_t error ) { 44: if ( error == SUCCESS ) { 45: call Timer.startPeriodic(1000); 46: call Leds.led1On(); //Green On 47: }else{ post RF_Configuration_Setting (); 48: }} 49: event void Timer.fired() { 50: call Leds.led1Toggle(); //Green Toggle 51: post TryToSend(); 52: } 53: task void TryToSend() { 54: struct MCH_PTRSSI_Msg *pack; 55: pack = (struct MCH_PTRSSI_Msg *) call DataMsg.getPayload(&sendmsg); 56: pack->seq = mySeq++; 57: pack->SenderID = TOS_NODE_ID; 58: pack->PowerLevel = myPowerLevel; 59: pack->Channel = myChannel; 60: if (call DataMsg.send(AM_BROADCAST_ADDR, &sendmsg, sizeof(struct MCH_PTRSSI_Msg)) == SUCCESS){ 61: call Leds.led2On(); //Yellow On 62: }} 43: 원하는 채널을 CC2420 RF 칩에 설정하게 되면 CC2420Config.syncDone() 이벤트 함수가 호출된다. 성공이라면, 주기적 동작을 위해 Timer.startPeriodic (1000)을 호출하고, 실패라면 설정함수를 다시 호출 53: TryToSend() 함수에서는 MCH_PTRSSI_Msg 구조체에 seq, 자신의 주소, 설정한 파워 및 채널 정보를 넣어 RF로 send 한다. Ubiquitous Computing

  12. MCH_PTRSSIM.nc 63: event void DataMsg.sendDone(message_t* msg, error_t error) { 64: if (error == SUCCESS){ 65: call Leds.led2Off(); 66: }} 67: event message_t* RecvMsg.receive(message_t* msg, void* payload, uint8_t len) { 68: struct MCH_PTRSSI_Msg *recv_pack = (struct MCH_PTRSSI_Msg *) call DataMsg. .getPayload(&uartmsg); 69: memcpy((void*)recv_pack, payload, len); 70: recv_pack->RSSI = call CC2420Packet.getRssi(msg); 71: recv_pack->RSSI -= 45; 72: call Serial_Packet.setSource(&uartmsg, recv_pack->SenderID); 73: if (call Serial_Send.send(TOS_NODE_ID, &uartmsg, sizeof(struct MCH_PTRSSI_Msg)) == SUCCESS) 74: call Leds.led0Toggle(); 75: return msg; 76: } 77:} 67: 만약 다른 노드로부터 RF 패킷을 받으면 RecvMsg.receive() 함수가 호출된다. 함수에 서 받은 패킷의 RSSI값에서 -45를 하여 dBm 단위의 RSSI 값을 만든 뒤 Serial로 전송 Ubiquitous Computing

  13. MCH_PTRSSI.h • MCH_PTRSSI.h 에 정의된 데이터 포멧 #define MSG_LEN 6 struct MCH_PTRSSI_Msg { uint16_t seq; uint16_t SenderID; uint8_t PowerLevel; uint8_t Channel; char RSSI; //RSSI value can be a minus(a negative value). uint8_t Pending; }; enum { AM_MCH_PTRSSI_Msg = 26, AM_MCH_PTRSSI_Uart = 27 }; Ubiquitous Computing

  14. MCH_PTRSSI 예제 실습 • MCH_PTRSSI 컴파일 및 포팅 • AVR Studio를 이용하여 두 개의 센서 노드에 각각 reinstall된 hex파일을 program 함. • SerialText 프로그램을 이용하여(시리얼 통신을 통해)SenderID, Power Level, Channel, RSSI 확인 $ cd /opt/tinyos-2.x/contrib/zigbex/MCH_PTRSSI $ make zigbex $ make zigbex reinstall.0 //0번 아이디 $ make zigbex reinstall.1 //1번 아이디 Ubiquitous Computing

  15. Packet Heaer Serial Header Data Seq Src Channel Pedding Power RSSI(-59dBm) unsigned char RSSI = 197; //C5 char RSSI_Signed = (char) RSSI; printf("%d, %d\n", RSSI, RSSI_Signed); //-59 Ubiquitous Computing

More Related