페이지

글목록

레이블이 Cypress인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Cypress인 게시물을 표시합니다. 모든 게시물 표시

2016년 12월 14일 수요일

[da1458x] 최신 SDK 내용은 다루지 않겠습니다.

da14583 최신 SDK로 dsps를 정리해 보려 했다가,

그냥 예전 버전의 dsps 프로그램을 사용하기로 했습니다.

이유는 제가 BLE를 처음 시작한 칩이 dialog 칩이었는데, 
특별히 좋은 점이 없었습니다.

작은 칩이여서 썼는데, otp 타입이고 외부 Flash를 추가하면 전체적으로 더 큽니다.
플레쉬 타입(da14583)은 5x5mm 로 노르딕 wlcsp 타입보다 큽니다.
또 보드어드레스도 따로 구입해서 집어 넣어야 하는데, 노르딕은 들어 있습니다.
아마도 다른 칩들은 다 들어 있는듯 합니다.

싸이프레스 psoc4도 괜찮은데, BLE-to-UART 정식 Profile이 없고 Custom Profile만 있으니,
부족한 부분이 좀 있는 것 같고...

계속해서 BLE를 사용한다면 그냥 노르딕 nrf51822 을 쓸 예정인데,
그것도 esp32 칩으로 BLE 를 뚫으면 안 쓸 예정입니다.

아마도 ESP32 가 Wireless 칩으로는 가성비가 갑인듯 합니다.
BLE 값에 Wifi도 같이 되고, 듀얼코어라서 CPU로도 사용할 수 있으니 말입니다.
단점은 제가 리눅스를 잘 몰라서 개발환경을 아직도 구축을 못하고 있네요.

얼른 환경 구축해서 사용해 봐야겠네요.

2016년 11월 2일 수요일

[PSOC5] 5V 전원은 PSOC5에 데미지를 주는군요.

예전부터 PSOC5에 전원을 5V로 공급하면 MCU가 과열되어 사망하는 경우가 생겨서 도중에 3.3V로 변경해서 해결을 했었습니다.

메뉴얼에는 1.71V ~ 5.5V까지 동작한다고 해 놓고서 왜 5V만 넣으면 동작이 되기도 하지만 결국에는 열이나며 사망합니다.



최근에도 그 때, 뭔가 다른 것이 잘못됐을 테지.. 하고 5V를 다시 넣었다가 또 운명을 하셨네요. ㅜㅜ

PSOC4 는 5V를 넣어도 동작을 하는데, PSOC5는 죽습니다.


개발키트를 보면 5V에서 동작한다고 해 놓고, 좀 더 자세히 보면 다이오드를 꼭 1개 끼워 넣었더라고요.



웹써핑으로 찾아봐도 저와같은 내용은 없거나, 자세히 나오지도 않는 것 같습니다.

오늘은 그래서 위의 회로처럼 다이오드를 1개 추가하니 5V 보다 약4.6~4.7V (0.3~0.4V  전압 강하) 에서는 열이 안나고 안정적으로 동작을 하네요.

PSOC5 자체에서는 전력 소모가 크지 않으므로, 3.3V 레귤레이터를 사용하기 보다는 작은 다이오드 하나를 쓰면
가격적으로 저렴하고, 필요시 5V 구동 TTL IC와 연결했을 때, Hin 레벨을 맞추기 위해 전압 변환용 버퍼를 써야 할 일도 없어서 좋습니다.

원래는 5V에서 동작을 해야하는데 안되는 PSOC5를 욕해야 하는데, 꼭 장점처럼 말을 한 것 같네요.

하여간, PSOC5 는 제가 보기에 이런 문제점이 있었습니다.

5V 그냥 넣으면 꽥~~!!

2016년 2월 17일 수요일

[PSOC5] clock 은 어떤 역할을 할까?

PSOC_5LP 개발보드(CY8CKIT-059)에서,

Counter 동작 테스트를 해 보다가, clock이 도대체 어떻게 쓰이는 걸까? 하는 궁금증이 생겨 직접 테스트를 해 봤습니다.

counter 의 동작 조건은 다음과 같습니다.


카운터는 10까지 세면서, 다운카운터이고, 9보다 작은 (Less than) 조건에서 comp 신호가 출력된다.

다음은 clock 신호를 2가지의 경우에서 동작시켜본 실험 결과이다.

첫번째는 count 와 같은 Rising 시점으로 테스트 해 봤고, 두번째는 count 신호에 clock 신호를 반주기 뒤로 밀어서
테스트 해 본 내용이다.

1. count 와 같은 Rising 시점으로 테스트


2. count 신호에 clock 신호를 반주기 뒤로 밀어서 테스트

2 번과 같은 타이밍이 적합한 것 같다.. 아니면 clock 의 주파수를 count 주파수보다 좀 더 빠르게(2배 이상)으로
입력해 주면 괜찮을 듯 하다.
 

2016년 2월 15일 월요일

[PSOC5] Cypress PSOC-5LP 선택

ARM-CORTEX-M3 계열인 Cypress PSOC-5LP에 대해서 다뤄 보겠습니다.

Cypress 의 전체 Microcontroller 제품의 포트폴리오는 다음과 같고, 이번에 다룰 제품은 이 중에서 PSoC 5LP 입니다.



PSOC-5PL 모델은 크게 또 4가지로 나눠집니다.
1. CY8C52xx
2. CY8C54xx
3. CY8C56xx
4. CY8C58xx

각각의 모델별로 Ordering Information 은 다음과 같은데, 이 정보가 가장 제품을 선정하는데 간편하게 되어 있는 것 같습니다.

1. CY8C52xx (Ordering Information)


2. CY8C54xx (
Ordering Information)


3. CY8C56xx (Ordering Information)

4. CY8C58xx (Ordering Information)

2016년 2월 14일 일요일

[PSOC4] BLE Pioneer Kit(CY8CKIT-042-BLE) H/W 구성

ypress의 BLE Pioneer Kit(CY8CKIT-042-BLE)를 간단히 소개합니다.

얼마 전에 Cypress 사의 블루투스 관련 개발용 키트 교육에 참가해서 이 보드를 공짜로 받았습니다.

이 보드는 크게 2부분으로 되어 있습니다.

PSoC5LP 라는 Cortex-M3 계열의 MCU인 CY8C5868LTH-LP039로 구성된 Programmer and Debugger 와
PSoC4 라는 Corte-M0 계열의 xCY8C4247LQI-BL483로 구성된 PSoC4 BLE Module로 구성되어 있습니다.

[ Programmer and Debugger ]
[ PSoC4 BLE Module ]


그리고 추가로 다음과 같은 구성품이 있습니다.
PC의 USB 2.0 포트에 붙여서 블루투스 통신을 연결해 주는 동글이 있는데,
이 동글의 하드웨어 구성은 또한 CYBL10162-56LQXI MCU를 콘트롤하는 
디버거와 프로그래머가 붙어있는 형태로 되어 있어 CYBL10162-56LQXI MCU를 프로그램 변경 가능합니다.

[ USB 블루투스 동글 ]


또 옵션으로 PSoC4 BLE Module 보다 성능이 떨어지고 가격이 저렴한 블루투스통신 모듈인 PRoC BLE Module이
들어 있습니다. Cortex-M0 코어인 CYBL10563-56LQXI로 구성되어 있습니다.

PRoC BLE Module ]
이 보드의 연습 목적은 PSoC4 BLE Module 이나 PRoC BLE 모듈의 프로그램 및 디버깅 입니다.
PSoC5LP MCU를 프로그래밍 하려면 또 다른 디버깅 툴이 있어야 하고, JTAG 콘넥터가 납땜되어 있지않기 때문에
맞는 콘넥터와 프로그램 및 디버거를 구입해서 테스트 해 봐야 합니다.

하지만 프로그램을 고치게 되면 현재의 기능인 프로그램 및 다운로드 기능을 잃게 되니 
이 보드는 BLE 모듈 을 테스트하는데에만 사용하고, PSoC5LP 를 연습하려면 050개발키트를 구입하는 것이 낫겠습니다.



전체적인 개발 환경 구성은 다음과 같습니다.

2016년 1월 20일 수요일

[PSOC] I2C 통신시에 FIFO 초기화 문제(PSOC4)

안녕하세요, 오랜만입니다.

이번 이슈는 PSOC4 에서 I2C 통신을 하다가, I2CMasterWriteBuf() 함수를 사용할 경우 잘못된 SUB ADDRESS에 데이터를 송신하면 송신한 데이터들이 내부 FIFO 버퍼에 쌓여있다가 정상적인 SUB ADDRESS에 다시 데이터를 쓸 경우 이전에 쌓여있는 데이터가 출력되는 것을 발견했습니다.

이 문제의 발생빈도는 on-chip program 시에는 50% 정도이지만, 디버그 모드에서는 80%이상이었습니다. 즉 항상 발생하는 것은 아니라는 것이지만, 문제가 되기에는 충분합니다.

현재 Cypress에 기술 문의를 요청한 상태이고 빨리 해결되었으면 좋겠네요.

항상 제대로된 어드레스에 데이터를 전송하는 것은 아니라, 이런 경우도 있다는 점을 업체에서 인지하지 못했던 것 같습니다.

[PSOC] PSOC5LP(CY8C5268) 에 USB UART 연결 테스트

안녕하세요, 이번에는 USB UART(VCOM) 을 다뤄 보려 합니다.
USB는 쓰기 어려울 거라 생각하고, 계속 안쓰다가 이번에 더이상 확장할 통신 포트가 없어서 에라 모르겠다하고 하드웨어를 설계해 버렸습니다.

그런데 써보니 정말 좋습니다. 오늘 하루 몇시간 만에, USB UART 와 USB Bootloader , USB Bootloaderble App 까지 테스트를 다 해봤습니다.

테스트는 간단하게 끝났지만, 여기에 글을 올리는 시간이 몇배는 더 걸리는 것 같습니다.

일단은 첫번째로 USB UART 테스트에 관한 글을 올려봅니다.

먼저 PSOC 중에서 USB가 있는 MCU를 준비합니다. 
저는 PSOC-5LP 계열의 MCU를 준비했습니다.
물론 USB 콘넥터를 제대로 연결해야 겠지요. +5V, GND, DM, DP 를 USB 케이블에 연결해 둡니다.

[USB cable 연결]



[PSOC-5LP 의 USB 연결 회로도]


이렇게 USB 케이블을 연결했으면 일단 컴퓨터의 USB 포트에 꼽아 두십시요. 꼽으면 USB 포트로부터 +5V를 받아서 PSOC이나 ㄷ다른 IC에 공급할 3.3V 전원도 LDO 레귤레이터에 의해서 공급됩니다.

그럼 다음으로 USB UART 예제 프로그램을 불러와서 프로젝트를 만들어 보겠습니다.



우선 다음 그림과 같이 File-New-Project 순으로 클릭하시면 프로젝트 만들기 메뉴가 나옵니다.


개발키트로 테스트 하는 것이 아니고 회사 프로젝트로 만든 보드로 테스트 하는 것이므로 다음 그림과 같이 Target device 를 선택합니다.


다음으로 코드 예제를 import 할 것이므로 Code Example을 선택하고 Next로 갑니다.



코드 예제가 너무 많으므로 usb 로 검색을 해보면, USB UART 예제가 있으니 선택하고 Next로 갑니다.



필요시에 폴더를 새로 만들거나 지정해서 프로젝트 만들기를 마무리 합니다.




자, 이제 프로젝트가 만들어 졌네요. ^^.


그런데, 제게는 LCD가 없네요. TopDesign.cysch 에서 LCD 삭제합니다.





그런데, PSOC-5LP로 프로젝트를 만들면 기본으로 제가 쓰는 PSOC 모델이 아닌 것이 선택되네요. 그래서 project-Device select 메뉴에서 적당한 PSOC-5LP 장치를 선택합니다.

아... 이런, 옆에 Resource Meter는 컴파일을 다 해야지만 결과가 나오는데, 먼저 붙여 버렸네요. 이 그림을 붙여 넣은 이유는 USB UART 를 사용하는데 UDB가 전혀 안들어간다는 사실을 알려 드리기 위함입니다. 그냥 아주 좋은 통신 포트를 공으로 1개 얻었다 생각하시면 됩니다. ^^


[PSOC Device Select]



다음으로는 아까 LCD 콤포넌트를 지웠기 때문에 예제 소스 코드에 남아있는 LCD 관련 코드에서 컴파일 시에 에러가 날겁니다.
예러를 없애야 하는데, 이상태로 컴파일을 해버립시다. 그러면 에러가 나죠?


다음처럼 에러가 난 부분을 // 로 주석처리해서 다 막아버리세요.


그리고 나서 다시 컴파일을 하면 에러가 싹 사라지고, 에러 없이 컴파일이 완료 됩니다.
에러가 없으므로 3번 프로그래밍 아이콘 버튼을 눌러 프로그램을 PSOC에 다운로드 합니다.
물론 JTAG를 연결한 상태로 하셔야겠죠. ^^



다운로드 되면 바로 프로그램이 실행 되는데, 띠용 소리 나면서 디바이스 드라이버를 자동으로 찾아서 가상 시리얼 포트가 잡힙니다.
Cypress USB UART(COM24) 로 잡혔군요. 프로그램 잘 동작하는 것 같습니다. ^^



어떤 때는, 드라이버가 자동으로 안잡히는 분들이 있을 겁니다. 이 때는, " C:\Program Files (x86)\Cypress " 경로로 드라이버 찾기를 지정해 주면 알아서 찾아 깔아 주고 USB UART 가 잡힐 것입니다.


이 프로그램은 Rxd 로 데이터를 받으면 Txd로 그대로 ECHO 해 주는 프로그램이라서, 터미날을 1개 열어서 해당 COM PORT에 연결한 후, 데이터를 보내보면 에코로 돌아오는 것을 볼 수 있습니다. 예... 프로그램 아주 잘 돌아가고 있네요.


또 하나, USB 니까 속도도 빠르겠죠? TERA TERM 터미날 프로그램의 최대 속도인 921.6Kbps로 설정을 바꿔봤습니다.



데이터를 키보드로 두드려서 보냈더니 echo가 제대로 오는 것을 볼 수 있네요.
^^ 당신은 거의 1Mbps 속도의 UART를 득템하셨습니다.

2016년 1월 5일 화요일

[PSOC] Psoc4 GPIO OUTPUT (IN/OUT Test 1/2)

PSOC4 에서의 GPIO IN/OUT TEST

이전 게시물에서 LED를 사용하는 GPIO OUT을 이미 테스트 했는데,
아무 설명을 하지 못해서 INPUT 테스트와 같이 다뤄 보겠습니다.

PSOC IC에 SW를 3개 달아서, 이전에 만들어 놓았던 타이머 인터럽트를 이용해서 50ms 마다 Switch 입력을 읽어서 값이 바뀔 때마다 스위치 값을 UART로 출력하는 내용입니다.

GPIO 출력은 이전에 해뒀던 내용인데, 100ms 마다 포트값을 토글하는 내용입니다.

먼저 OUTPUT을 설명드리겠습니다.

1. PSOC Creator 의 cysch 에서 Digital Output Pin [v2.10] 콤포넌트를 그려 넣습니다. 핀 이름은 적당하게 고치면 되는데 이름에 따라 함수가 자동으로 만들어집니다.
저는 LED_1,LED_2,LED_3 라고 정했는데, 출력 함수 이름은 자동으로 LED_1_Write() , LED_2_Write() , LED_3_Write() 으로 만들어 집니다.


2. OUTPUT PIN 콤포넌트를 마우스로 더블클릭하면 핀 설정이 나오는데, HW connection 체크를 해제 해 주십시요. 이것은 내부에서 다른 콤포넌트와 연결 하지 않을 경우에 해당되며, 이 옵션을 해제하지 않으면 에러가 납니다.

3. cydwr 파일에서 PSOC4 IC에 OUTPUT으로 사용할 핀을 지정

PSOC4 IC 와 연결된 출력 핀과 여기에 연결된 LED 회로도 그림을 아래 첨부합니다.



4. 소스 코드에서 포트 이름에 따라 자동 생성된 LED_x.c 안의 LED_x_Write() 함수로 비트를 ON(1),OFF(0) 하면 됩니다.

이전에 만든 타이머 인터럽트 코드 안에 있는 출력함수 예는 다음과 같습니다.

CY_ISR(Timer_INT_Handler)
{

    uint32 InterruptHpn;
    static uint8_t LED_1_stat=0,LED_2_stat=0,LED_3_stat=0;
    /* Check interrupt source and clear Inerrupt */
    InterruptHpn = Timer_1_GetInterruptSourceMasked();
    if (InterruptHpn == Timer_1_INTR_MASK_CC_MATCH)
    {
        Timer_1_ClearInterrupt(Timer_1_INTR_MASK_CC_MATCH);
    }
    else
    {
        cnt_50ms++;
        if (cnt_50ms > 49)
        {
            f_50ms = 1;
        }
        LED_1_stat = 1-LED_1_stat;
        LED_2_stat = 1-LED_2_stat;
        LED_3_stat = 1-LED_3_stat;
        LED_1_Write(LED_1_stat);
        LED_2_Write(LED_2_stat);
        LED_3_Write(LED_3_stat);
        Timer_1_ClearInterrupt(Timer_1_INTR_MASK_TC);
    }
}

[PSOC] PSOC4 Timer Interrupt Test

PSOC4 로 Timer Interrupt 를 회사에서 만든 보드로 테스트를 해 봤습니다.

역시 PSOC은 쉽네요.^^

UART는 기본으로 넣었고, 나중에 추가할 I2C도 일단은 H/W 콤포넌트로 추가했습니다.
PSOC4는 UART,SPI,I2C 등의 Serial 통신 모듈은 3 중에 1개를 써도, Serial 통신 모듈 총 2개 중 1개씩 감소합니다. 물론 UDB로 더 만들 수 있지만 UDB가 많이 들어갑니다.
저는 UART 1개, I2C 1개 기본 serial 통신 모듈을 2개 다 사용했네요.

PSOC4에서 타이머 인터럽트 사용하는 내용이 카페에 없어서, 자료를 만들어서 놓습니다.

프로그램시 타이머는 기본으로 사용하는 요소지요.

PSOC4는 타이머를 기본으로 4개를 지원합니다. 더 필요하면 UDB를 사용해서 만들어 넣으면 되는데, UDB가 4개 밖에 없어서 꼭 필요할 때를 위해서 아껴서 쓰는 것이 좋습니다.


<프로그램 테스트 계획>
- 타이머 인터럽트에 의해 주기적(100ms)으로 LED를 토글함.


1. 먼저 TopDesign.cysch 파일에 UART,I2C,Timer 콤포넌트를 추가합니다.


안보여서, 콤포넌트 쪽을 자세히 볼 수 있는 그림을 올립니다.

PSOC Creator 에서 컴파일을 해 보면 우측 옆 태에 Resource Meter를 보면 메모리나 콤포넌트, UDB 의 사용량이 나옵니다.


2. 다음은 Timer 의 설정입니다.
10KHz 의 클럭을 넣었으니 1 주기를 100ms로 맞출려면 1000 번 카운트해야 하므로 Timer 콤포넌트의 period 를 1000으로 수정합니다.

3. Interrupt 는 On terminal count 에 체크하는데, 타이머 끝에서 Interrupt가 발생된다는 의미입니다. Run Mode 는 Continuous 로 계속 반복됩니다. (위 그림 보시면 이해 되겠죠?)

4. System 의 Interrupt 콤포넌트를 Timer Interrupt 출력에 붙입니다.

5. 핀을 회로도에 맞게 지정합니다.
제가 사용하는 보드에는 PSOC4와 다음과 같이 연결되어 있습니다.

- UART RxD=P.4 , TxD=P0.5
- I2C SCL=P4.0 , SDA=P4.1
- LED_1=P2.4 , LED_2=P2.5 , LED_3=P2.6

[회로도] - 잘 안보이지만 연결은 위의 내용처럼 되어 있습니다.

cydwr 파일에서 핀을 위의 내용 처럼 지정합니다.



여기까지 H/W 구성은 마무리 되었습니다.

6. 이제 프로그램을 수정합시다.
먼저 Main() 함수에서 Timer 인터럽트 함수를 지정합니다. 나중에 설정된 주기마다, 이 인터럽트 함수가 실행됩니다.
    /* Enable the Interrupt component connected to interrupt */
    TC_CC_ISR_StartEx(Timer_INT_Handler);

7. Timer 인터럽트 함수를 정의합니다.
매 주기 마다 LED 1,2,3 을 토글합니다.

CY_ISR(Timer_INT_Handler)
{

    uint32 InterruptHpn;
    static uint8_t LED_1_stat=0,LED_2_stat=0,LED_3_stat=0;
    /* Check interrupt source and clear Inerrupt */
    InterruptHpn = Timer_1_GetInterruptSourceMasked();
    if (InterruptHpn == Timer_1_INTR_MASK_CC_MATCH)
    {
        Timer_1_ClearInterrupt(Timer_1_INTR_MASK_CC_MATCH);
    }
    else
    {
        LED_1_stat = 1-LED_1_stat;   // Toggle
        LED_2_stat = 1-LED_2_stat;   // Toggle
        LED_3_stat = 1-LED_3_stat;   // Toggle
        LED_1_Write(LED_1_stat);
        LED_2_Write(LED_2_stat);
        LED_3_Write(LED_3_stat);
        Timer_1_ClearInterrupt(Timer_1_INTR_MASK_TC);
    }
}

8. Main() 함수에서 Timer 를 시작하면, 다음처럼 주기적으로 LED 3개가 토글되어 깜박입니다.

main()
{
     :
    Timer_1_Start();
     :
}




9 이 프로그램의 압축된 파일은 다음 링크에 올려놓습니다.