NanoQPlus v2.4.0 Release

NanoQplus 2009.04.01 19:27 Posted by 몽백작

http://www.qplus.or.kr/EMT/?ref=board/board.emt&bbs_table=m4_02&menu_table=m4_00&page=1&eb_idx=69

=====================================================================
2009.03.12 version 2.4.0
=====================================================================
 1. Configuration of NanoQplus
   - Need to export $CYGWIN_HOME (bash ex: export $CYGWIN_HOME=/cygdrive/c/cygwin)
   - You can install cygwin anywhere now.
 2. UART module for MSP430
   - The periodic fast calibration was removed. It makes a problem when many interrupts are occurred.
   - It was added at v2.3.6
 3. NanoMAC for ZigbeX
   - There was a bug that ZigbeX was halted when mac_init() is called because RX interrupt configuration was wrong. Fixed now.
 4. RENO routing protocol
   - Bug fixed.
 5. UBee430(Hanback corp.), a new platform was added.
   - with luminance, temperature, humidity, human detect and door open check sensors.
 6. Lots of sensor modules were added.

신고

'NanoQplus' 카테고리의 다른 글

車 전자제어장치용 국내OS 확보 ‘쾌거’  (0) 2009.06.11
NanoQPlus v2.4.0 Release  (0) 2009.04.01
Nano Qplus 2.3.6 Release  (0) 2009.01.19
Nano MAC 3가지 수신 방법  (0) 2008.08.16
Nano MAC 초기화 - mac_init()  (0) 2008.08.15
Nano Q Plus 2.3.3 설치  (0) 2008.08.13

Nano Q Plus 2.3.3 설치

NanoQplus 2008.08.13 11:08 Posted by 몽백작

나노 큐 플러스를 다시 설치할 일이 생겼다. 이참에 글로 한번 남겨보고자 한다.

나노 큐 플러스의 경우 개발 환경이 크게 둘로 나뉜다. 첫째는 리눅스 에뮬레이터인 cygwin을 이용한 방법과 두번째는 Eclipse 기반의 Esto 개발툴을 이용한 방법이다. Esto는 ETRI에서 텍스트 위주의 리눅스에서의 개발이 익숙치 않은 개발자들을 위해 나왔다고는 하지만, 개인적으로 수차례 시도했지만 제대로 성공한 적이 없다. 더군다나 내가 사용하는 mote의 MCU가 MSP430인데, AVR계열의 MCU를 사용하는 mote들만을 위해서 나온듯 싶다. 차라리 cygwin을 사용하는 편을 추천하는 편이다. 리눅스에서 개발 경험이 없다 하더라도 몇가지 명령어만 알면 금방 익숙해 질 수 있고, Source Insight라든지 UltraEdit, Beyond compare 등등 소스 작성에 유리한 툴들과 함께 사용하면 불편함 없이 너무 편하게 사용할 수 있다.

먼저 ETRI 융합소프트웨어 연구본부에서 Nano Q Plus와 Nano Q Plus Tool Package를 다운받아야 한다. 회원 가입후, 소스 자료실에서 다운받을 수 있다.

사용자 삽입 이미지

Nano Q Plus Tool Package는 Nano Q Plus를 사용하기 위한 cygwin과 컴파일러인 WinAVR 또는 MSP430-gcc, PonyProg 같은 퓨징 프로그램, USB-to-RS232(FTDI) Driver 등이 포함되어 있는 패키지이다.

Tool Package를 루트(C:\)에 압축을 푼다. 필자의 경우 C:\nano_qplus_tool_package-071008 에 압축을 풀었다.

사용자 삽입 이미지

이제 Cygwin을 설치하자. 툴 패키지의 Cygwin 디렉토리에 있는 setup.exe를 실행시킨다.

사용자 삽입 이미지

다음과 같은 화면이 나타난다.

사용자 삽입 이미지
 다음을 클릭한다.

사용자 삽입 이미지

3번째 Install from Local Directory를 선택한다. 툴 패키지 내에 이미 나노 큐 플러스를 사용하기 위한 패키지가 모두 포함되어 있으므로 Instal from Internet을 선택해서 설치할 패키지를 고민할 필요가 없다.

사용자 삽입 이미지

Cygwin 에뮬레이터에서 사용할 루트 디렉토리는 디폴트로 하여 다음을 클릭한다.

사용자 삽입 이미지

Cygwin 패키지가 있는 경로를 선택한다. Install From Local Directory를 선택했으므로 로컬 디렉토리에서 Cygwin 패키지를 선택해야 하는데, 툴 패키지에 포함되어 있으므로, 그대로 다음을 클릭하면 된다.

사용자 삽입 이미지

패키지를 선택할 수 있는 화면인데, 나노 큐 플러스에 필요한 패키지가 디폴트로 설정되어 있으므로 다음을 클릭하면 된다.

사용자 삽입 이미지

설치가 진행된다.

사용자 삽입 이미지

설치가 종료되면 바탕화면에 아이콘을 만들것인지, 시작메뉴에 아이콘을 만들것인지 선택하게 된다. 각자 취향대로 선택하시고 마침을 클릭하면 Cygwin 설치가 종료된다.

이제 컴파일러를 설치해보자. 나노 큐플러스는 수가지의 상용화된 mote들을 지원하는데, 모두 MICAz 기반의 AVR의 Atmega128L 아니면 Telos 기반의 TI의 MSP430f1611이다. 필자는 국내 업체인 아이앤테크라는 곳에서 나온 Kmote를 사용하는데, Telos 기반의 Tmote-Sky와 compatible 하므로, MSP430-gcc를 설치한다. MICAz 계열을 사용하는 분들은 WinAVR과 PonyProg를 설치하면 된다.

사용자 삽입 이미지

툴 패키지의 Compiler에 보면 2가지 컴파일러가 있는데, 필자는 mspgcc를 설치한다.

사용자 삽입 이미지

mspgcc의 경우, 설치에 특별한 것이 없으므로 Next만 클릭해주면 된다.
mspgcc를 Cygwin에서 사용하기 위해서는 cygwin의 버전을 맞춰줘야 한다고 한다. 이를 위해 C:\cygwin\bin\cygwin1.dll 파일을 mspgcc가 설치된 C:\mspgcc\bin 에 덮어 써야 한다.

사용자 삽입 이미지

사용자 삽입 이미지

또 한가지 고려 사항은 환경 변수 설정이다. 바탕화면의 내컴퓨터에 오른쪽 버튼을 클릭하여 속성을 클릭한 후, 고급 탭의 환경 변수를 클릭한다.

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

시스템 변수의 Path 를 더블클릭하여 c:\mspgcc\bin이 있는지 살펴보자. 없으면 위와 같이 가장 뒤에 세미콜론을 붙이고 추가한다. 이는 어떤 경로에서든 mspgcc를 실행하기 위함이다.

이제 Cygwin을 실행하여 나노 큐 플러스의 개발 환경을 설정해 보자. 바탕화면의 Cygwin을 더블클릭하여 cygwin을 실행한다.
사용자 삽입 이미지

사용자 삽입 이미지

실행해 보면 딱딱한 콘솔만 나온다. 리눅스를 접해보지 않은 개발자들을 위해서 몇가지 간단한 리눅스 명령어를 DOS 명령어와 비교해 소개하자면 다음과 같다.

ls : 디렉토리의 파일 목록 출력. dir
cd <경로>: 디렉토리 변경. cd <경로>
md : 디렉토리 생성. mkdir
pwd : 현재 디렉토리 경로 출력. cd
rm <대상파일> : 파일 삭제. del <대상파일>
rmdir <경로> : 디렉토리 삭제. rd <경로>
cp <원본> <대상> : 파일 복사. copy <원본> <대상>
mv <원본> <대상> : 파일 이동. move <원본> <대상>
mv <대상> <변경할 파일명> : 파일명 변경. ren <대상> <변경할 파일명>
cat <대상> : 파일 내용 출력. type <대상>

이정도만 알아둬도 가슴치며 답답한 상황은 나오지 않을 것이다.
이제 본격적으로 환경 설정에 들어가 보자.

사용자 삽입 이미지

콘솔에서 위와 같이 cd /cygdrive/c/nano_qplus_tool_package-071008 이라고 치면 툴 패키지의 경로로 이동한다. cygwin은 리눅스 에뮬레이터이기 때문에 처음 설치시에 루트 디렉토리를 설정해둔 사실을 기억해보자. cygwin에서는 루트 (/)가 c:\cygwin에 해당한다. 즉, cd / 명령어는 루트로 디렉토리를 이동하라는 명령이고, 루트에 있는 cygdrive는 Windows의 드라이브(a, c, d ....)를 폴더로 인식하도록 해주는 역할을 한다. 정리해보면, cd /cygdrive/c/nano_qplus_tool_package-071008 이라는 명령어는 c:\nano_qplus_tool_package-071008 로 디렉토리를 변경하라는 뜻이다. ls를 쳐보면 디렉토리에 있는 파일들이 출력된다.

이제 sh 1_qplusn.sh 를 쳐보자. 이는 cygwin에서 나노 큐 플러스에 맞도록 경로 등을 설정하는 부분이다. 아래에 맞춰 입력하자.

사용자 삽입 이미지

주의할 점은 두번째 질문은 나노 큐 플러스가 설치될 곳(c:\cygwin\nos-2.3.3)을 cygwin식 경로로 입력해줘야 한다는 것이다. 또 한가지는 마지막에 nos-2.3.0을 입력한 경로로 복사하겠느냐는 것인데, 2.3.0 버전을 기준으로 되어 있으므로 이 부분은 n을 선택하고 직접 복사해주면 된다.

처음에 다운받았던 나노 큐플러스 2.3.3 버전을 c:\cygwin\nos-2.3.3에 복사하자.
사용자 삽입 이미지
복사는 예전처럼 탐색기에서 직접 하면 된다.

다시 cygwin으로 돌아와서 sh 2_env.sh 를 입력하자.
사용자 삽입 이미지
이는 딱딱한 콘솔화면을 그나마 조금 보기 쉽게 만들어 주기 위함이다. 모두 y 를 입력하고 cygwin을 종료하고, 다시 시작하자.

사용자 삽입 이미지

많이 밝아졌다. ㅋ

이제 nos 라고 입력해보자. 그러면 자동으로 나노 큐플러스가 설치된 디렉토리로 이동할 것이다.

사용자 삽입 이미지

설치가 최종적으로 잘 되었는지 확인하기 위해 sh Check.sh 를 입력하면 다음과 같이 출력될 것이다.
사용자 삽입 이미지

여기서 신경써서 봐줄 부분은 바로 컴파일러 부분이다. WinAVR이나 mspgcc를 설치했다면 해당 컴파일러의 경로가 출력되어야 한다. 만약 설치를 했는데 나타나지 않는다면 환경변수 쪽을 의심해봐야할 필요가 있다.

모든 설치가 완료되었다.
이제 제대로 컴파일 및 다운로드가 되는지 확인해보자.

사용자 삽입 이미지

nos 위치에서 cd test-apps/platform-test/tmote-sky/led/ 를 입력하여 LED 깜빡이기 테스트 프로그램으로 이동해 컴파일 및 다운로드해보자.

먼저 수행할 명령어는 make menuconfig 이다.
사용자 삽입 이미지
만약 위와 같은 에러메시지가 나타난다면 당황해 하지 말자. (살짝 나도 당황했다는...;;;) 밑에서 세번째 줄을 보면 화면이 너무 작다고 징징대는 것을 알 수 있다. 창 사이즈를 좀 늘리고 (80*19 이상) 실행해보면 다음과 같은 menuconfig 프로그램이 나타난다.

사용자 삽입 이미지

이는 나노 큐 플러스를 해당 플랫폼에 맞게 설정하는 부분이다. 첫번째는 플랫폼, 두번째는 UART 통신 속도, 세번째는 사용할 기능들, 네번째는 사용할 커널 기능들, 다섯번째는 네트워크 관련 기능들을 설정할 수 있다.

모두 맞게 설정한 후 좌우 화살표를 이용하여 Exit에 커서를 옮기고 엔터를 치면 모두 저장된다.

여기서 설정한 부분들은 kconf.h 파일에 자동으로 입력된다. 따라서 kconf.h는 직접 수정할 필요 없이 make menuconfig 프로그램으로 수정하면 된다.

이제 본격적인 빌드를 위해 콘솔에서 make를 쳐보자.

사용자 삽입 이미지

뭔가 후다다닥 엄청난 양이 지나가고 나서 'led.rom' has been created 가 출력되었다면 성공한 것이다. 이제 모트를 꽂아보자.
만약 FTDI를 사용한 적이 없다면 새 하드웨어 마법사가 나타날 것이다.

목록 또는 특정 위치에서 설치를 선택한후, 다음과 같이 툴 패키지에 포함된 USB to Serial Driver 경로를 입력하자.

C:\nano_qplus_tool_package-071008\Platform Driver\USBtoSerial

사용자 삽입 이미지

사용자 삽입 이미지

이렇게 한번 더 마법사가 나타나는데 똑같은 경로로 설치하면 된다. 드라이버 설치가 완료되었으면 다시 콘솔로 가보자.

make motelist를 입력하여 연결된 mote의 시리얼 포트 번호를 알아내자.
사용자 삽입 이미지

COM3라고 출력됨을 알 수 있다.

굽기 위해서는 make burn port=com3 이런식으로 입력하면 된다.
사용자 삽입 이미지

다운로드가 완료되었다. 이 순간 모트를 바라보면 led를 번갈아 깜빡이고 있을 것이다.
신고

'NanoQplus' 카테고리의 다른 글

Nano MAC 3가지 수신 방법  (0) 2008.08.16
Nano MAC 초기화 - mac_init()  (0) 2008.08.15
Nano Q Plus 2.3.3 설치  (0) 2008.08.13
아날로그-디지털 변환 - ADC12  (0) 2008.07.29
자원 동시 접근 제어 - Semaphore  (0) 2008.07.28
thread 사용의 시작  (0) 2008.07.27

아날로그-디지털 변환 - ADC12

NanoQplus 2008.07.29 09:16 Posted by 몽백작

Kmote같은 Telos기반 모트는 MPU로 TI의 MSP430f1611을 사용한다. DSP로 유명한 TI MPU인 만큼 ADC도 12비트 분해능을 가진 ADC12와 10비트 분해능을 가진 ADC10을 사용할 수 있다. Nano Q Plus는 ADC12만 사용이 가능하다.

ADC를 사용하기 위해서는 플랫폼에서 ADC 모듈을 사용 가능하도록 설정해야 한다.
 
/nos/platform/$(플랫폼이름)/platform.c

void nos_platform_init()
{
#ifdef UART_M
        nos_uart_init(STDOUT);
#endif

#ifdef LED_M
        NOS_LED_INIT();
#endif

#ifdef RF_M
        nos_rf_init();
#endif

#ifdef SENSOR_HUM_M
        nos_hum_init();
#endif

#ifdef SENSOR_TEMP_M
        nos_temp_init();
#endif

#ifdef ADC_M
        nos_adc_init();
#endif

}

위의 굵은 빨간색 글씨 부분처럼 adc 모듈을 초기화해줘야 한다.
이렇게 하면 어플리케이션에서 nos_init() 호출시 nos_platform_init()을 호출하게되고, 이때, nos_adc_init()을 호출하게 되는 것이다.

어플리케이션에서 ADC 사용은 간단하다.
UINT16 nos_adc_convert(UINT8 sensor_type)

sensor_type에는 연결된 ADC 채널 번호를 넣어주면 된다. 가령, ADC0면 0을 넣어주면 된다.
이렇게 호출하면 내부적으로 자동으로 아날로그 값을 디지털값으로 변환하여 16비트 short 정수형으로 반환한다.

현재 나노 큐플러스 2.3.3에는 MSP430의 ADC 쪽에 버그가 있다. 다음은 ETRI에서 제공한 수정한 adc.c 파일이다.이 파일을 기존에 adc.c가 있는 디렉토리(/nos/arch/msp430x1611)에 덮어 쓰면 된다.
기존 코드의 문제점은 멀티 채널 사용시 ENC 비트의 유지가 안되는 점이라고 한다. 코드를 보면 기존에는 별다른 설정과정 없이 그냥 사용했지만, 수정된 코드는 pulse sample mode를 사용한다. 그래서 그런지 기존에는 간단한 LM35DZ 온도센서를 사용했음에도 불구하고, 값이 제멋대로 나왔는데, 이제는 잘 된다.
(이 파일의 포스팅을 허락해주신 ETRI 김해용 연구원님께 이자리를 빌어 다시한번 감사를...^^)
신고

'NanoQplus' 카테고리의 다른 글

Nano MAC 초기화 - mac_init()  (0) 2008.08.15
Nano Q Plus 2.3.3 설치  (0) 2008.08.13
아날로그-디지털 변환 - ADC12  (0) 2008.07.29
자원 동시 접근 제어 - Semaphore  (0) 2008.07.28
thread 사용의 시작  (0) 2008.07.27
Nano Q Plus OS 디렉토리 분석 – [nos]  (0) 2008.07.24

Nano Q Plus OS 디렉토리 분석 – [nos]

NanoQplus 2008.07.24 08:52 Posted by 몽백작

Nano Q Plus OS 디렉토리 분석 – [nos]

 

Nano Q Plus 운영체제의 핵심으로 아키텍쳐(MCU), RF(CC2420), 커널, 네트워크(MAC, Routing), 플랫폼 별 디바이스 드라이버 및 API가 존재한다.

 

l  arch : 아키텍쳐(MCU) 공통 기능을 encapsulating

n  critical_section.c / critical_section.h : 크리티컬 섹션

n  time_check.c / time_check.h : 시스템 시간

n  uart.c / uart.h / uart_gets.c / uart_printf.c / uart_puti.c / uart_puts.c / uart_putu.c : 시리얼 통신

n  atmega128 : ATmega128 MCU specific codes

u  adc.c / adc.h : ADC(Analog-Digital Converter)

u  arch.c / arch.h : 아키텍쳐 기본

u  eeprom.c / eeprom.h : EEPROM

u  hal_sched.c / hal_sched.h : HAL(Hardware Abstraction Layer) 스케쥴러

u  hal_thread.c / hal_thread.h : HAL(Hardware Abstraction Layer) 쓰레드

u  intr.c / intr.h : 인터럽트

u  pwr_mgr.h : 전원 관리

u  spi.h : Serial Programming Interface

u  timer.c / timer.h : 시스템 타이머

u  typedef.h : 데이터 타입 재정의

u  uart_getc.c / uart_init.c / uart_putc.c : 시리얼 통신

u  mm : 메모리 관리

l  heap.c / heap.h :

l  nos_free.c : 힙에 할당된 영역 free

l  nos_malloc.c : 힙에 메모리 할당

n  msp430x1611 : MSP430 MCU specific

u  adc.c / adc.h : ADC

u  arch.c / arch.h : 아키텍쳐

u  clock.c / clock.h : 시스템 클럭

u  hal_sched.c / hal_sched.h : HAL 스케쥴러

u  hal_thread.c / hal_thread.h : HAL 쓰레드

u  intr.c / intr.h : 인터럽트

u  pwr_mgr.h : 전원 관리

u  spi.h : SPI

u  timer.c / timer.h : 시스템 타이머

u  typedef.h : 데이터 타입 재정의

u  uart_getc.c / uart_init.c / uart_putc.c : 시리얼 통신

u  mm : 메모리 관리

l  heap.c / heap.h :

l  nos_free.c / nos_malloc.c : 힙에 메모리 할당 / 해제

l  drivers : 장치 드라이버

n  rf : 무선 통신 장치 드라이버

u  cc2420.c / cc2420.h : CC2420 드라이버

l  kernel : 커널에서 구현되는 기능

n  kernel.c / kernel.h : 커널 초기화

n  msgq.c / msgq.h : 메시지큐

n  sched.c / sched.h : 스케쥴러

n  sem.c / sem.h : 세마포어

n  taskq.c / taskq.h : 태스크큐

n  user_timer.c / user_timer.h : 타이머

n  thread : 쓰레드 관련

u  thread.h : 쓰레드 관련 상수 정의

u  thread_create_exit.c : 쓰레드 생성 / 제거

u  thread_join.c : 쓰레드 조인

u  thread_kill.c : 쓰레드 제거

u  thread_priority_change.c : 쓰레드 우선순위 변경

u  thread_resume.c : 쓰레드 다시 가동

u  thread_sleep.c : 쓰레드 sleep

u  thread_suspend.c : 쓰레드 잠시 중단

u  thread_wakeup.c : sleep된 쓰레드 깨우기

u  threadq.h: 쓰레드 큐잉

u  threadq_ext.h : 쓰레드 큐잉 확장

l  net : 네트워크 관련

n  mac : MAC(Media Access Control) 프로토콜

u  mac.h : MAC 매크로 정의

u  nano_mac : Nano MAC 관련

l  nano_mac.c / nano_mac.h : Nano MAC 구현

n  routing : 라우팅 관련

u  routing.h : 라우팅 매크로 정의

u  reno : Reno 라우팅 관련

l  reno.c / reno.h : Reno 라우팅 구현

l  reno_interlayer.c : 계층(MAC – Network)간 라우팅 메시지 처리

u  teno : Teno 라우팅 관련

l  teno.c / teno.h : Teno 라우팅 구현

l  platform : 플랫폼별 기능 구현

n  etri-ssn

n  hmote2420

n  isn-400n

n  micaz

n  nano-24

n  sky-z200

n  tmote-sky

n  ubi-coin

n  ubi-msp

n  zigbex

l  include : 공통 API(api.h)와 플랫폼별 API(api_플랫폼이름.h) API 정의

사용자 삽입 이미지

※ 참고로 이 글은 제 개인적인 시각으로 분석한 결과입니다. 다른 의견이나 다른 사실이 있을 경우, 댓글 달아주시면 감사하겠습니다.
Nano Q Plus 정보가 너무 부족합니다. 함께 분석하고 알아갔으면 합니다.
신고

졸업작품에서 처음 계획한 조명시스템은 모델하우스를 밝힐 조명과 그들을 제어하는 스위치 및 네트워크(ZigBee)를 말하는 것이었습니다.
가장 간단한 시스템일줄 알았는데, 나름 험난한 산을 하나 넘어온 느낌이네요.. ^^;;;


처음에는 이걸로 스위치를 사용한 인터럽트가 성공했을 줄 알았습니다. 하지만 그 뒤에는 더큰 산이....;;;;
MSP430은 ARM과 다르다는 것을 몰랐다는 것이죠.

방금전 겨우겨우 해결!! ^^
네트워크 기능을 제외한 단순한 스위치 인터럽트를 이용한 조명시스템 모델의 기본 모듈입니다.

이걸 이용해서 작은 모델 하우스의 조명을 밝힐 예정입니다. ㅋㅋ

이제... ADC만 해결하면 어느 정도 어려운 산은 넘어간건데...ㅜ.ㅜ
신고

Telos의 UserINT

Events/2008 누리 졸업작품전시회 2008.07.22 09:22 Posted by 몽백작

사용자 삽입 이미지
Telos 기반의 KMote-B에도 Telos처럼 UserINT(P2.7) 핀이 존재한다. 그저 사용자가 정의하여 인터럽트를 걸어주는 핀이라고 생각했다.

MSP430에서는 P1과 P2에서 General Purpose Digital I/O를 사용할 수 있고, 인터럽트도 가능하다. UserINT 핀은 P2.7이니까 Digital I/O로 사용할 수 있고, 그 핀을 통해 인터럽트도 된다. Telos 모트에서는 P1.0이 PKT_INT(CC2420에서 패킷을 수신할 때 발생하는 인터럽트)로 사용하므로 실질적으로 사용자 정의 인터럽트는 P2에서만 사용하는 것이 외부 인터럽트 사용과 동시에 RF 동작을 완벽히 보장할 것이다.
Telos Rev. B의 회로도를 보면 명시되어 있지는 않지만, 마치 사용자 인터럽트는 UserINT 하나로 사용하라는 듯이 나와있다. 하지만 센서노드의 제한적인 핀 수에 따른 것으로 보일 뿐더러 나머지 P1과 P2에 사용자 정의 인터럽트를 사용하면 안된다는 말은 그 어디에도 나와있지 않다.

현재 진행중인 프로젝트에서는 푸쉬스위치를 응용한 인터럽트를 최대 5개 사용해야 한다. 그래서 P2.0(GIO0), P2.1(GIO1), P2.3(GIO2), P2.6(GIO3), P2.7(UserINT)를 사용하기로 했다.

#define SW1 0
#define SW2 1
#define SW3 3
#define SW4 6
#define SW5 7

(중략)

// 모두 I/O Function으로 사용
P2SEL &= ~((1 << SW1)|(1 << SW2)|(1 << SW3)|(1 << SW4)|(1 << SW5));
// 모두 Input 용으로 사용
P2DIR &= ~((1 << SW1)|(1 << SW2)|(1 << SW3)|(1 << SW4)|(1 << SW5));
// High to Low Transition시 인터럽트 발생
P2IFG |= ((1 << SW1)|(1 << SW2)|(1 << SW3)|(1 << SW4)|(1 << SW5));


하지만, 이렇게 해도 인터럽트가 제대로 발생하지 않았다.
발생을 하긴 하지만, 꾸준히 발생하는 것이 아니었고, 1, 4번 스위치는 제대로 동작했지만, 2, 3번 스위치는 동시에 발생했으며, 5번 스위치는 2, 3, 5번이 동시에 발생했다. 또 하나의 문제는 스위치로 사용하는 모든 핀들이 High 상태(3.3V) 이길 바랬는데, 0.1V, 0.2V 등등 전부 제각각이었다. 게다가 핀이 접지로 스위칭되서 인터럽트가 발생하는 것이 아닌 도체 뿐만 아니라 절연체 등등 핀에 어떤 사물이 스치기만 해도 인터럽트가 발생한다는 점...;;;;

대체 왜 이런 현상이 일어날까를 고민하기를 일주일째....
어제밤에도 해결이 되지 않은체 피곤한 몸을 이끌고 집으로 돌아갔다.

도대체 왜!!!

찬물에 샤워를 하면서 계속 생각해봤다. 왜 3.3V가 유지되지 않는 것일까... 3.3V만 유지된다면 스위치를 눌렀을 때 0V로 바뀌면서 High to Low Transition이 발생하면서 인터럽트가 발생할텐데...

그러다 문득!!!!!

처음 Telos 모트를 접했을때의 회로도가 생각났다. 아무렇지 않게 넘겼던 그 회로도의 UserINT 부분!!
ARM과 달리 MSP430은 입력 핀에서 3.3V가 유지되지 않았던 것이다!!

아래 회로도와 같이 3.3V를 따로 물려주고, 스위치 사용시 접지에 물리게끔 해야 High to Low Transition이 발생하는 것!!
사용자 삽입 이미지
아직 테스트 해보진 않았지만... 근질근질하다. ㅋ
왠지 잘 될것 같은 예감이.... ㅎㅎ
신고

ADC12 - ②

Study 2008.07.17 09:54 Posted by 몽백작

17.2.6 변환 메모리
- 변환 결과를 저장하기 위한 16개의 ADC12MEMx 컨버젼 메모리 레지스터 존재
- 각 ADC12MEMx는 ADC12MCTLx 제어 레지스터에 의해 설정
- SREFx 비트는 전압 기준 정의 / INCHx는 입력 채널 선택
- EOS 비트는 순차 변환 모드(sequential conversion mode)가 사용될 때 순서의 끝 정의
- 순서는 ADC12MEM15에서 ADC12MEM0로 ADC12MCTL15가 set 되지 않을 때 넘어간다.
- CSTARTADDx 비트는 변환에 사용되는 첫번째 ADC12MCTLx 정의
- 변환 모드가 단일채널(single channel) / 반복 단일 채널(repeated single channel)일 경우 CSTARTADDx 비티는 사용되는 단일 ADC12MCTLx를 가리켜야 함.
- 변환 모드가 채널 순차(sequence of channels) / 반복 채널 순차(repeat sequence of channels)일 경우, CSTARTADDx는 사용할 순서의 첫번째 ADC12MCTLx 위치를 가리켜야 함.
- S/W적으로 보이지 않는 포인터는 각 변환이 완료되면 자동으로 증가하여 다음 ADC12MCTLx를 가리키게 됨.
- 순서는 ADC12MCTLx의 EOS비트가 처리될 때 까지 계속됨.
- 변환 결과가 선택된 ADC12MEMx에 쓰여질 때, ADC12IFGx 레지스터의 해당 플래그가 설정됨.

17.2.7 ADC12 변환 모드
- CONSEQx 비트로 4가지 작동 모드를 선택할 수 있음.
사용자 삽입 이미지

사용자 삽입 이미지
단일 채널 단일 변환 모드
(Single channel Single conversion Mode)
- 단일 채널은 한번 샘플되고 변환됨.
- ADC 결과는 CSTARTADDx비트에 의해 정의된 ADC12MEMx에 쓰여짐.
- ADC12SC가 변환을 시작하게 하면(trigger), 성공적인 변환이 ADC12SC비트에 의해 트리거됨.
- 다른 트리거 소스를 사용할 경우, ENC가 각 변환 사이에 토글되어야 함.






















사용자 삽입 이미지
채널 순차 모드
(Sequence of Channels Mode)

- 채널 시퀀스가 한번 샘플되고 변환됨.
- ADC결과는 CSTARTADDx 비트에 의해 정의된 ADCMEMx로 시작되는 변환 메모리에 저장됨.
- 시퀀스는 EOS비트가 설정된 채널의 측정 후 중지.
- ADC12SC가 시퀀스를 작동시키면(trigger), 성공적인 시퀀스가 ADC12SC비트에 의해 트리거됨.
- 다른 트리거 소스가 사용되는 경우, 각 시퀀스 사이에 ENC가 토글되어야 함.








사용자 삽입 이미지
반복 단일 채널 모드
(Repeat single Channel mode)

- 단일 채널이 계속해서 샘플되고 변환됨.
- ADC 결과는 CSTARTADDx 비트에 의해 정의된 ADC12MEMx에 저장.
- 오직 하나의 ADC12MEMx 메모리가 사용되고 다음 변환에서 사용해야 하므로 한번 변환이 종료된 후, 결과를 읽어야 함.














사용자 삽입 이미지
반복 채널 순차 모드
(Repeat sequence of channels mode)

- 채널 시퀀스가 반복해서 샘플되고 변환됨.
- ADC결과는 CSTARTADDx 비트에 의해 정의된 ADC12MEMx로 시작하는 변환 메모리에 저장.
- EOS비트가 설정된 채널의 측정이 끝나고 시퀀스 종료, 다음 트리거 신호가 시퀀스 재시작.










다중 샘플 변환(MSC, Multiple Sample and Convert) 비트 사용
- 자동으로 가능한 빨리 상공적인 변환을 수행하도록 컨버터를 설정하기 위하여, MSC 함수 사용 가능.
- MSC = 1, CONSEQx > 0, 샘플 타이머 사용 : SHI 신호의 첫번째 상승 엣지가 첫번째 변환 트리거.
- 변환이 끝나는 데로 성공적인 변환이 자동으로 트리거됨.
- 단일 시퀀스 모드(single sequence mode)에서 시퀀스가 완료될 때 까지, 또는 반복 단일 채널(repeat single channel) / 반복 시퀀스(repeated sequence) 모드에서 ENC비트가 토글될 때까지 추가적인 SHI의 상승 엣지는 무시.
- ENC 비트의 함수는 MSC가 사용될때 변경되지 않음.

변환 중지
- ADC12 동작 중지는 동작 모드에 따라 다르다.
- 단일 채널 단일 변환 모드(Single Channel Single Conversion Mode) : ENC 리셋
  → 변환 즉시 중단. 결과 예측 불가. 올바른 결과를 위해서 ENC를 클리어하기 전에 busy 비트 폴링 필요
- 반복 단일 채널(Repeat Single Channel ) : ENC 리셋
  → 현재 변환이 끝나면, 컨버터 중지
- 시퀀스 / 반복 시퀀스(Sequence or Repeat Sequence Mode) : ENC 리셋
  → 시퀀스가 끝날때 컨버터 중지
- 어떠한 모드든지 CONSEQx = 0, ENC 리셋으로 즉시 종료 가능
  → 변환 데이터 신뢰성 없음
- 시퀀스 모드일때 EOS비트가 선택되지 않았다면 ENC로 중단할 수 없음. 따라서, ENC 리셋 전에 단일 채널 모드로 선택해야 함.

신고

'Study' 카테고리의 다른 글

캐릭터LCD DDRAM Address  (0) 2008.07.31
항상 새로운 것만 좋은 것이 아니다.  (0) 2008.07.18
ADC12 - ②  (0) 2008.07.17
ADC12 - ①  (0) 2008.07.16
MSP430x1xx Family User's Guide  (0) 2008.07.16
C++ Builder에서 시리얼통신을 위한 필수 컴포넌트! CPort 3.10  (0) 2008.07.15

TAG ADC, MSP430

ADC12 - ①

Study 2008.07.16 16:27 Posted by 몽백작

17.2 ADC12 동작

- ADC12 모듈은 사용자 S/W로 설정됨

17.2.1 12비트 ADC 코어
- ADC변환 범위는 VR-~VR+까지이다.
- NADC = 4095 * (Vin - VR-) / (VR+ - VR-)
- ADC12CTL0, ADC12CTL1에 의해 설정된다.
- ADC12ON 비트에 의해 활성화된다.
- ADC12는 전력 세이브를 사용하고 있으면 꺼질 수 있다.
- ADC12 제어 비트는 ENC = 0일때 수정될 수 있다. ENC는 변환이 일어나기 전에 1로 설정되어야 한다.

변환 클럭 선택
- ADC12CLK : 변환 클럭으로, 또 펄스 샘플링 모드가 선택된 경우, 샘플링 주기를 생성하기 위해 사용
- ADC12 소스 클럭은 ADC12SSELx 비트를 사용해 선택되고, ADC12DIVx 비트에 의해 1~8로 나눌 수 있음.
- 가능한 ADC12CLK 소스들은 SMCLK, MCLK, ACLK 그리고 내부 오실레이터인 ADC12OSC이다.
- 내부에서 생성되는 ADC12OSC는 5MHz 범위이나, 장치에 따라서, 공급전압에 따라서, 그리고 온도에 따라서 변한다.
- 사용자는 변환이 끝날때까지 ADC12CLK가 활성화된 동안 클럭이 선택되도록 하여야 한다.

17.2.2 ADC12 입력과 멀티플렉서
- 8개의 외부 그리고 4개의 내부 아날로그 시그널들은 아날로그 입력 멀티플렉서에 의해 변환하기 위한 채널로 선택
- 입력 멀티플렉서는 채널 스위칭으로부터 입력과 입력간 잡음 주입을 줄이기 위해 break-before-make 타입

아날로그 포트 선택
- ADC12입력은 P6핀(디지털 CMOS 게이트)에 멀티플렉싱됨.
- 아날로그 신호가 디지털 CMOS게이트에 인가될 때, 기생 전류가 VCC에서 GND로 흐를 수 있음.
- 기생 전류는 입력 전압이 게이트의 변환 레벨 근처일 때 발생.
- 포트 핀 버퍼의 비활성화는 기생전류의 흐름을 없애주고, 전체적인 전류 소모를 줄여줌.
- P6SELx 비트는 포트 핀 입력 / 출력 버퍼들을 비활성화 하도록 함.

7.2.3 전압 기준 생성기(Voltage Reference Generator)
- 2개의 선택가능한 전압 레벨(1.5V, 2.5V)의 빌트인 전압 기준 전압
- 기준 전압은 내부적으로, 또는 외부적으로도 VREF+핀을 통해 사용
- REFON=1로 하면 내부 기준 전압을 활성화
- REF2_5V=1이면 2.5V, 0이면 1.5V
- 레퍼런스는 사용하지 않을 때 전력 소모를 줄이기 위해 꺼질 수 있음
- 전체적인 동작을 위해 내부 전압 기준 생성기는 VREF+와 AVSS간 저장 캐패시턴스로 공급되어야 함.
- 추천하는 저장 캐피시턴스는 10uF과 0.1uF의 병렬 연결.
- 외부 기준전압은 VeREF+와 VREF-/VeREF-를 통해 공급

7.2.4 자동 파워 다운
- ADC12는 저전력 어플리케이션을 위해 디자인
- ADC12가 변환중이 아니면, 자동으로 비활성화되고, 필요할때 자동으로 재활성화됨.
- ADC12OSC도 마찬가지
- 기준전압 활성화/비활성화는 자동 아님.
- 코어, 오실레이터, 또는 기준전압이 비활성화시 전류소모 없음

17.2.5 표본 / 변환 타이밍
- ADC는 샘플 입력 신호 SHI의 상승 엣지로 초기화
- SHI의 소스는 SHSx 비트에 의해 선택되고 ADC12SC, Timer_A Output Unit1, Timer_B Output Unit 0/1 가 있음
- SHI 신호 소스의 극성은 ISSH비트에 의해 반전될 수 있음.
- SAMPCON 신호는 샘플 주기와 변환 시작을 제어.
- SAMPCON이 high일 때, 샘플 활성화
- SAMPCON이 high to low 변환시 ADC 시작 - 13 ADC12CLK 사이클 필요
- Extended sample mode / pulse mode 2개의 다른 샘플 타이밍 방법은 SHP 제어 비트에 의해 정의.

사용자 삽입 이미지
Extended sample mode
- SHP = 0으로 선택
- SHI 신호가 SAMPCON을 직접 제어 / 샘플 주기 길이(tsample) 정의
- SAMPCON이 high to low 변환은 ADC12CLK 동기화 이후 변환을 시작하게 함.


사용자 삽입 이미지
Pulse Sample Mode
- SHP=1로 선택
- SHI 신호가 샘플링 타이머를 트리거 시키는데 사용됨.
- ADC12CTL0의 SHT0x, SHT1x 비트가 샘플링 타이머의 간격 제어. SAMPCON 샘플 주기(tsample) 정의
- 샘플링 타이머는 프로그램된 tsample 간격동안 ADC12CLK와 동기화 이후 SAMPCON을 high 상태로 유지
- 총 샘플링 시간은 tsample + tsync
- SHTx 비트는 샘플링 시간을 ADC12CLK의 4의 배수로 선택
- SHT0x는 샘플링 시간을 ADC12MCTL0~7로 선택하고 SHT1x는 ADC12MCTL8~15로 선택

사용자 삽입 이미지
샘플 타이밍 고려사항
- SAMPCON=0일때, 모든 입력들은 고임피던스 상태.
- SAMPCON=1일때, 선택된 입력은 샘플링 타임(tsample)동안 RC LPF로 모델링됨
- 입력 저항 RI(최대 2kΩ)과 직렬로 연결된 CI(최대 40pF)에 있는 내부 MUX는 소스에 의해 보여짐.
- 12비트 변환 동안 CI에 걸린 VC는 VS의 1/2 LSB내로 충전되어야 함.
- 소스저항 RS와 RI는 tsample에 영향

tsample > (RS + RI) * ln(2^12) * CI + 800ns

RI와 CI를 위에 주어진 최대값으로 대입하면,
tsample > (RS + 2k) * 9.011 * 40p + 800ns

가령, RS가 10kΩ이면 tsample은 5.13us보다 커야 한다.

신고

TAG ADC, MSP430

MSP430x1xx Family User's Guide

Study 2008.07.16 15:02 Posted by 몽백작

출처 : Texas Instruments(TI)

이거 첨에 보고 안되겠다 싶어서 책을 사려고 알아봤더니 외국 원서밖에 없더군요.
MSP430 공부하시려면 반드시 필요할듯...ㅋ
신고

TAG MSP430

Nano Q Plus OS 디렉토리 분석 – [bin], [.tmp], [doc], [tools]

l  .tmp : Make하기 위해 Makefile 임시 저장 용도

l  doc : Manual 등 관련 문서

l  tools : Reserved

l  bin : 개발에 필요한 유틸리티 등

n  lxdialog.exe : 빌드 환경 설정 유틸리티의 다이얼로그 환경 프로그램인듯

n  mconf.exe : 플랫폼 선택, 사용 기능 선택 등 빌드 환경 설정. “make menuconfig”시 실행

n  motelist.exe : 현재 연결된 모트의 시리얼 포트 주소를 알아내는 유틸리티. “make motelist”시 실행

n  avrdude : MCU atmega128 사용시 사용하는 듯

n  giveio : MSP430과 관련이 있는 듯

n  mspbsl : MSP430 Bootstrap Loader.

n  mspfet : MSP430 Flash programming utility

n  src : 빌드 환경 설정, 모트 리스트 등 유틸리티 프로그램 소스

  n  uisp : ??
사용자 삽입 이미지

※ 참고로 이 글은 제 개인적인 시각으로 분석한 결과입니다. 다른 의견이나 다른 사실이 있을 경우, 댓글 달아주시면 감사하겠습니다.
Nano Q Plus 정보가 너무 부족합니다. 함께 분석하고 알아갔으면 합니다.

 

신고



 

티스토리 툴바