로그인회원등록 내글장바구니주문조회현재접속자
 상품 검색








 게시판 검색





 
 
회원등록 비번분실


온라인 입금계좌
ㆍ기업은행
ㆍ219-043192-01-028
ㆍ이건영

      거래은행 바로가기
 
 Sensor Applications
아듀이노 공개소스
작성자 avrtools™        
작성일 2008/11/20
첨부#1 Minisa2.zip (214KB) (Down:730)
ㆍ추천: 0  ㆍ조회: 6509   
  CC2500 Zigbee RF Modem #1
TI사의 CC2500을 사용하여 2.4GHz 주파수대의 Zigbee RF Modem을 제작해 보겟습니다.
참조한 자료는 Chipcon사(현재는 Texas Instrument)의 CC2500EM입니다.
 
CC2500은 1$ 대의 가격으로  XBee Modem과 같은 Zigbee Modem을 저렴하게 만들 수 있습니다.
좌측은 외부 안테나용 SMA 커넥터를 장착한 제품, 우측은 다이폴 안테나를 기판에 내장한 제품입니다. 
  
 
고감도 외부 안테나를 연결하려면 좌측 제품, 개발용으로 간단히 실험하려면 우측 제품이 좋습니다.
현재 TI 에서 대리점을 통해서 판매하는 CC2500EM 키트는 커넥터 방식만 판매하고 있습니다.
2.4GHz 지향성 안테나 제작 : http://www.avrtools.co.kr/technote7/board.php?board=sensor&command=body&no=2
 
Chipcon사의 CC2500EM 기판의 회로

  
2.4 GHz 주파수는 원래 ISM 대역이며, 전자렌지, 고주파 전원, 고주파 분석기등의 공업용 주파수이다.
외국은 ISM 대역에서의 전파실험, 기기제작에 제한을 두고 있지 않으나, 우리나라는 전파규제가 있다.
그러나, 실험용 개발용, 대회용, 학습용으로 제작하는 경우에는 별도로 전파법규로 제한을 하지는 않는다.
 
 
먼저 직접만든 Zigbee 모뎀에서 전파가 나가는지, 주파수가 맞는지? 방해전파는 없는지를 알려면,
RF Spectrum Analyzer가 필요하다. 2.5GHz의 주파수대역 측정기는 비싸므로 개인이 구입하기 어렵다.
그래서, 우선 CC2500으로 만든 Spectrum Analyzer를 제작한 다음, Zigbee RF Modem을 제작한다.

CC2500 접힌 다이폴 안테나 설계
CC2500EM 기판을 구입하지 않고, CC2500 IC를 구입하여 CC2500 RF Modem 기판을 제작하려면,
아래와 같이 기판에 내장하는 접힌 다이폴 안테나로 설계하는 방법이 가장 저렴하다. (사용 부품도 줄어든다)


 
안테나는 2.4 GHz 유전체 칩 안테나를 사용할 수도 있다.
    


 
CC2500 Zigbee RF Modem의 부품 목록
C51 100 nF ±10%, 0402 X5R
C81 27 pF ±5%, 0402 NP0
C101 27 pF ±5%, 0402 NP0
C121 100 pF ±5%, 0402 NP0
C122 1.0 pF ±0.25 pF, 0402 NP0
C123 1.8 pF ±0.25 pF, 0402 NP0
C124 1.5 pF ±0.25 pF, 0402 NP0
C131 100 pF ±5%, 0402 NP0
C132 1.0 pF ±0.25 pF, 0402 NP0
L121 1.2 nH ±0.3 nH, 0402 monolithic
L122 1.2 nH ±0.3 nH, 0402 monolithic
L131 1.2 nH ±0.3 nH, 0402 monolithic
R171 56 kΩ ±1%, 0402
XTAL 26.0 MHz SMD
 
CC2500 기판 제작 방법

레이저 프린터로 OHP 필름에 기판의 이미지를 흑백으로 인쇄하고,
뜨거운 전기 다리미로 OHP 필름의 인쇄면을 기판의 동박면에 눌러 붙힌 다음, (몇번 해보아야 한다)
기판에 붙어버린 OHP 필름을 잘 떼어내면, 검은색의  레이저 토나가 기판의 동박면에 열전사된다.
 
이제 동판을 부식시키는 화공약품을 구입하여, 플라스틱 그릇에 부어 놓고,
기판을 약품에 패턴이 보이도록 담그어 놓으면, 토너가 없는 동박이 천천히 현상(etching)된다.
잘 부식된 것을 확인하고, 흐르는 물로 깨끗히 딱은 뒤, 샌드 페이퍼로 동판에 남아있는 토너를 딱아 낸다.
쓰고 남은 약품은 다음번에도 사용이 가능하다. (염화비닐로 된 투명용기에 보관하는것이 좋다)

다음, 전기드릴에 0.8~0.9 mm 드릴 비트를 장착하고, 기판의 패드중심에 구멍을 뚫으면 완성된다.
마지막으로 기판에 물을 부어가면서, 샌드 페이퍼로 조심해서 닦아주면 기판이 완성된다,
부품면의 심볼도 레이저 프린터로 OHP 필름을 인쇄하여 , 열전사 작업을 하면 윗면이 인쇄된다.   

좌측은 아듀이노용으로 판매하는 2.5GHz 대역의 MiniSA 상용제품, (관련 사이트 : Dunhaven Armitage )
우측은 누군가 용감하게 고주파 기판을 직접 만들어 인터넷에 올린 수제품이다.

 
우레탄 피복전선으로 만든, 둥근 형상의 안테나는 루프 안테나이며, 다이폴의 원조이다.
루프 안테나의 둘레는 (300,000 /2,440) x 0.5 x 0.98 mm이다.
둥근 루프 안테나를 옆으로 적당히 눌러 납작하게 만들어 공간을 절약한 방식이 다이폴 안테나이다.
 
아래 사진은 유전체 칩 안테나를 사용한 기판이다.
 

이 프로젝트에 사용한 M168-USB 기판

 

CC2500 기판과 CC2500의 연결
3VO = CC2500 VDD
GND = CC2500 GND
PD3 = 1K 저항 --- (A) LED (K) --- GND
PB2 = 1K 저항 --- CC2500 CS 
PB3 = 1K 저항 --- CC2500 SI
PB4 = CC2500 SO
PB5 = 1K 저항 --- CC2500 SCK

M168-USB용 주파수대역 측정기의 펌웨어
첨부 파일 #1에 들어있는 파일은 다음과 같다. 

 
CC2500sa_v2.hex는 M168-USB 기판에 업로드하는 MiniSA2용 펌웨어 HEX 파일 (소스는 추후 공개할 예정).
Avrdude.exe는 USB로 연결된 M168-USB 기판에 HEX 파일을 직접 업로드하는 소프트웨어.
(Avrdude.exe는 별도의 ISP 없이, PC에서 HEX 파일을 아듀이노 기판으로 업로드합니다) 
MiniSA2 HEX 파일 -> Avrdude.exe -> PC -> USB PORT -> USB-RS232 ->ATMega68 MPU
 
 
MiniSA2.exe는 USB로 연결된 M168-USB 주파수 대역 측정기의 PC 소프트웨어로 PC에서 실행합니다. 
ISM Band Anntena ->MiniSA (아듀이노) -> USB Port -> PC -> MiniSA2.exe -> Spectrum Analyzer
 

M168-USB 기판에 Mini Spectrum Analyzer 펌웨어 굽기
첨부파일 #1을 내려 받고, 적당한 곳에 압축을 푼다.
비스타 사용자는 ArduinoProg.exe의 속성과 권한수준을 XP호환모드와 관리자로 실행해야 통신포트를 인식한다.
혹시, 비스타를 자동으로 업그레이드한 다음에도, 다시한번 속성을 변경해 주어야 USB 포트가 인식된다. 


M168-USB 기판을 PC의 USB 포트에 연결하고, ArduinoProg.exe를 실행한다.
USB 포트에 연결된 통신포트를 선택한다. (대부분 자동으로 선택되어 있어야 한다)
  

Brows를 눌러서 첨부된 HEX 파일 cc2500sa_v2.hex를 선택하고, Program을 누른다.

이제 MiniSA2.hex를 M168-USB의 펌웨어로 업로드 하였으므로, M168-USB와 CC2500 기판을 연결한 다음,
M168-USB로 만든 MiniSA2  하드웨어와, MiniSA2.exe 소프트웨어를 PC에서 실행할 수 있다.

MiniSA2.exe를 실행한다. 아래와 같은 화면이 나오면 정상으로 작동되는 것이다.
제작한 Mini Spectrum Analyzer로 무선 WLAN 사용환경을 감시하는 화면 (백색선은 Peak Hold값, 청색선은 순시값)
 

사진은 WLAN을 켠 상태로 중앙부분의 넓은 폭의 돌출부분이 사용중인 WLAN 채널의 주파수 대역이다.
신호가 들어오지 않는다면, 무선공유기나 무선노트북의 가까이 놓고, 안테나를 빼면 신호가 사라지고,
안테나를 연결하면, 넓은 폭의 무선공유기 송신채널의 신호가 위와 같이 포착되어야 한다. 

CC2500을 사용한 WiFi-Zeegbee 겸용 MINI-SA 작동 화면 (관련 사이트 : Dunhaven Armitage )

지그비는 모두 26개의 채널이 할당되어 있으며, ch0 = 868~868.6 MHz, ch1~C10 = 902~928 MHz(미국 전용),
ch11~ch26은 2.400~2483.5 MHz로 우리나라가 포함된 ITU 제3 지역에 할당되어 있다. (미국은 모두 사용)

CC2500 Zigbee RF Modem의 구조와 원리
2.4GHz Zigbee RF Modem CC2500의 외형은 20핀 QLP로 아래와 같다.
 

CC2500의 구조
 
 
CC2500 송신부의 기본은 RF frequency direct synthesis로, 고주파를 직접 조합하는 방법이다.
수신/송신 회로에는 저잡음 증폭기(LNA)와 전력증폭기(PA)가 있고, GMSK 변조/복조기를 내장하고 있다.
또한 RC 발진기와 PLL을 사용하여, 26MHz 기준으로 부터 안정된 발진(LO) 및 I/Q 변조/복조 능력을 가진다.
 
그외에도 CC2500은 FEC 자동오류 보정 및 패킷의 조립/분해가 자동으로 IC 내부에서 지원된다.
CC2500은 반이중(Half Duplex)으로 동시에 송수신이 안된다, 송신/수신을 SPI 명령으로 전환한다.
또한, 송수신 데이터를 저장하는 256 바이트의 FIFO를 내장하고 있으므로, MPU의 데이터 처리가 용이하다. 
 
CC2500 전송 패킷의 구조
 
 
CC2500에서 전송되는 패킷의 구조는 다음과 같다.
Preamble은 시작 부호이며 0x55 (비트 01010101)로 0과 1이 반복되는 신호로 1~4 바이트이다. 
Sync word는 동기를 맞추는 코드로 16 혹은 32 비트 이다.
프리엠블을 1 바이트만 사용하고, 동기 바이트로 0x55를 4개를 사용하는 방법도 있다, 
   
Length field는 전송할 데이터의 수를 나타낸다. (버퍼와 FIFO를 일치시켜 고정길이로 사용하기도 한다)
Address field는 주소를 나타낸다. Data field는 FEC 자동오류 정정방식으로 송수신하는 확장된 데이터이다.
CRC-16은 송-수신한 데이터의 오류를 점검하는데 사용한다. (CRC Calc를 켜면 자동으로 추가된다) 
 
CC2500 하드웨어
기준주파수 발진용 XTAL은 26~27 MHz를 사용하며, 주파수 분해능은 400Hz이다. 
송수신 주파수 안정도는 ±40 ppm으로 매우 안정하다. 전송속도는 250~500 Kbps이다. 
전송속도에 따라서 내장된 대역통과 여파기(Bandpass Filter)의 폭을 4단계로 설정할 수 있다.

MDMCFG4의 CHANBW_M 2 비트와 CHANBW_E 2비트를 설정하여 16종의 설정을 할 수 있다.
0000 = 812 KHz, 0001 = 406 KHz, 0010 = 203 KHz, 0011 = 102 KHz,
0100 = 650 KHz, 0101 = 325 KHz, 0110 = 162 KHz, 0111 = 81 KHz,
1000 = 541 KHz, 1001 = 270 KHz, 1010 = 135 KHz, 1011 = 68 KHz,
1100 = 464 KHz, 1101 = 232 KHz, 1110 = 116 KHz, 1111 = 58 KHz,

 
필터의 대역폭 설정은 통신속도에 맞춘다. 480 kHz의 대역폭은 284 kHz로 전송할 수 있다.
800 KHz의 필터는 대역폭의 80% 수준이 600KHz를 사용할 수 있으므로 전송속도는 480 KHz이다.
고주파 출력은 1 dBm으로 -30 dBm 까지 설정할 수 있다. Zigbee 모뎀의 통신 거리는 30m~100m이며,
실내에서의 통신거리 보다는 실외에서 멀리 나가며, 지향성 안테나를 사용하면 거리가 늘어난다.
 
CC2500의 작동 보증전압은 1.8V~3.6V 이므로 가급적 3.3V 이하의 전원 전압을 사용하는 것이 좋다.
5V 전원을 사용하는 MPU와 연결하려면, 5V to 3.3V Level converter나 저항감쇄회로를 사용해야 한다.
 
 
CC2500 Zigbee RF Modem 규격
•  Complete RF Transceiver
•  Onboard Data Encryption
•  Automatic collision avoidance
•  ‘Wake on Radio’ feature
•  Low current consumption
•  Wide Operating voltage 1.8 – 3.6 Volts
•  Operating Frequency: 2.4 – 2.483 GHz
•  Programmable Output Power and High Sensitivity
•  Range up to 50 metres at +1dBm
•  Data rate 1.2 – 500 kbps

CC2500 설정 파라메터 (설정 변경으로 많은 용도에 적용이 가능하다.)
• Power-down / power up mode
• Crystal oscillator power-up / power-down
• Receive / transmit mode
• RF channel selection
• Data rate
• Modulation format
• RX channel filter bandwidth
• RF output power
• Data buffering with separate
• Packet radio hardware support
• Forward Error Correction (FEC) with interleaving
• Data Whitening
• Wake-On-Radio (WOR)

CC2500 Zigbee Modem 규격 (아래와 같은 규격으로 모뎀을 작동시킨다)
Crystal accuracy = 40 ppm
X-tal frequency = 26 MHz
RF output power = 0 dBm
RX filterbandwidth = 541.7 KHz
Phase = 1
Datarate = 250 Kbps
Modulation = 7 = MSK
Manchester enable = 0 = Manchester disabled
RF Frequency = 2433 MHz
Channel spacing = 200 kHz
Channel number = 0

RX/TX data = 0 = Normal mode (use FIFO for RX/TX)
CRC operation = 1 = CRC calculation in TX/RX 
Forward Error Correction = 0 = FEC disabled
Packetlength = 255 byte/max
Preamble count = 2  ( 4 bytes)

Address check =  0 = No address check
Device address = 0
 
CC2500의 SPI 기본 인터페이스 (SPI 인터페이스로 CC2500 무선모뎀을 설정한다)
 
 
MEGA168의 PORTB Pb3,PB4,PB5를 SPI 인터페이스로 설정하면 CC2500과 자동으로 송수신 된다.
MPU는 마스터 모드로 설정하며, CC2500은 슬레이브 모드로 작동한다. 
 
SPI의 CSn에 Low를 출력하면, CC2500의 MISO 핀이 Low로 되어 준비상태를 나타낸다.
MPU에서는 MISO 핀을 직접 읽을 수도 있으나, SPSR의 SPIF를 읽어도 된다.

CC2500은 0x00~0x2F의 Register 47개와 0x30~0x3F의 Status register 16개를 가지고 있다.
MPU에서 MOSI로 Header byte, Data byte 혹은 Command Strobe를 CC2500으로 송신하면,
CC2500은 매번 MISO 핀으로 Status byte를 응답한다, MPU에서는 전송직후에 Status byte를 읽을 수 있다.
 
B7 = CHIP_RDYn는 SPI를 사용중에는 항상 Low로 된다.
B6~B4 = STATE 2:0은 CC2500의 칩 상태를 나타낸다. (000~111은 모뎀의 작동상태)
000 = IDLE (대기상태)
001 = RX (수신 중)
010 = TX (송신 중)
011 = FSTXON (빠른 송신 준비됨)
100 =CALIBRATE (PLL 주파수 교정중)
101 = SETTLING (PLL 주파수 설정중)
110 = RXFIFO_OVERFLOW (수신 데이터가 넘쳣다)
111 = TXFIFO_UNDERFLOW (송신 데이터가 부족하다)
B3~B0은 FIFO_BYTES_AVAILABLE[3:0]으로 FIFO로 전송가능한 바이트 수를 나타낸다. 

다음 함수들은 SPI를 통하여 CC2500으로 1 byte를 지정된 Register에 쓰거나 읽는 함수들이다. 
Write Burst 함수는 buff[x]로 정의된 데이터 블록을 SPI를 통해서 CC2500으로 송신하고,
Read Burst 함수는 SPI를 통해서 수신된 CC2500의 데이터 블록을 buff[x]에 저장한다.
Raed Status 함수는 CC2500의 Status Register를 읽어오며, Burst 읽기/쓰기는 연속 읽기/쓰기 이다.

SPI 초기화 함수
// init SPI for CC2500 interface
void spi_init()
{
  DDRB &= ~(1 << RF_MISO);     // miso input
  DDRB |= (1 <<RF_MOSI) | (1 <<RF_SCK) | (1 << RF_CS);
 
  PORTB |= (1 << RF_SCK); // sclk =1
  PORTB &= ~(1 << RF_MOSI); // mosi =0
  PORTB &= ~(1 << RF_CS); // cs =0
  PORTB |= (1 << RF_CS); // cs =1 for CC2500 hardware reset
  _delay_us(40);                // delay 40us for cc2500
 
  PORTB &= ~(1 << RF_CS); // cs =0
  SPSR = 0x01;   // spi2x =1 for spi clock = 2X
  SPCR =(1<<SPE)|(1<<MSTR)|(1<<SPR0);  // Enable SPI, Master, set clock rate fck/16
  _delay_ms(10);                // delay 10ms for start up
 
  SPDR = 0x30;   // 0x30 =Reset command for CC2500
  while(!(SPSR & (1 << SPIF))); // end of SPI command?
  PORTB |= (1 << RF_CS); // cs =1
}
 
CC2500 읽기 함수
// spi_read_byte
void spi_read_byte(uint8 reg, uint8* data)
{
  PORTB &= ~(1 << RF_CS);    // CC2500 CS = 0 =on
  SPDR = (reg | 0x80);             // enable SPI as SPCR =1 << SPE;
  while(!(SPSR & (1 << SPIF)));    // Wait for reception complete
  SPDR = 0;                        // end of receive data
 
  while(!(SPSR & (1 << SPIF)));    // Wait for reception complete
  *data = SPDR;                    // received SPI data & save it
  PORTB |= (1 << RF_CS);    // CC2500 CS = 1 =off
}
 
CC2500 Burst 읽기 함수
// spi_read_burst
void spi_read_burst(uint8 reg, uint8 *buff, uint8 count)
{

  uint8 i;

  PORTB &= ~(1 << RF_CS);    // CC2500 CS = 0 =on
  SPDR = (reg | 0x80);             // enable SPI as SPCR =1 << SPE;
  while(!(SPSR & (1 << SPIF)));    // Wait for reception complete
  for (i =0; i <count; i++)
  {
     SPDR = 0;                        // end of receive data
     while(!(SPSR & (1 << SPIF)));    // Wait for reception complete
     buff[i] =SPDR;                 // received SPI data & save it
  }
  PORTB |= (1 << RF_CS);    // CC2500 CS = 1 =off
}


CC2500 status 읽기 함수
// spi_read_status
void spi_read_status(uint8 reg, uint8 *status)
{
  PORTB &= ~(1 << RF_CS);    // CC2500 CS = 0 =on
  SPDR = (reg | 0x80);             // enable SPI as SPCR =1 << SPE;
  while(!(SPSR & (1 << SPIF)));    // Wait for reception complete

  SPDR = 0;                        // end of receive data
   while(!(SPSR & (1 << SPIF)));    // Wait for reception complete
  *status =SPDR;                   // received SPI data & save it
  PORTB |= (1 << RF_CS);    // CC2500 CS = 1 =off
}


CC2500 Byte 쓰기 함수

// spi_write
void spi_write_byte(uint8 reg, uint8 data)
{
  PORTB &= ~(1 << RF_CS);  // CC2500 CS =on
  SPDR =(reg & 0x7F);            // Start transmission
  while(!(SPSR & (1 << SPIF)));  // Wait for transmission complete
 
  SPDR = data;                   // Start transmission
  while(!(SPSR & (1 << SPIF))); // end of SPI command?
  PORTB |= (1 << RF_CS);  // CC2500 CS = 1 =off
}

CC2500 Strobe 쓰기 함수
// spi_write_strobe
void spi_strobe(uint8 strobe)
{
  PORTB &= ~(1 << RF_CS);  // CC2500 CS =on
  while(!(SPSR & (1 << SPIF)));  // Wait for transmission complete

  SPDR = strobe;                   // write strobe
  while(!(SPSR & (1 << SPIF))); // end of SPI command?
  PORTB |= (1 << RF_CS);  // CC2500 CS = 1 =off
}

 
CC2500 Burst 쓰기 함수
// spi_write_burst
void spi_write_burst(uint8 reg, uint8 *buff, uint8 count)
{

  unit8 i;

  PORTB &= ~(1 << RF_CS);  // CC2500 CS =on
  SPDR =(reg & 0x7F);            // Start transmission
  while(!(SPSR & (1 << SPIF)));  // Wait for transmission complete

  for (i =0; i <count; i++)
  {
    SPDR = buff[i];                   // wirte data to spi
    while(!(SPSR & (1 << SPIF))); // end of SPI command?
  }
  PORTB |= (1 << RF_CS);  // CC2500 CS = 1 =off
}


CC2500의 4선식 SPI 인터페이스
  
SI, SO, SCLK, CS 이외에 CC2500의 상태나 패킷 송/수신 상태를 나타내는 GDO0, GDO2를 추가로 MPU의 IO 핀에 연결한다.
 
Burst Mode 송/수신의 설명
  

버스트모드는 64 바이트의 송신 버퍼와 수신버퍼를 이용하여 패킷으로 송수신을 한다.
 
CC2500의 2way 송/수신 방법
   
그림에서 위쪽의 방식은 전원을 켯다/껏다를 반복하는 소모적인 방법이다.
아래의 방식과 같이 전원을 켜면(Xtal Start) 송신과 수신을 순서대로 반복하고,
더 이상 통신할 내용이 없거나, 일정시간 대기상태가 필요할 때에 Power down을 시킨다.  

Caller는 송신우선, Listner는 수신우선, Traceiver는 수신우선으로 상대가 송신하지 않으면 송신을 한다.
2 장치가 동시에 수신하다가, 우연히 동시에 송신할 경우 충돌이 나올 수도 있다.
(좁은 통로에서 두사람이 서로 같은 방향으로 동시에 피하는 경우와 같다)
 
장치마다 수신 대기후에 송신을 시작하는 시간을 ID 마다 다르게 하는 방법이 좋다.
자신의 주소(ID)에 비례하는 적당한 숫자로 바꾸고, 난수를 더해서 지연한 다음,
상대가 송신하지 않는 것을 확인한 다음, 자신의 송신을 시작한다. (AX25 충돌회피 Soft CDMA 알고리즘에서,,,)
 
M168-USB 기판의 Zigbee RF Modem 소스
CC2500 Zigbee RF Modem #2에서 M168-USB 기판과 CC2500을 사용하여,
주파수 2.4GHz의 전송속도 250Khz의 표준 Zigbee RF Modem을 제작하겟습니다. 

이 프로그램은 무료 소프트웨어로, 신체와 재산 상의 어떤 위험과 손해를 보상하지 않습니다.
이 프로그램은 GNU 무료 소프트웨어 배포규정을 따릅니다.
Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
 AVRTOOLS™
   
이름아이콘 데구르
2009-07-30 11:29
혹시 #2는 올리실 계획이 없으신가요?
저도 CC2500을 이용하여 간단한 트랜스미터를 설계하고 있는데
MCU에 관한 지식이 너무 짧은 관계로 어려움을 겪고 있습니다.
   
이름아이콘 avrtools™
2009-09-19 23:46
통쨰로 질문하시면, 답변하기 어렵습니다.
진행하면서, 모르는 부분이 나오면,
질문 범위를 좁혀서 하나씩 질문하십시요.
   
이름아이콘 61edc
2011-07-13 20:53
질문드립니다. spi_write_byte함수의 reg부분에는 어떤값을넣어야하나요??
정말모르겠네요...

reg를사용하는 함수의 간단한사용예(데이터전송/수신)
을알려주시면 정말큰도움이될것같습니다.
그럼 즐거운시간되시길바랍니다.
   
이름아이콘 avrtools™
2011-08-08 20:35
소스에서
// spi_write_burst
void spi_write_burst(uint8 reg, uint8 *buff, uint8 count)
이함수를 부를때는 uint8 reg 값, uint8 *buff 값, uint8 count 값을 넣고 부르는 겁니다.
즉 spi_write_burst(x, y, z); 를 넣고 부르는 것입니다.
그러면 함수에서 x,y,z를 사용합니다.

함수를 부르는 방법은 (함수출력) 함수이름 (함수입력, ,,,, 함수입력) 이며
예를 들면 void spi_write_burst(변수1, 변수2,변수3); 으로 부르면
변수1,2,3을 변수에서 쓰고 나오는 변수는 void(없음) 입니다.

void 함수이름();  <--- 이렇게 부른다면
호출 후에 나오는 변수, 동시에 들어가는 변수가 없다는 겁니다.
이런 경우는 정말로 변수를 안 쓰든지,
혹은 미리 정의한 변수를 사용하는 방법인 경우입니다.
 
   
 
윗글 Arduino 0015 업그레이드
아래글 아듀이노 소프트웨어 Ver 0012
    N         제목    글쓴이 작성일 조회 추천
61 비접점식 QTouch 방식 근접검출 스위치 leeky 2016/01/21 (목) 625 0
60 Arduino 고속 오실로스코프 #3 avrtools™ 2012/03/29 (목) 17685 0
59 아날로그 8ch 데이터 로거 avrtools™ 2012/03/29 (목) 2767 0
58 Arduino DMX512 송신기 제작 avrtools™ 2012/03/15 (목) 2875 0
57 nRF24L01 무선모듈의 사용방법 avrtools™ 2012/03/07 (수) 5825 0
56 초음파 거리 측정기의 제작 avrtools™ 2011/09/18 (일) 4779 0
55 3축 가속도 센서 ADXL335 avrtools™ 2011/09/09 (금) 3307 0
54 Arduino Uno USBserial 펌웨어의 변경 avrtools™ 2011/08/27 (토) 2929 0
53 Arduino MIDI의 소개 avrtools™ 2011/08/19 (금) 3323 0
52 Arduino 고속 Oscillo Scope #2 avrtools™ 2011/08/12 (금) 2934 0
51 Arduino Uno 및 USB2serial Uno의 소개 [2] avrtools™ 2011/07/30 (토) 3193 0
50 Arduino IDE에서 AVRISP-mkII 사용방법 avrtools™ 2010/10/22 (금) 7815 0
49 아듀이노 초음파 거리측정 및 응용 avrtools™ 2010/03/14 (일) 4076 0
48 M328-USB의 비밀 온도센서 avrtools™ 2010/01/02 (토) 3499 0
47 M168-mini로 만드는 USBasp avrtools™ 2009/10/10 (토) 5187 0
46 OBDuino ISO9141 소스의 설명 avrtools™ 2009/10/08 (목) 4067 0
45 아듀이노 0017 업그레이드 avrtools™ 2009/08/18 (화) 3594 0
44 Arduino 0015 업그레이드 avrtools™ 2009/06/01 (월) 3290 0
43 CC2500 Zigbee RF Modem #1 [4] avrtools™ 2008/11/20 (목) 6509 0
42 아듀이노 소프트웨어 Ver 0012 avrtools™ 2008/09/23 (화) 3941 0
41 Arduino 소프트웨어 설치방법 avrtools™ 2008/08/31 (일) 5504 0
40 아듀이노 PC 카메라 제작 avrtools™ 2008/10/28 (화) 7097 0
39 아듀이노 AVR-ISP V2의 제작 [6] avrtools™ 2008/10/22 (수) 8144 0
38 아듀이노 J1850-PWM 스캐너 avrtools™ 2008/10/15 (수) 4466 0
37 아듀이노 MPGduino의 제작 avrtools™ 2008/10/11 (토) 4796 0
36 아듀이노 OBD-II PID 처리함수 avrtools™ 2008/10/12 (일) 5384 0
35 아듀이노 OBD-II PID 송수신 함수 avrtools™ 2008/10/09 (목) 9512 0
34 아듀이노 ODB-II 스캐너 제작 [9] avrtools™ 2008/10/04 (토) 16944 0
33 아듀이노 AC전원 THD 측정 [2] avrtools™ 2008/09/30 (화) 6658 0
32 아듀이노 소프트방식 16Bit ADC avrtools™ 2008/09/23 (화) 5466 0
31 아듀이노 초음파 모듈의 제작. avrtools™ 2008/09/22 (월) 4752 0
30 아듀이노 Wii 프로세싱 avrtools™ 2008/09/20 (토) 4068 0
29 아듀이노 초음파 거리측정 avrtools™ 2008/09/20 (토) 5961 0
28 아듀이노 8x5 초소형 전광판 avrtools™ 2008/09/11 (목) 4574 0
27 아듀이노 4선식 터치패널 avrtools™ 2008/09/10 (수) 4584 0
26 아듀이노 2색 8x8 LED avrtools™ 2008/09/10 (수) 4802 0
25 아듀이노 24x6 LED 전광판 avrtools™ 2008/09/10 (수) 5336 0
24 아듀이노 8x8 LED 프로세싱 avrtools™ 2008/09/10 (수) 4040 0
23 아듀이노 32x16 RGB 전광판 avrtools™ 2008/09/06 (토) 13573 0
22 아듀이노 맥박검출기 avrtools™ 2008/09/03 (수) 9346 0
21 아듀이노 적외선 거리센서 avrtools™ 2008/09/01 (월) 5806 0
20 아듀이노 DMX 수신장치 [7] avrtools™ 2008/08/31 (일) 6659 0
19 아듀이노 AVR-ISP 만들기 avrtools™ 2008/08/30 (토) 4062 0
18 아듀이노 POV #3 avrtools™ 2008/08/30 (토) 3378 0
17 아듀이노 POV #2 avrtools™ 2008/08/30 (토) 3187 0
16 AVR 병렬포트 굽기장치 avrtools™ 2008/08/30 (토) 5119 0
15 아듀이노 DMX 송신기 avrtools™ 2008/08/28 (목) 5045 0
14 아듀이노 부트로더의 개조 [1] avrtools™ 2008/08/28 (목) 5712 0
13 아듀이노 병렬포트 굽기장치 avrtools™ 2008/08/26 (화) 4127 0
12 아듀이노 POV #1 avrtools™ 2008/08/26 (화) 3424 0
11 아듀이노 MIDI 드럼 leeky 2008/08/24 (일) 4675 0
10 아듀이노 SD/MMC 카드 avrtools™ 2008/08/24 (일) 9708 0
9 아듀이노 MIDI 플륫 avrtools™ 2008/08/24 (일) 3516 0
8 아듀이노 RGB LED avrtools™ 2008/08/23 (토) 4952 0
7 아듀이노 USB 오실로스코프 [2] leeky 2008/08/21 (목) 6339 0
6 가속도계 ADXL202 응용소스 avrtools™ 2008/08/20 (수) 4825 0
5 아듀이노 가속도센서 avrtools™ 2008/08/18 (월) 4802 0
4 아듀이노 RC서보 제어 avrtools™ 2008/08/17 (일) 5140 0
3 아듀이노 910-ISP 만들기 avrtools™ 2008/08/16 (토) 4643 0
2 아듀이노 온도센서, XBee 송수신 avrtools™ 2008/08/15 (금) 7408 0
1 아듀이노 기본명령 avrtools™ 2008/08/07 (목) 6503 0
1

바구니 : 0
 보관함 : 0
오늘뷰 : 0
HOME   |   회사소개   |   제휴안내   |   회사위치   |   서비스이용 약관   |   개인정보 보호정책   |   사이트맵
17015 경기도 용인시 기흥구 동백중앙로16번길 16-25, 508호. 전화 : 031-282-3310
사업자 등록번호 : 697-47-00075 / 대표 : 이건영 / 업태 : 제조업 / 종목 : LED조명, LED전원, 제어장치.
개인정보 관리책임자 : 홈페이지 관리자 . Copyright ⓒ2016 아크레즈 (ACLEDS INC.)
HOME TOP PREVNEXT 0 0 0