페이지

글목록

2015년 11월 30일 월요일

[PSOC4] NFC TEST (H/W 준비)

LPC812로 협력업체와 공동으로 프로그램 작업을 하다가 보니,
프로그램 메모리가 턱없이 부족했습니다.

LPC812의 스펙을 xson-16 타입으로 작고 얇기에 package 를 우선으로 선정했는데,
다른 부분이 문제가 될 줄은 몰랐고, 기본으로 32KByte 인 줄 착각을 했었습니다.
이 칩은 16KByte 였었네요.



그리고 32KByte 파트에서 xson-16 package 가 없었습니다. 따라서 다른 CPU 를 골라야 하는데, 가격대 성능비로 라기보다 쉬운놈으로 PSOC4(CY8C4245)를 선택했습니다.

PSOC4 개발키트로 테스트할 예정인데, CY8KIT-042 보드를 사용합니다. 여기에 쓸 MCU가
CY8C4245LQI-483T 입니다.   

이 PSOC4로 앞으로 테스트해 볼 H/W를 준비했습니다.

[OM5569 개발키트]


다음은 042 KIT를 이용해서 구성한 보드의 설명입니다.
1. 점퍼선으로 연결하면, 예전 개발보드인 OM5569 개발키트 와 비교하면 MCU만 바뀌게 됩니다. (LPC812 -> CY8C4245) 
2. 위의 AT24C04 보드는 I2C 통신 개념 공부를 위해 추가해 봤습니다. 
3. Antenna는 OM5569 Kit에서 떼왔습니다. ^^
4. 스위치는 4개(3개인데 1개 더 추가해봤습니다).
5. LED 3개.


회로도는 다음에 시간되는대로 올려 보겠습니다. 회로도라고 해야하나? 결선도가 낫겠네요. 점퍼 와이어로 연결만 할 건데. ^^

raspberrypi ZERO 를 찾아서.. 결국 SOLD OUT!!

$5.00 면 나도 사볼까? 했는데.. 다팔렸단다. 윽..

왠지 더 사고 싶다. 다시 꼭 사야겠다로 마음이 돌아서네요.

다른 분들도 그런가요? ^^

국내에는 파는 곳을 모르겠고, 예전에 엘레파츠 에서 라즈베리파이 2, B 까지 파는 것은 봤는데.. 제로는 안파네요.


raspberrypi 공홈에서 파는곳을 찾아 봅니다. 링크

B. BUYING AND SHIPPING

1. WHERE CAN I BUY A RASPBERRY PI?

You can buy a Raspberry Pi directly from our website. You can also buy from our main distributors, Premier Farnell/Element14 and RS Components/Allied Electronics. Both distributors sell all over the world. There are also many resellers of Raspberry Pis, both online and in bricks-and-mortar stores. -Buying and Shipping-Top

directly from our website (다 팔렸음 - OUT OF STOCK)


Premier Farnell/Element14 (다 팔렸음 - SOLD OUT)



RS Components/Allied Electronics (ZERO 아직 안판다. ㅜㅜ)


[분석해 봤습니다.]

라즈베리파이 제로(Zero)는 라즈베리파이 rev2 B+(B+)의 CPU overclock 버전이라고 볼 수 있겠습니다. 다이어트를 했다고 할까요? 여러가지 주변 장치들은 많이 빠졌습니다. B+의 SDRAM 사양이 ?로 되어 있어서 LP 버전인줄은 모르겠지만, 512 MB SDRAM @ 400 MHz 로 동일합니다.

즉, 모든 기본 사양은 동일합니다만, CPU 클럭만 ZERO가 더 빠릅니다.(1GHz@ZERO , 700MHz@B+) 

하지만 이것은 B+를 오버 클락킹하면 문제될 것은 없습니다. 웹서핑 결과 1.5MHz 까지 오버 했다는 기록이 있으니, ZERO가 없으면 B+를 오버하면 궂이 ZERO를 꼭 살 필요는 없다는 것입니다.

왜 이렇게 라즈에 열광을 하나 하는 생각을 해 봤습니다.
1. 다른 제품은 다루기 어렵다. 전문성을 요구하고 운영체제를 이식하기가 까다롭다. 정보가 부족하다(잘못됐는데 이래저례 해결 했다는 사례 등등이 별로 없어서 혼자 연구하던가 성질나서 밟아버릴 수도 있음). 하지만 라즈는 쉽고 예제가 매우 풍부하여 일반인들 조차도 다양한 용도로 사용할 수 있다.
2. 여러 응용 분야가 잘 준비되어 있고, 아예 콘넥터 표준이 생겨 버렸다. 다른 CPU 제품들이 라즈용 포트를 만들어 놓고 홍보를 합니다.(나 라즈포트 있음 ^^)
3. 아두이노라는 또다른 저성능 교육용 개발 키트와 호환되는 포트와 응용 프로그램 등이 예제와 하드웨어 연결및 상상력이 다하는 한 엄청나게 많은 예제들이 쌓여있다.

종합: 엄청난 어플리케이션(H/W & S/W)와 다른기기들과의 조합으로 상상력만 보태면 누구든지(약간의 노력은 필요함) 작고 성능 좋은(최상은 아님) 거의 모든 제품? 도 제작 가능.
하드웨어는 ZERO가 동급 최강(가성비 및 크기)이라고 봐도 무난함.


위의 2번항목을 예를 들어 봅니다. 이런식으로 홍보를 한답니다.

[앞으로 진행 사항] 메모리와 Package 크기문제로 LPC812 를 PSOC4 로 교체.

OM5569 개발키트를 토대로 프로젝트 보드를 만들어서 
외부 업체로부터 라이브러리 함수를 제공 받아 프로젝트를 진행하려 했는데, 
메모리 부족으로 더 이상 진행할 수가 없게 되었네요.

[OM5569 개발키트]



LPC812가 16KByte 메모리 밖에 없어서, 업체에서 제공받은 라이브러리 함수를 사용하니 3.5KByte 가 over가 되었습니다.
그것도 간단한 테스트 프로그램에서 컴파일한 것인데, 코드가 한참 더 추가되어야할 상황이라, 바로 다른 방법을 찾아야했습니다.

패키지가 작아서 LPC812를 썼는데, 32KB 버전부터 xson16 타입이 안나오네요.

그래서 LPC812로 I2C 통신 테스트는 당분간 예정에서 빼고,
PSOC4 로 I2C 테스트를 먼저 해야할 것 같습니다.

PSOC4 는 생각보다 저렴합니다. 대량 구입시 $2.0 미만에 구입 가능하더라고요. ^^


그러나 해야할 일들이 잔뜩 생기네요.

1. PSOC Creater 에서 라이브러리 함수 만드는 방법 찾아서 업체에 다시 알려 줘야하고,
2. NFC IC(LPC812) 프로그램을 PSOC4에 돌아가게 다시 짜야하고,
3. MCU 추가되는 application 프로그램 해야하고.. 
4. 아. 회로도 그리고 PCB 아트웍도 다시 해야하는구나. ㅜㅜ

핸드폰 NFC 앱은 NXP 앱을 사용하고, MCU는 PSOC4로, NFC IC 는 NXP( NT3H1101)로 구성됩니다. 

2015년 11월 27일 금요일

NXP LPCXpresso 컴파일러 에서 라이브러리 함수 만들기(Code size Optimization)

NXP LPCXpresso 컴파일러 에서 라이브러리 함수 만들기(라이브러리 만들기) - Code size Optimization



라이브러리 함수는 간단한 내용으로 다음과 같습니다.


unsigned char aplusb(unsigned char a,unsigned char b)
{
return (a+b);
}



2015년 11월 25일 수요일

NXP LPCXpresso 컴파일러 에서 라이브러리 함수 만들기(라이브러리 사용) 3/3

NXP LPCXpresso 컴파일러 에서 라이브러리 함수 만들기(라이브러리 사용) 3/3


이전에 라이브러리를 만드는 방법을 포스팅했고, 이번에는 라이브러리 안에 있는 함수를 사용하는 방법을 알아보자.

1. 이전에 예를 들어서 만들었던 함수(aplusb)가 포함된 liblib_test.a 파일과 헤더파일(lib_test.h)를 준비하자.

2. 프로젝트를 하나 만들어 보자. 라이브러리가 잘 동작하는지 테스트 하기 좋은 것이 UART로 내용을 출력하는 프로젝트다. LPCOPen 예제 프로젝트 중, peiph_uart 프로젝트를 import 해서 프로젝트를 하나 만든다. 프로젝트 만드는 방법은 생략... 나중에 한번 프로젝트를 import 해서 수정하는 방법을 따로 포스팅해 보겠다.

3. 준비한 라이브러리(liblib_test1.a) 를 periph_uart 프로젝트 내에 lib 라는 폴더를 만들어 폴더안에 복사(copy)해서 붙여(paste) 넣는다. 그리고 라이브러리 함수 원형이 선언되어 있는 헤더화일(func.h)을 src 폴더안에 복사(copy)해서 붙여(paste) 넣는다.


4. 라이브러리를 현재 프로젝트에 링크하기 위해 툴 좌측에서 현재 프로젝트폴더를 선택, 마우스 오른쪽 버튼을 눌러 Properties를 선택하자.


5. 다음의 1,2,3,4 의 순서에 따라서 라이브러리를 추가할 준비를 한다.


6. 위의 그림에서 4번을 클릭해서 라이브러리를 추가(Add) 하는데, 주의할 점은 이전에 라이브러리가 liblib_test1.a 로 만들어져서 liblib_test1 로 라이브러리를 추가하면 안되고 맨 앞의 lib를 뺀 이름(lib_test1)을 써 넣어야 한다.

7. Library Search path 를 정해주기 위해서 다음 그림의 5번, Add 를 마우스 왼클릭.


8. browse 버튼을 눌러 처음에 lib 폴더에 넣어둔 라이브러리 파일(liblib_test1.a)이 있는 폴더를 선택한 후 OK를 누름으로써, 만들어 둔 라이브러리가 프로젝트에서 사용할 수 있도록 준비가 된 것입니다.



9. periph_uart.c  소스코드를 수정을 해서 라이브러리 안에 있는 함수(aplusb)가 잘 동작하는지 보겠습니다.
먼저 periph_uart.c 에 aplusb()함수 원형이 들어있는 헤더파일을 Include 해 줍니다.

#include "board.h"
#include <stdio.h>
#include "func.h"


10. uart 로 aplusb 함수의 결과를 출력하도록 소스코드를 추가하고, 빌드하고 디버깅 버튼을 눌러 디버깅 모드에서 실행 시킵니다.

uint8_t a=0,b=1;
/* Loop forever */
while (1) {
__WFI();
if (sys_event & EV_TICK_CT_DISPLAY) {
sys_event &= ~EV_TICK_CT_DISPLAY;
Board_UARTPutSTR("system tick: ");
Board_itoa(tick_ct, out_str, 10);
Board_UARTPutSTR(out_str);

                        Board_UARTPutSTR("\tSwitch IN: ");
Board_itoa(aplusb(a,b), out_str, 10);
a++;
Board_UARTPutSTR(out_str);
Board_UARTPutChar('\r');
Board_UARTPutChar('\n');
}

위의 코드는 타이머 인터럽트에 따라 일정 주기 마다 틱카운트를 증가하면서 출력하는 예제에다,  aplusb() 함수의 입력으로 변수 a,b 를 넣고 함수의 출력을 uart로 출력하는 코드입니다.

또 일정한 타이머 주기마다 a가 1씩 증가하면서 aplusb() 함수의 입력으로 a,b를 적용시키면 출력이 계속해서 1씩 증가되면서 UART로 출력됨을 예상하면서 PC의 232 터미날 프로그램에서 확인을 해 봤습니다.

11. 다음은 라이브러리 함수의 출력을 PC 터미널 프로그램인 Tera Term VT로 수신한 결과입니다. 예상한 결과대로 잘 나오는 것을 보니 라이브러리 함수가 잘 동작하는것 같습니다. ^^ . 와우~~ 성공.


NXP LPCXpresso 컴파일러 에서 라이브러리 함수 만들기(라이브러리 만들기) 2/3

NXP LPCXpresso 컴파일러 에서 라이브러리 함수 만들기(라이브러리 만들기) 2/3


1. LPCXpresso IDE 툴을 열고, 만들려고 하는 디렉토리에 workspace를 지정하고 새로운 project를 하나 만든다.


2. 이 때, LPCXpresso C Project로 지정.

3. MCU 를 설정하고, LPCOpen - C Static Library Project 로 지정. NEXT

4. project name 을 정한다. NEXT

5. Target MCU 를 선택한다. NEXT

6-1. 기본 라이브러리 프로젝트(MCU에서 반드시 사용해야 하는 라이브러리 프로젝트이지 우리가 만들려고 하는 라이브러리 프로젝트를 의미하는 것이 아니다)를 import 한다. NEXT
6-2. import 버튼을 누르면 zip 으로 압축된 라이브러리 를 선택 할 것인가? 아니면 라이브러리 프로젝트 폴더를 선택할 것인가? 를 묻는데, 저는 zip 으로 압축된 라이브러리를 선택하고 browse 버튼을 누른다.


6-3. 라이브러리 프로젝트가 압축된 폴더 위치는 
C:\nxp\LPCXpresso_7.9.2_493\lpcxpresso\Examples\LPCOpen 이다.
이 위치에서 개발키트와 CPU에 맞는 라이브러리 프로젝트 zip 파일을 선택한다. 

6-4. NEXT

7. 기본적으로 모두 선택되어 있는데, Deselect All 한후, 
꼭 필요한 라이브러리인 lpc_chip_8xx(lpc_chip_8xx) 만 선택한 후, Finish 버튼을 클릭.

8. 그러면 select LPCOpen Libraries 항의 LPCOPEN Chip Library Project 를 선택할 수 있다.
browse 버튼을 눌러 팝업창이 뜨면 lpc_chip_8xx 를 선택.

9. NEXT

10. NEXT

11. Finish



12-1. 이제 툴 설정 과정이 끝났고, 라이브러리 함수를 만들기 위해 source File을 하나 만들어 추가해 보자. 왼쪽 상단의 src 폴더를 마우스 우클릭하여 New->Source File 을 선택하고 Source File 이름을 정해서 Finish 버튼을 누르면 해당 소스 파일이 생성된다.


12-2. 왼쪽 상단의 inc 폴더를 마우스 우클릭하여 New->Header File 을 선택하고 Header File 이름을 정해서 Finish 버튼을 누르면 해당 Header File이 생성된다.

13. Source File을 열어 간단한 함수를 하나 정의해 보았다. aplusb 라는 함수로 입력 인자 2개를 받아서 더한 값을 리턴한다.

#include "lpc_types.h"

uint8_t aplusb(uint8_t a,uint8_t b)
{
return (a+b);
}

14. Header 파일을 열어서 소스 파일로 만들어진 오브젝트 파일에 있는 함수들의 내용을 다른 소스 파일에서 사용할 수 있도록 aplusb 함수 원형을 선언한다.

15. 이렇게 해서 컴파일을 하면 lib+라이브러리 프로젝트명.a 파일이 나온다.
만약 다른 프로젝트에서 이 라이브러리 함수를 사용하려면 lib+라이브러리 프로젝트명.a 파일 과 함수 원형이 선언되어 있는 헤더 파일을 가져다 쓰면 된다.

즉, 알고리즘으로 함수를 만든 회사는 이 라이브러리를 쓰고자 하는 회사에 lib+라이브러리 프로젝트명.a 파일 과 헤더 파일을 주면 끝이다. ^^

NXP LPCXpresso 컴파일러 에서 라이브러리 함수 만들기(H/W 환경 구축) 1/3

회사에서 소프트웨어 알고리즘 제공 업체와 F/W 프로그램을 같이 만들게 되었다.

그런데, 알고리즘 자체가 제품이라 업체의 소스 코드를 제공 받을 수 없어서 한번 컴파일된 소스를 알 수 없는 라이브러리 형태로 제공 받기로 했다.

아시다시피, MCU F/W는 IC 제작 업체에 따라서 컴파일러가 다른 경우가 많다.
물론 다 제공되는 컴파일러도 있지만, 가격도 비싸고 경우에 따라 예제 소스 지원도 잘 안되서, 저같은 경우는 예제 소스를 잘 지원해주고 이용자가 많아 정보가 많은 컴파일러를 사용하는 편입니다.

이번에 프로그램할 MCU는 LPC812 라는 NXP사의 ARM CORTEX-M0 32비트 프로세서이다.
프로세서 제원의 자세한 사항은 링크를 참조하기 바란다.

이 IC를 사용하여 만든 개발키트(OM13053)를 이용해서 만든 라이브러리 파일의 함수를 UART로 출력하고 PC에서 232통신으로 받아 터미날에 출력해서 디버깅 할 계획이다.

OM13053 개발보드는 SWD 방식의 LPC-LINK(HID) JTAG 디버거가 내장되어 있어 USB케이블만 꽂으면 개발 환경이 완성된다.



프로그램이 잘 동작하는지 디버깅 용도로, TTL<-->232 변환 장치(구입처는 모른다. 회사에 굴러 다니던 것을 사용) 와 232 <-->USB 장치를 사용했다.


이렇게 H/W 구성은 완료됐고, 이제 라이브러리 함수를 만들어 보자.



2015년 11월 23일 월요일

솔리드웍스로 만들어본 조립 동영상





회사에서 솔리드웍스를 연습해서 한번 만들어 봤습니다.



재밌네요. 이거. ^^.

회사에서 올리지 말라 해서 예전에 한 것으로 바꿨습니다.

위의 내용은 조립 동영상은 아니네요.
책보고 따라 했는데, 분해하면서 만들어진 자료를 거꾸로 돌려서 조립 동영상이 되더군요.

개인적으로 다시 회사와는 관계없는 자료를 올려 보겠습니다.

솔리드 웍스 뉴비 씀. ^^

블로그 테스트 입니다.

안녕하세요. 네이버가 영 맘에 안들어서, 카페 내용을 구글 블로그에도 같이 옮겨서 공개를 해 볼 예정입니다. 처음이라 서투르지만 꾸준히 노력해 보겠습니다. ^^