페이지

글목록

2016년 6월 28일 화요일

[PROC] Cypress BLE KIT인 CY8CKIT-042 BLE 테스트

다음번에는 Cypress BLE 키트인 CY8CKIT-042 BLE 로 SPP(Serial Port Profile) 테스트 내용을 올려보겠습니다.

SPP 는 예전에 블루투스 클래식에서 쓰던 프로파일이라고 하는데,
이름이야 상관없는데 회사마다 BLE-to-UART 프로파일을 부르는 말이 조금씩 차이가 있네요.

아뭏든, BLE<-->UART 기능은 다이얼로그의 DSPS나 노르딕이나 같습니다.

Cypress 의 BLE-to-UART 프로파일은 Cypress가 등록한 것이 없어서 Custom Profile로 누가 만들어 놨는지 모르지만,
인터넷에서 찾아서 테스트를 해 봤습니다.

동작은 잘 됩니다만, BLE-to-UART 앱이 없어서 BLE 모듈과 USB 동글을 사용하여 PC와 연결해서 테스트를 했습니다.

오늘은 다음에 다룰 내용만 잠깐 이야기 해 봤습니다.

이만 마치겠습니다.

[PSOC] PSOC5 'DAC+내부 OPAMP' 로 25mA POWER 만들기

안녕하세요,

이번에는 PSOC5 로 POWER 출력을 만드는 방법을 소개 합니다.
최근에는 BLE 나 센서들이 저전력 구조로 설계되어 있으니 수십 mA 또는 10mA 이내의 전류면 충분히 동작 가능합니다.

PSOC5 키트인 CY8CKIT-059 에서 이 테스트를 진행했습니다.
059 키트는 5V 전원을 사용하고 , 여기에 I2C 방식인 조도 센서 ISL29023 을 3.3V 전원으로 DAC+OPAMP 출력을 연결했습니다.

따라서, 전원은 5V 하나만 있고 센서용 전원으로 따로 3.3V 레귤레이터를 필요로 하지 않습니다.

메뉴얼을 보니, PSOC5 의 OPAMP의 Fllower 모드의 High Power 옵션에서 전류는 최대 25mA 까지 출력 될 수 있다고 나와 있습니다.


DAC+AMP POWER 회로 연결은 다음과 같습니다.



테스트용 PSOC 059 KIT의 전체 회로도는 다음과 같습니다.

PSOC Creator의 Resource Meter를 통해 확인해 보니 PSOC5의 DAC 출력은 4개, OPAMP 출력도 4개가 있네요.

예전에 조도센서를 I2C로 테스트한 내용은 동일하고, 여기에 DAC+AMP 로 파워를 만들어 넣었습니다.
DAC 만으로 가능하지 않을까 해서 먼저 테스트 해 보니, 전류가 모자라서 안돼서
AMP를 연결하니 제대로 동작하는 것을 확인해 봤습니다.

다음에 시간이 나면 BLE도 이런 방식으로 전원을 연결해 보겠습니다.

자세한 내용은 소스를 첨부하니 참고해 주시기 바랍니다. (링크)

2016년 6월 9일 목요일

[PSOC] PSOC5 조도센서 I2C I/F 테스트

조도센서 ISL29023 (Intersil 사)를 테스트 해 봤습니다.

이 센서는 간략히 말하면, I2C I/F 방식으로 ALS(조도) 와 IR(적외선)을 continuous/once 로 측정할 수 있습니다.

일단 테스트로 ALS 를 continuous 로 측정해서, PSOC5 의 USB_UART 로 출력하도록 했습니다.

PSOC5 의 연결은 다음과 같습니다. (I2C, USB)



command 레지스터는 전원 ON시, 모두 0 으로 되므로 읽어도 아무 값도 안나옵니다. 파워 다운 모드로 되어 있어서 그런 것 같네요.

그래서 command-I 레지스터에 조도센서를 continuous 하게 샘플링하도록 설정했습니다.


USB-to-UART 로 출력하도록 해 놓고, 터미널로 본 내용은 다음과 같습니다.
밝은 상태에서 손을 데면 어두워지면서 값이 낮은 값으로 변합니다.



소스코드 링크 : psoc5_code

2016년 6월 7일 화요일

[nordic BLE] PCA10028 내부 LCLK(32KHz)로 변경 방법

개발키트인 PCA10028 은 32KHz Crystal 이 회로에 내장되어 있지만,
프로차일드에서 판매하는 BLE 모듈인 PBLN51822 모듈에는 32KHz 크리스탈이 내장되어 있지 않습니다.

그래서 같은 프로그램을 PBLN51822 모듈에 다운로드했을 때,
아무 동작도 하지 않아서 노르딕 FA 에 문의를 해서 알게된 내용입니다.

다음의 main.c 파일에 있는 ble_stack_init()함수의 내용을 그 아래와 같이 변경해 주시면 됩니다.

static void ble_stack_init(void)
{
    uint32_t err_code;
   
    nrf_clock_lf_cfg_t clock_lf_cfg = NRF_CLOCK_LFCLKSRC;
   
    // Initialize the SoftDevice handler module.
    SOFTDEVICE_HANDLER_APPSH_INIT(&clock_lf_cfg, true);
   :
   :
}

아래와 같이 변경..

static void ble_stack_init(void)
{
    uint32_t err_code;
    
    //nrf_clock_lf_cfg_t clock_lf_cfg = NRF_CLOCK_LFCLKSRC;
    
    nrf_clock_lf_cfg_t clock_lf_cfg;
    
    clock_lf_cfg.source = NRF_CLOCK_LF_SRC_RC;
    clock_lf_cfg.rc_ctiv = 1;
    
    // Initialize the SoftDevice handler module.
    SOFTDEVICE_HANDLER_APPSH_INIT(&clock_lf_cfg, true);

   :
   :
}


[nordic BLE] PCA10028 BLE-to-UART(SPP)예제 20-Byte 구분 char 변경

nordic BLE 를 사용하면서 좀 이상한 점은,
APP 에서 20-Byte 이상은 한번에 전송되지 않는다는 점과 
20-Byte 마다 또는 전송이 끝날 때 마다 구분용 char('\n') UART RxD로 출력된다는 점입니다.

다이얼로그에서는 이런 현상이 없었는데, 좀 다른 점이 있네요.
제가 얼핏 보기로는 BLE 는 모두 20-Byte 단위로 전송이 이루어 지고 연속으로 보내지는 것 처럼 보이는 것은 APP에서
20 Byte 전송 데이터 사이마다 딜레이를 줘서 연속으로 전송되는 것 처럼 보이는 것이라 들었습니다.

확실히 모르는데, 앱 개발자가 한 말이고 제가 앱을 모르니까 그런가 보다 하고 있습니다. ^^

nRF51 디바이스에서 20-Bte 마다 또는 전송이 끝날 때마다 구분자를 출력하는 부분은 다음과 같이 정의되어 있습니다.
main.c 파일의 nus_data_handler 함수에서 처리합니다.


전송이 완료되면 '\n' 이 출력되도록 디폴트 설정이 되어 있는데,
일반적으로 아무것도 출력하지 않고 사용하더군요.

뭐, 취향에 맞게 다른 값으로 고치셔도 되고.. 
만약 아예 안나오도록 하려면 다음과 같이 주석처리를 하시면 됩니다.

static void nus_data_handler(ble_nus_t * p_nus, uint8_t * p_data, uint16_t length)
{
    for (uint32_t i = 0; i < length; i++)
    {
        while(app_uart_put(p_data[i]) != NRF_SUCCESS);
    }
    //while(app_uart_put('\n') != NRF_SUCCESS);
}

[nordic BLE] PCA10028 BLE-to-UART(SPP)예제 페어링 Time 변경

현재 SPP 프로젝트의 동작을 보면,
2초 간격으로 180초 동안 페어링을 하고 있습니다.

그리고 180초 이후에는 Sleep 모드로 빠져서 BLE 장치를 리셋하거나, 
WAKEUP 시키는 버튼을 눌러서 재시작하도록 되어 있습니다.

혹시, 중간에 sleep 모드로 빠져서 문제가 있는 경우 
1. Timeout 값을 조정하거나,
2. 필요할 때 마다 리셋 핀을 통해서 리셋을 하거나,
3. 입력핀에 wakeup 신호를 줘서 restart 하거나,
4. 아예 Timeout 시간을 없애서 계속 살아 있어서 페어링을 계속 진행하는 방법이 있습니다.

이 중에서 1,4번 은 같은 파라메터값을 조정해서 변경 가능합니다.
main.c 파일에서 APP_ADV_TIMEOUT_IN_SECONDS 값을 바꾸면 페어링 시간을 1초 단위로 조정할 수 있습니다.
그리고 값을 0으로 하면 sleep mode로 빠지지 않고 무한하게 페어링을 할 수 있습니다.

번 리셋 핀은 h/w 에서 리셋 핀을 ON/OFF 하거나 BLE 모듈의 전원을 ON/OFF 하면 됩니다.

3번 현재 개발키트의 버튼 4개 중에 1개인데, 기억이 안나네요. 찾아보면 메뉴얼이 있으니 필요한 분은 찾아보시길 바랍니다.

[nordic BLE] PCA10028 BLE-to-UART(SPP)예제 device name 변경

maiin.c 파일의 DEVICE_NAME 을 변경해 주면 됩니다.
(가장 짧은 게시글이 될 것 같네요 ^^)

[nordic BLE] PCA10028 BLE-to-UART(SPP)예제 Baudrate 변경

nRF51 SDK 의 예제 중에서 다음의 위치에서 Keil MDK 프로젝트 파일을 더블 클릭하면,
KEIL 컴파일러가 자동으로 실행됩니다.

[예제 위치]
..nRF5_SDK_11.0.0_89a8197\examples\ble_peripheral\ble_app_uart\pca10028\s130\arm5_no_packs

main.c 의 uart_init() 함수의 파라메터를 수정하면 UART 관련 설정을 조정할 수 있습니다.
보레이트를 다른 값으로 조정하려고 하면, nrf51_bitfields.h 파일에 정의되어 있는 여러가지 보레이트를 
uart_init 함수에서 파라메터를 바꿔 줌으로써 변경 가능합니다.

현재 default 설정으로 hw flow control이 설정되어 있는데, 위의 예제에서 저는 다음과 같이 수정해서 hw flow control 기능을 제거했습니다.

        //APP_UART_FLOW_CONTROL_ENABLED,
APP_UART_FLOW_CONTROL_DISABLED,


여러가지 변경해서 테스트 해 보시기 바랍니다.

[nordic BLE] PCA10028 개발키트 프로그램 다운로드 방법

1. Keil MDK 툴 최신 버전을 받아서 설치합니다.

2. nRF BLE 칩의 stack 과 프로그램을 다운로드 할 수 있는 툴인 nRFGO Studio 툴을 다운로드 받아서 설치합니다.
Complete 버전으로 설치합시다. 안그러면 PCA10028 개발툴의 연결 안 되는 경우가 있습니다.

3. nRF51 SDK 를 다운로드 합니다. 여기에 각종 예제 파일과 soft device(stack 개념) 및 soft device+예제파일이 컴파일된 HEX 파일등이 들어 있습니다.

4. PCA10028 개발키트와 PC를 USB 케이블로 연결합니다.

5. 프로그램을 다운로드 해서 동작 시키는 방법은 여러가지가 있습니다. 3가지 정도 말씀드려 보겠습니다.
(제가 해본 내용은 Soft device를 설치해야 하는 BLE 예제만 동작 시켜 봤습니다.)

5-1. 각 예제 중에서 1개를 선택해서, 내부 폴더를 열면
hex 폴더가 있고 그 안에 ~pca10028.hex 로 끝나는 softdevice 와 application 프로그램이 통합된 파일이 있습니다.
이 hex 파일을 드래그해서 PCA10028 개발키트에 드롭해 주면 프로그램이 들어가서 자동 리셋된 후에 실행 됩니다.
(최근의 segger 디버거의 기능인듯 한데, PC에 연결하면 USB 드라이브가 1개 생기는데 이 드라이브에 hex 파일을 copy 해서 paste 해주면 프로그램이 다운로드되는 기능이 생겼습니다.)

5-2. nRFGO Studio 툴로 프로그램하는 방법.
- nRFGO Studio를 실행하면 왼쪽 아래의 Device manager 에서 segger debugger 를 선택하면, nRF51422 이 표시되는지 확인합니다.



- 우측 위의 Program Softdevice를 선택합니다. 나머지 작업은 그림에 써져 있네요.


- Program Application 탭을 선택하고 Keil MDK 컴파일러에서 컴파일된 hex 파일을 선택합니다.
여기서 hex 파일은 5-1 의 hex 파일과 다릅니다. 5-1의 hex 파일은 softdevice 가 포함되어 있고, 5-2의 hex 파일은 softdevice 파일이 포함되어 있지 않습니다. 주의하시기 바랍니다.
나머지 과정은 그림 내에 포함되어 있네요.


이렇게 하면 자동으로 리셋 후, 프로그램이 동작합니다.


5-3. KEIL MDK 컴파일러에서 직접 application program만 다운로드하는 방법.
이 방법은 Softdevice 가 먼저 설치되어 있어야 합니다. 5-2 의 Program Softdevice 까지는 똑같이 nRFGo Studio로 진행해 주시기 바랍니다.
그리고 나서 NRF51 SDK 의 Keil 예제 BLE 프로젝트 파일을 열어서(아무 것도 건드리지 말고) 컴파일 해서 프로그램 버튼을 눌러 주면 Application 만 특정 영역에 Update 됩니다.

[Keil MDK ver5 프로젝트 파일 위치]

[다운로드 버튼 : 컴파일 한 후, 다운로드 버튼을 눌러 주세요]

2016년 6월 3일 금요일

[PSOC] PSOC4 SPI 핀 <-> GPIO 핀

SPI 기능으로 설정된 핀을 잠시 GPIO 기능의 핀으로 바꿨다가 다시 SPI로 되돌리는 테스트를 했습니다.

이런 경우는 보통 드문데, 핀이 모자라서 하게 되었습니다.

SPI TopDesign 탭의 내용은 다음과 같습니다.




SPI -> GPIO 동작 방법은 다음과 같습니다.
1. SPI component STOP.
2. SPI 핀 모드를 GPIO 출력인 경우 Strong Drive 로 설정
3. SPI핀 기능을 GPIO 핀으로 변경
4. GPIO 기능 처럼 핀을 프로그램에서 사용.
    SPIFLASH_Stop();
    SPIFLASH_miso_m_SetDriveMode(SPIFLASH_miso_m_DM_STRONG);
    
    SPIFLASH_SET_HSIOM_SEL(*(reg32 *)SPIFLASH_miso_m__0__HSIOM, SPIFLASH_miso_m__0__HSIOM_MASK,
                                   SPIFLASH_miso_m__0__HSIOM_SHIFT, SPIFLASH_HSIOM_GPIO_SEL);

        SPIFLASH_miso_m_Write(1); CyDelayUs(1);
        SPIFLASH_miso_m_Write(0); CyDelayUs(1);
        SPIFLASH_miso_m_Write(1); CyDelayUs(1);

GPIO -> SPI 동작 방법은 다음과 같습니다.
1. SPI핀 기능을 GPIO 핀으로 변경
2. SPI component START.
    SPIFLASH_SET_HSIOM_SEL(*(reg32 *)SPIFLASH_miso_m__0__HSIOM, SPIFLASH_miso_m__0__HSIOM_MASK,
                                   SPIFLASH_miso_m__0__HSIOM_SHIFT, SPIFLASH_HSIOM_SPI_SEL);
    SPIFLASH_Start();