NXP 의 NT3H1101/NT3H1201 IC와 같이 쓰기 위한 안테나 입니다.
NXP의 Reference 에 따라,
OM5569 개발 키트에서 사용했던 안테나와 동일하게 만들어 봤습니다.
성능은 대단히 좋네요.
약 30~40 mm 정도의 거리가 나오네요.
하지만 NFC IC의 VOUT 의 전원을 많이 쓰면 쓸수록 거리가 짧아지는 것을 알았습니다.
I/F 되는 CPU가 VOUT의 전원을 사용하는데, 가능하면 조금만 쓰도록 회로를 설계해야 겠습니다.
만든 안테나의 아트웍 그림을 올려 봅니다.
글목록
2015년 12월 29일 화요일
2015년 12월 14일 월요일
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);
}
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 구성은 완료됐고, 이제 라이브러리 함수를 만들어 보자.
그런데, 알고리즘 자체가 제품이라 업체의 소스 코드를 제공 받을 수 없어서 한번 컴파일된 소스를 알 수 없는 라이브러리 형태로 제공 받기로 했다.
아시다시피, 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 구성은 완료됐고, 이제 라이브러리 함수를 만들어 보자.
피드 구독하기:
글 (Atom)