[INTERFACE]/ZIGBEE2010. 10. 22. 21:30

[CC2500] 소형 Zibee 모듈 제작

[CC2500] 소형 Zibee 모듈 제작


소형의 RF to UART모듈을 제작 했다. 기존 USB2UART, Bluetooth2UART 모듈과 호환되는 핀맵으로 제작하여 기존 보드에 연결하여 무선으로 시리얼 데이터 전송이 가능하다.
UART로 입력되는 데이터를 UART로 전송하고 수신된 데이터를 UART로 출력한는 기능을 한다.

기본적으로 모듈간 시리얼 통신을 무선으로 변경해 주는 기능을 하지만 PC에 연결도 가능하다. 만들면서  STM32를 이용하여 USB2UART 도 함께 제작하였다. 장점이라면 펌웨어를 수정할 수 있기 때문에 보레이트나 기타 여러 기능을 추가 할수 있다.




Posted by nexp

댓글을 달아 주세요

  1. 설동국

    관리자의 승인을 기다리고 있는 댓글입니다

    2011.07.16 10:31 [ ADDR : EDIT/ DEL : REPLY ]

[INTERFACE]/ZIGBEE2010. 8. 17. 18:53

[CC2500] ez430-RF2500 가지고 놀기 3 - RF 통신

ez430-RF2500을 가지고 기본적인 테스트가 끝났기 때문에 이제는 CC2500을 이용하여 RF통신 실험을 해 보자. TI에서 제공되는코들르 보면 좀 복잡하고 추가나 수정이 어여운 코드로 작성되어 있는데... 이 부분을 좀 수정하여 좀 더 간단히 코드를 작성해 보았다.

일단 CC2500 기본 제어 부 및 SimpliciTi는 특별히 수정할 필요가 없기 때문에 한 폴더로 넣어서 라이브러리 형태로 취급하고 RF송수신을 위한 가장 기본 코드만 남기도록 한다. -> 아래와 같이 하면 아주 심플 해 진다.



network config파일은 EXTRA Option에 등록한다.
-f"$PROJ_DIR$\Configuration\Access Point\smpl_config.dat"
-f"$PROJ_DIR$\Configuration\smpl_nwk_config.dat"



그리고 Stack Szie 설정도 아래와 같이 해 둔다. ( 설정하지 않으면 정상동작을 하지 않는데... 원인 찾기가 상당히 힘들었다.)




End Device에서 스위치를 누를때마다 데이터를 수신 받아서 UART로 표시 하는 예제코드
void main (void)
{
 addr_t lAddr;
 
 SystemInit();
 Delay(1000);
 
 CC2500_Init();
 
 DebugInit(BAUD_115200);
 DebugPrint("CC2500 RF Test Program.\r\n");

 //-------------------------------------------------------
 // set device address
 if( Flash_Addr[0] == 0xFF &&
  Flash_Addr[1] == 0xFF &&
  Flash_Addr[2] == 0xFF &&
  Flash_Addr[3] == 0xFF )
  {
   createRandomAddress();
  }
 
 lAddr.addr[0]=Flash_Addr[0];
 lAddr.addr[1]=Flash_Addr[1];
 lAddr.addr[2]=Flash_Addr[2];
 lAddr.addr[3]=Flash_Addr[3];
 SMPL_Ioctl(IOCTL_OBJ_ADDR, IOCTL_ACT_SET, &lAddr);
 //------------------------------------------------------- 
 
 SMPL_Init(sCB);
 
 // main work loop
 while (1)
 {
  ListenForConnection();
  ProcessCC2500RX();
 }
}

void RevDataString(int addr, signed char rssi, unsigned char *Msg, unsigned int Size)
{
 unsigned int i;
 for(i=0;i<Size;i++)
 {
  DebugPrint("%x ", Msg[i]); 
 }
 DebugPrint("\r\n");
}


스위치를 입력할 때마다 index값을 증가 시켜 전송하는 코드
 if(GetSw1())
 {
  if(!flag)
  {
   flag = 1;
   msg[0] = index++;
  
  if(SMPL_SUCCESS == SMPL_Send(linkID1, msg, 1))  
  {

  }
    
 }else
 {
  if(flag)flag=0;
 }


테스트 결과
CC2500 RF Test Program.
0
1
2
3
4
5
6
7
8
9
Posted by nexp

댓글을 달아 주세요

[INTERFACE]/ZIGBEE2010. 8. 16. 15:50

[CC2500] ez430-RF2500 가지고 놀기 2 - UART 통신

[CC2500] ez430-RF2500 가지고 놀기 2 - UART 통신
임베디드 환경에서 가장 간단히 하고 강력한 디버거는 printf가 아닐까... 아무튼 TI에서 제공 되는 예제는 UART사용이 좀 지저분하다. 물론 코드 사이즈 줄이기엔 좋지만 디버깅할때는 너무 불편하다. printf 사용할 수 있도록 환경을 구성해서 테스트 해보려고 한다.

ez430 키트에서 제공되는 USB동글은 JTAG기능 및 UART통신이 가능하지만 보레이트를 9600이상 올리면 깨지는 현상이 많다(아주 많이 심각함)
그래서 USB2UART에 연결해서 테스트 하려고 하는데... RF2500의 확장 포트에는 UART를 뽑아 놓지 않았다.
윽... 아래와 같이 점퍼 날려서 확장핀을 뽑았다.



CC2500 UART통신 테스트 예제 코드
간단히 시리얼 포트로 데이터 받아서 LED On/Off하고 카운트 값을 printf를 이용하여 표시하는 예제 코드를 작성하였다.

#include "system.h"
#include "serial.h"
 
//-----------------------------------------------------------------------------
int main(void)
{
   int cnt = 0;

    //System Init
 SystemInit();
 
    //LED Init
 Led1Init();
 Led1On();
 
 //Serial Init
 DebugInit(BAUD_115200);
 DebugPrint("Serial Test Program.\r\n");

 while (1)
 {
  switch(U0_GetByte())
  {
  case '0':
     Led1Off();
   DebugPrint("LED OFF %d\r\n", cnt);  
   cnt ++; 
     break;

  case '1':
   Led1On();
   DebugPrint("LED ON %d\r\n", cnt);  
   cnt ++; 
     break;
  }  
 }
}
//-----------------------------------------------------------------------------

Posted by nexp

댓글을 달아 주세요

[INTERFACE]/ZIGBEE2010. 8. 16. 14:51

[CC2500] ez430-RF2500 가지고 놀기1 - LED, Switch 제어

[CC2500] ez430-RF2500 가지고 놀기1 - LED, Switch 제어
ez430-RF2500 키트를 이용하여 몇가지 테스트를 진행해 보았다.
TI에서 제공되는 예제는 코드 스타일이 나하고 맞지 않고 뭔가 수정하려고 해도 너무 복잡하게 되어 있어 전체적인 해도하고 원하는 형태로 쉽게 변경하기 위해 새롭게 작성해 보았다.




LED
먼저 LED를 깜박이는 예제를 작성해 보자.
LED는 P1.0에 Red, P1.1에 Green LED가 연결되어 있다.
ez430-RF2500 예제는 8Mhz에서 돌아 가므로 SystemInit()함수에서 8Mhz로 돌아 가도록 설정하고(SYS_CLK_8MHZ),  LED Driver 은 간단히 아래와 같이 작성하면 된다.
[config.h]

#define __SYS_CLK__     SYS_CLK_8MHZ
//-----------------------------------------------------------------------------
// On board LED Driver
//Red
#define LED1_BIT     BIT0
#define Led1Init()     Sbi(P1DIR, LED1_BIT)
#define Led1Off()     Cbi(P1OUT, LED1_BIT)
#define Led1On()     Sbi(P1OUT, LED1_BIT)
#define Led1Toggle()    Tbi(P1OUT, LED1_BIT)
//Green
#define LED2_BIT     BIT1
#define Led2Init()     Sbi(P1DIR, LED2_BIT)
#define Led2Off()     Cbi(P1OUT, LED2_BIT)
#define Led2On()     Sbi(P1OUT, LED2_BIT)
#define Led2Toggle()    Tbi(P1OUT, LED2_BIT)
//-----------------------------------------------------------------------------


아주 심플하다...
#include "system.h"

//-----------------------------------------------------------------------------
void main(void)
{
    SystemInit();
   
    Led1Init();
    Led1On();
 
    Led2Init();
    Led2Off(); 

    while(1)
    {
  //Led Toggle..
        Led1Toggle();
        Led2Toggle();  
        Delay(300);  
    }
}
//-----------------------------------------------------------------------------



스위치
디버깅용으로 스위치 누를때 마다 CC2500을 이용하여 RF로 데이터를 전송하도록 하기 위해서 스위치를 사용하면 좋다. 스위치는 P2.2에 연결되어 있고 내부 풀업을 사용해야 한다. 아래와 같이 스위치 드라이버를 작성하면 되겠다.
[config.h]

//-----------------------------------------------------------------------------
//Switch Driver
#define SW1_BIT      BIT2
#define SW1_PORT     P1IN
#define Sw1Init()     Sbi(P1REN, SW1_BIT);Cbi(P1DIR, SW1_BIT);
#define GetSw1()     (!(SW1_PORT&SW1_BIT))
#define WaitForSw1()    while(GetSw1())
//-----------------------------------------------------------------------------



간단히 스위치를 누르면 LED를 깜박이도록 했다.
#include "system.h"

//-----------------------------------------------------------------------------
void main(void)
{
    SystemInit();
   
    Led1Init();
    Led1On();
 
 Sw1Init();
 
    while(1)
    {
        if(GetSw1())Led1On();
        else Led1Off();
    }
}
//-----------------------------------------------------------------------------



Posted by nexp

댓글을 달아 주세요

  1. nazzoo

    관리자의 승인을 기다리고 있는 댓글입니다

    2011.06.16 17:17 [ ADDR : EDIT/ DEL : REPLY ]
  2. pia

    관리자의 승인을 기다리고 있는 댓글입니다

    2012.01.11 10:18 [ ADDR : EDIT/ DEL : REPLY ]

[INTERFACE]/ZIGBEE2009. 9. 20. 22:16

Zigbee 이용 3축 자이로, 가속도 센서 데이터 전송


Zigbee 이용 3축 자이로, 가속도 센서 데이터 전송



보드의 MCU는 Cortex-M3 STM32를 사용하였고 3축 가속도, 3축 자이로 센서를 포함하여 Zigbee무선 네트웍을 이용하여 ADC 6채널, PWM 6채널을 무선 제어 가능하다.

Zigbee를 이용한 무선으로 센서 데이터 전송 테스트 동영상



외부 ADC입력으로 VR값 무선 전송 테스트 동영상



멀티모듈 제어 테스트 동영상
Zigbee를 이용하여 다수 보드의 LED를 무선으로 제어하는 테스트.

Posted by nexp

댓글을 달아 주세요