MCU가 탑재된 비콘 장비 개발!

미래 신규 사업 분야로 떠오른 비콘 들어보셨죠?

근거리 위치 기반 기술은 비콘!

최근 MCU가 탑재된 비콘 장비 개발이 성공되었다고 하네요~



출처: http://www.zdnet.co.kr/news/news_view.asp?artice_id=20140722140035&type=det


Makeblcok의 MebaseBoard 개봉기!!

안녕하세요~ 얼마전 MakeBlock사의 MebaseBoard를 구입하고 개봉기를 올렸는데요 ㅎㅎ


하루 빨리 무언가 해보고 싶었는데 자꾸 시간에 밀려 드디어 활용기를 올리게 되네요~

일단 활용기를 올리기전에 간단히 제품 설명을 덧붙이자면

Arduino Leonardo 호환 기종이며 기존의 아두이노 IDE로 컴파일러가 가능합니다^^

이 제품뿐만 아니라 컴파일러의 호환성이 아두이노의 특장점이죠~!

그럼 지금부터 천천히 살펴볼까요?

[Project] 빛의 양을 Segment로 출력하며, 광량에 따라 조명세기를 자동제어하는 장치
[구성] Mebaseboard, 조도센서, Segment, RGB LED (모든 센서와 제어모듈은 Mebaseboard 전용으로 사용하셔야해요)


(H/W)

조도센서


Segment


RGB LED


전체 사진입니다~

사실 하드웨어 구성은 정말 간단해요~ 모듈마다 색상이 있는데 그 색상에 맞춰 보드에 꼽아주시기만 하면 됩니다^^

(F/W)
사실 이 제품이 초보에게 교육하기 위한 목적으로 출시되었다고 합니다만....펌웨어 같은 경우는 다소 복잡한 감이 좀 있어요...

일단 기존의 아두이노 IDE를 사용하는 것은 편리하지만 Mebaseboard전용 라이브러리를 받으셔야해요~
(https://github.com/Makeblock-official/Makeblock-Library)



고럼 요러케 Me_ 로 시작하는 예제소스를 사용 할 수 있게 됩니다~! 

예제소스는 키트에 들어있는 각 모듈의 개별 동작을 위한 기본 예제소스에요~

이 예제소스를 합쳐서 새로운걸 만들어 봐야겠죠???


그래서 제가 직접 작성한 소스입니다!!

#include "Makeblock.h"
#include
#include

MeRGBLed led(PORT_3);
MeLightSensor lightSensor(PORT_6);
Me7SegmentDisplay disp(PORT_7);
int value = 0;
int bri = 0, t = 0;

void setup()
{
  // set the led quantity.
  led.setNumber(15);
  Serial.begin(9600);
}

void loop()
{
  
  value = lightSensor.read();  
  bri = 970 - value;

  led.setColorAt(0, bri, bri, bri); // parameter description: led number, red, green, blue, flash mode
  led.setColorAt(1, bri, bri, bri);
  led.setColorAt(2, bri, bri, bri);
  led.setColorAt(3, bri, bri, bri);
  disp.display(bri);
  
  led.show();
  Serial.print("value = " );                                            
  Serial.println(bri);   
  delay(100);
}

중간 중간 보면 일반 아두이노에서 사용되지 않는 함수와 명령어들이 있는걸 눈치 채실거에요~
이 함수들은 모두 Makeblock.h에 포함되어있는 함수들인데요, Makeboard사의 각 모듈 및 센서의
제품 설명에 이 함수들의 설명이 포함되어있어요^^ 사실 이 부분은 초보들에게 굉장히 번거로운 일이라는게 좀 안타깝지만...

전자회로에 대한 지식이 없어도 쉽게 할 수 있다는 것이 장점인 것은 사실이지만 소스를 합쳐 응용하는 과정은 다소 
복잡하다는게 아쉬운 부분입니다...(저만그런걸까요..ㅠ)

<구동영상>

광량에 비례하여 숫자표시를 하면서 RGB LED의 밝기가 자동으로 조절되는 동작입니다 ^^

직접 만져보면서 한가지 더 아쉬움이 남았던 것은 바로 포트입니다.
아무래도 랜케이블 모양의 포트로 8개로 제한이 되어있다보니 확장성에서 많이 불리하다는걸 느꼈습니다.

비록 제가 이번 포스팅에서 사용한 모듈은 세가지이지만
좀더 스케일이 큰 작품을 만들기엔 제한적이라는 생각이 드네요~

지금까지 두서없는 긴 글 읽어주셔서 감사합니다^^ 다음엔 좀더 획기적이고 재밌는 걸로 다시 찾아뵐게용~


[구입처] icbanq.com/shop


ARM mbed 기초 강좌 : 08. 버스 입력 (BusIn, Switch, LED 이용)


mbed 기초 강좌

ARM mbed 기초 강좌 : 08. 버스 입력 (BusIn, Switch, LED 이용)



mbed (ARM Core + Online tools + Community)

2013.01.10



 1. 버스 입력 (BusIn)


: mbed의 디지털 입력 핀을 이용한 버스 신호 입력이 가능하다. mbed NXP NPC1768 은 총 26개의 핀으로 구성되어있다. 이는 uart, sci, can, spi, i2c, AnalogIn, AnalogOut, PwmOut 등의 특수 목적으로도 이용가능하지만 범용적으로 사용자가 자유롭게 버스 입력 핀으로 사용 가능하다. 버스 입력은 전혀 다른 새로운 기능이 아니고 앞서 설명한 디지털 입력을 버스로 묶어서 사용가능하다는 것이다. 즉, 입력을 하나하나의 핀을 대상으로 하는 것이 아니고, 여러 핀을 하나의 클래스로 선언하여 사용하는 것이다.





 2. 학습내용


: 이번 강좌에서는 mbed의 버스 입력을 이용하여, Switch를 On/Off 하여 이를 디지털 입력으로서 받고, 이에 대응하도록 LED를 On/Off 하는 버스 입/출력 테스트를 해보도록 하겠다.이전 디지털 입/출력과 결과는 같지만, 각 핀에 해당하는 명령어를 썼던 이전과는 달리 소스 코드가 상당히 간결해지는 것을 확인할 수 있다.


 3. 회로도


▶ 아래의 부품을 이용하여 아래의 회로도 처럼 구성하기로 하자. 

  • 필요부품 : Switch 4개, 1K옴 저항 4개, LED 4개, 330옴 저항 4개, 여분의 배선, 브래드보드 
  • 회로도(오픈 소스 fritzing 프로그램 이용, 첨부파일 다운로드 가능)



 4. 배선도


▶ 회로의 배선도이다. 브래드보드에 아래와 같이 mbed 보드와 구성품을 배치, 배선 후 mbed를 PC에 연결하도록 하자.




 5. 프로그램 소스


▶ 버튼1을 누르면, LED1이 켜지고, 버튼2를 누르면 LED2가 켜지는 식으로 버튼 입력에 대응하도록 LED를 On/Off 하는 프로그램이다. 프로그램의 세부 설명은 소스에 기재되어 있는 설명을 참고하도록 하자. 이전 디지털 입/출력과 다른점은 신호 핀 및 출력 핀은 버스로 묶어서 사용한다는 점이다.

▶  mbed.org 컴파일러에서 직접 코딩하여, 컴파일하기를 추천한다. 아무리 간단한 코딩이라도 할 수록 늘고, 자신감도 붙기 마련이다.아래의 소스를 복사/붙여넣기도 가능하지만, 꼭 직접 코딩하고, 컴파일해보고, 결과를 눈으로 직접 보기를 강력 추천한다.

▶  mbed 소스작성, 컴파일, 업로드 방식은 "mbed 기초 강좌 : 03. mbed 소스작성, 컴파일, 업로드" 를 참고하도록 하자.


#include "mbed.h"

BusIn  buttons(p17,p18,p19,p20);// Bus In Pin
BusOut leds(p21,p22,p23,p24);   // Bus Out Pin

int main() 
{
    leds=0; // LED Init    
      
    while(1) 
    {
        leds=buttons.read(); // button[n] On/Off = led[n] Off/On
    }
}
 


 6. 사용한 라이브러리


▶ BusOut
▶ BusIn



 7. 실행 결과


▶ 실행 결과는 아래와 같다.



 참고자료


[1] mbedhttp://mbed.org
[3] mbed handbookhttp://mbed.org/handbook/BusIn


End.







ARM mbed 기초 강좌 : 07. 버스 출력 (BusOut, LED 이용)


mbed 기초 강좌

ARM mbed 기초 강좌 : 07. 버스 출력 (BusOut, LED 이용) 



mbed (ARM Core + Online tools + Community)

2013.01.10


 1. 버스 출력 (BusOut)


: mbed의 디지털 출력 핀을 이용한 버스 신호 출력이 가능하다. mbed NXP NPC1768 은 총 26개의 핀으로 구성되어
있다. 이는 uart, sci, can, spi, i2c, AnalogIn, AnalogOut, PwmOut 등의 특수 목적으로도 이용가능하지만 범용적으로
사용자가 자유롭게 버스 출력핀으로 사용 가능하다. 버스 출력은 전혀 다른 새로운 기능이 아니고 앞서 설명한 
디지털 출력을 버스로 묶어서 사용가능하다는 것이다. 즉, 출력을 하나하나의 핀을 대상으로 하는 것이 아니고, 

여러 핀을 하나의 클래스로 선언하여 사용하는 것이다.








 2. 학습내용


: 이번 강좌에서는 mbed의 버스 출력을 이용하여, 시간의 간격을 두고 LED를 On/Off 하는 버스 출력 테스트를 해보도록 하겠다. 이전 디지털 출력과 결과는 같지만, 각 핀에 해당하는 명령어를 썼던 이전과는 달리 소스 코드가 상당히 간결해지는 것을 확인할 수 있다.


 3. 회로도


▶ 아래의 부품을 이용하여 아래의 회로도 처럼 구성하기로 하자. 

  • 필요부품 : LED 4개, 330옴 저항 4개, 여분의 배선, 브래드보드 
  • 회로도(오픈 소스 fritzing 프로그램 이용, 첨부파일 다운로드 가능)

 4. 배선도


▶ 회로의 배선도이다. 브래드보드에 아래와 같이 mbed 보드와 구성품을 배치, 배선 후 mbed를 PC에 연결하도록 하자.




 5. 프로그램 소스


▶ 0.2초 간격으로 LED가 순차적으로 점멸하는 프로그램이다. 프로그램의 세부 설명은 소스에 기재되어 있는 설명을 참고하도록 하자. 

▶  mbed.org 컴파일러에서 직접 코딩하여, 컴파일하기를 추천한다. 아무리 간단한 코딩이라도 할 수록 늘고, 자신감도 붙기 마련이다.아래의 소스를 복사/붙여넣기도 가능하지만, 꼭 직접 코딩하고, 컴파일해보고, 결과를 눈으로 직접 보기를 강력 추천한다.

▶  mbed 소스작성, 컴파일, 업로드 방식은 "mbed 기초 강좌 : 03. mbed 소스작성, 컴파일, 업로드" 를 참고하도록 하자.


#include "mbed.h"

BusOut leds(p21,p22,p23,p24);   // Bus Out Pin

int main() 
{
    leds=0; // LED Init    
       
    while(1) 
    {
        for(int i=0; i<4; i++) 
        {
            leds = 1 << i;  // 0001 > 0010 > 0100 > 1000 loop
            wait(0.2);      // wait 0.2 second
        }
    }
}
 


 6. 사용한 라이브러리


▶ BusOut



 7. 실행 결과


▶ 실행 결과는 아래와 같다. 
(※ 이번 강좌에서는 스위치는 필요 없지만, 강좌가 이어지는 관계로 함께 구성되어져 있다.)




 참고자료


[1] mbedhttp://mbed.org


End.


ARM mbed 기초 강좌 : 06. 디지털 입력 (DigitalIn, LED, Switch 이용)


mbed 기초 강좌

ARM mbed 기초 강좌 : 06. 디지털 입력 (DigitalIn, LED, Switch 이용) 



mbed (ARM Core + Online tools + Community)




 1. 디지털 입력 (DigitalIn)


: mbed의 디지털 입력 핀을 이용한 디지털 신호 입력 가능하다. mbed NXP NPC1768 은 디지털 출력핀을 입력핀
으로 이용할 수 있어서, 총 26개의 핀으로 구성되어있다. 이는 uart, sci, can, spi, i2c, AnalogIn, AnalogOut, PwmOut 
등의 특수 목적으로도 이용가능하지만 범용적으로 사용자가 자유롭게 디지털 입력핀으로도 사용 가능하다.






 2. 학습내용


: 이번 강좌에서는 mbed의 디지털 입력을 이용하여, Switch를 On/Off 하여 이를 디지털 입력으로서 받고, 이에 대응하도록 LED를 On/Off 하는 디지털 입/출력 테스트를 해보도록 하겠다.


 3. 회로도


▶ 아래의 부품을 이용하여 아래의 회로도 처럼 구성하기로 하자. 

  • 필요부품 : Switch 4개, 1K옴 저항 4개, LED 4개, 330옴 저항 4개, 여분의 배선, 브래드보드 
  • 회로도(오픈 소스 fritzing 프로그램 이용, 첨부파일 다운로드 가능)



 4. 배선도


▶ 회로의 배선도이다. 브래드보드에 아래와 같이 mbed 보드와 구성품을 배치, 배선 후 mbed를 PC에 연결하도록 하자.



 5. 프로그램 소스


▶ 버튼1을 누르면, LED1이 켜지고, 버튼2를 누르면 LED2가 켜지는 식으로 버튼 입력에 대응하도록 LED를 On/Off 하는 프로그램이다. 프로그램의 세부 설명은 소스에 기재되어 있는 설명을 참고하도록 하자. 

▶  mbed.org 컴파일러에서 직접 코딩하여, 컴파일하기를 추천한다. 아무리 간단한 코딩이라도 할 수록 늘고, 자신감도 붙기 마련이다.아래의 소스를 복사/붙여넣기도 가능하지만, 꼭 직접 코딩하고, 컴파일해보고, 결과를 눈으로 직접 보기를 강력 추천한다.

▶  mbed 소스작성, 컴파일, 업로드 방식은 "mbed 기초 강좌 : 03. mbed 소스작성, 컴파일, 업로드" 를 참고하도록 하자.


#include "mbed.h"

DigitalOut led1(p21);   // Digital Out Pin
DigitalOut led2(p22);
DigitalOut led3(p23);
DigitalOut led4(p24);

DigitalIn button1(p17); // Digital In Pin
DigitalIn button2(p18);
DigitalIn button3(p19);
DigitalIn button4(p20);

int main() 
{
    button1.mode(PullUp);   // Setting Pullup Mode 
    button2.mode(PullUp);
    button3.mode(PullUp);
    button4.mode(PullUp);

    led1=0; led2=0; led3=0; led4=0; // LED Init    
      
    while(1) 
    {
        if(button1 == 0)                    // if button1 is On
        {
            led1=1; led2=0; led3=0; led4=0; // LED1 ON, other LED Off 
        }
        if(button2 == 0)                    // if button2 is On
        {
            led1=0; led2=1; led3=0; led4=0; // LED2 ON, other LED Off
        }
        if(button3 == 0)                    // if button3 is On
        {
            led1=0; led2=0; led3=1; led4=0; // LED3 ON, other LED Off
        }
        if(button4 == 0)                    // if button4 is On
        {
            led1=0; led2=0; led3=0; led4=1; // LED4 ON, other LED Off
        }
    }
}
 


 6. 사용한 라이브러리





 7. 실행 결과


▶ 실행 결과는 아래와 같다.




 참고자료


[1] mbedhttp://mbed.org


End.


ARM mbed 기초 강좌 : 05. 디지털 출력 (DigitalOut, LED 이용)


mbed 기초 강좌

ARM mbed 기초 강좌 : 05. 디지털 출력 (DigitalOut, LED 이용)



mbed (ARM Core + Online tools + Community)

2013.01.10


 1. 디지털 출력 (DigitalOut)


: mbed의 디지털 출력 핀을 이용한 디지털 신호 출력이 가능하다. mbed NXP NPC1768 은 총 26개의 핀으로 구성
되어있다. 이는 uart, sci, can, spi, i2c, AnalogIn, AnalogOut, PwmOut 등의 특수 목적으로도 이용가능하지만 
범용적으로 사용자가 자유롭게 디지털 출력핀으로도 사용 가능하다.






 2. 학습내용


: 이번 강좌에서는 mbed의 디지털 출력을 이용하여, 정해진 시간을 간격으로 LED를 On/Off 하는 디지털 출력 테스트를 해보도록 하겠다.


 3. 회로도


▶ 아래의 부품을 이용하여 아래의 회로도 처럼 구성하기로 하자. 

  • 필요부품 : LED 4개, 330옴 저항 4개, 여분의 배선, 브래드보드 
  • 회로도(오픈 소스 fritzing 프로그램 이용, 첨부파일 다운로드 가능)



 4. 배선도


▶ 회로의 배선도이다. 브래드보드에 아래와 같이 mbed 보드와 구성품을 배치, 배선 후 mbed를 PC에 연결하도록 하자.
(※ 참고로 LED는 아래 그림과 ??이 다리가 짧은 쪽이 Cathode - , 긴 쪽이 Anode + 이다. )





 5. 프로그램 소스


▶ 0.2초 간격으로 LED가 순차적으로 점멸하는 프로그램이다. 프로그램의 세부 설명은 소스에 기재되어 있는 설명을 참고하도록 하자. 

▶  mbed.org 컴파일러에서 직접 코딩하여, 컴파일하기를 추천한다. 아무리 간단한 코딩이라도 할 수록 늘고, 자신감도 붙기 마련이다.아래의 소스를 복사/붙여넣기도 가능하지만, 꼭 직접 코딩하고, 컴파일해보고, 결과를 눈으로 직접 보기를 강력 추천한다.

▶  mbed 소스작성, 컴파일, 업로드 방식은 "mbed 기초 강좌 : 03. mbed 소스작성, 컴파일, 업로드" 를 참고하도록 하자.


#include "mbed.h"

DigitalOut led1(p21);   // Digital Out Pin
DigitalOut led2(p22);
DigitalOut led3(p23);
DigitalOut led4(p24);

int main() 
{
    led1=0; led2=0; led3=0; led4=0; // LED Init    
       
    while(1) 
    {
        led1=1; led2=0; led3=0; led4=0; // LED1 ON, other LED Off
        wait(0.2);                      // wait 0.2 second
        led1=0; led2=1; led3=0; led4=0; // LED2 ON, other LED Off
        wait(0.2);
        led1=0; led2=0; led3=1; led4=0; // LED3 ON, other LED Off
        wait(0.2);
        led1=0; led2=0; led3=0; led4=1; // LED4 ON, other LED Off
        wait(0.2);
    }
}
 


 6. 사용한 라이브러리





 7. 실행 결과


▶ 실행 결과는 아래와 같다.




 참고자료


[1] mbedhttp://mbed.org


End.


ARM mbed 기초 강좌 : 04. USB 가상 시리얼 포트를 통한 통신 맛보기

mbed 기초 강좌

ARM mbed 기초 강좌 : 04. USB 가상 시리얼 포트를 통한 통신 맛보기



mbed (ARM Core + Online tools + Community)

2013.01.09


 1. 시리얼 통신 포트



mbed의 시리얼 통신 포트로는 아래의 그림과 같이 포트 9, 10, 포트 13, 14, 포트 26, 27의 3종류가 기본으로 되어 
있으며, 추가적으로 현재 PC와의 접속에 사용되는 USB의 가상 시리얼 포트까지 총 4개를 지원하고 있다. USB 가상
 시리얼 포트는 추가 구성 회로가 없으므로, PC와의 통신을 목적으로 한다면 USB 가상 시리얼 포트를 추천하고 싶다.

mbed와 PC의 통신으로 무엇을 할 수 있을까? 그 응용에는 수많은 사용 방법이 있겠지만 예를 들자면 아래와 같다.

1) mbed의 프로그램의 디버깅, 예를들어 처리중에 계산 결과값, 센서 값등을 PC 화면에 뿌리기.
2) PC로 부터 명령 받기, 예를들어 유선 조정의 경우에 PC의 화살표키로 방향 명령을 받아 로봇 움직이기.
3) PC에게 명령 주기, 예를들어 mbed에 연결된 센서 값에 따라 PC의 응용프로그램이 동작하게 만들기. 2번의 반대
 개념.
4) 가상 시리얼 통신이 아닌, 일반 시리얼 통신을 이용한다면 블루투스 장비를 달아 무선으로 통신하기.

등등 많은 응용이 있을 수 있다.





 2. PC와 통신하기 위한 준비


1) mbed USB 가상 시리얼 통신 드라이버 설치 

mbed 사이트(http://mbed.org/handbook/Windows-serial-configuration)에 접속하여 Download latest driver 의 드라이버를 다운로드하여 설치한다. 설치는 디폴드 옵션으로만 설정해도 된다.

2) 터미널 프로그램 설치

TeraTerm 테라텀이라는 터미널 프로그램을 설치한다. 테라텀의 접속 설정 및 옵션 설정은 아래와 같다.


접속 설정 : File >> New Connection... 을 선택하면 아래와 같은 접속 설정 화면이 나오고, 이중 Serial 을 선택한 후, mbed Serial Port를 선택하자.





터미널 옵션 설정 : Setup >> Terminal... 을 선택하면 아래와 같은 옵션 설정 화면이 나올 것이다. 이 중 Receive 를 LF 로 설정해주자. LF는 Line Feed 이라는 뜻으로, 16진수 아스키 코드 0x0A, 캐릭터 문자로서는 '/n' = new line 에 해당되는 데이타이다. 즉, PC가 mbed 로 부터 수신받은 데이타 중 0x0A 가 있다면, 커서를 현재 행의 다음 행으로 바꿔주는 기능을 하게된다. 참고로, CR은 Carriage Return 이라는 뜻으로, 16진수 아스키 코드 0x0D, 캐릭터 문자로서는 '/r' = return 에 해당되는 데이타이다. 기능으로는  커서를 현재 행의 맨 좌측으로 옮기기를 수행하게 된다.



참고로, mbed의 시리얼 통신은 기본적으로 9600 baud,8 bits, 1 stop bit, no parity 로 설정되어 있다. 이는 프로그램에서 수정 가능하다.

이상으로 mbed의 USB 가상 시리얼 포트로 PC와의 통신하기 위한 설정이 모두 끝났다. 다음은 직접 통신 프로그램을 작성해보고, 테스트 해보도록 하자.


 3. 통신 예제 소스 및 테스트


mbed 소스작성, 컴파일, 업로드와 관련해서는 mbed 기초 강좌 : 03. mbed 소스작성, 컴파일, 업로드 에서 설명하였기에 넘어가고, 바로 소스를 보도록 하자.

#include "mbed.h"              
 
Serial pc(USBTX, USBRX); // tx, rx
 
int main() 
{
    int i=0;
    
    while(1)
    {
        pc.printf("Hello World![%d]\n",i++);
        
        if(i>99) i=0;
    }
}

간단히 테스트 목적으로 터미널창에 "Hello World![%d]\n" 를 뿌리도록 했다. %d 는 i 를 나태내며, 이 i 는 0부터 99까지 반복하게 된다. 그리고 \n 는 앞서 설명한것과 같이 터미널창에서 새로운 라인으로 옮기기 위해서 붙여줬다.

이렇게 작성한 프로그램을 컴파일 하고, 실행 파일을 다운로드 받아  mbed USB 드라이버에 옮겨주자. 그리고 PC에는 미리 설정해준 터미널 프로그램인 테라텀을 실행해두고, mbed의 리셋 스위치를 누르면 아래와 화면과 같이 출력되어 표시됨을 확인 할 수 있을 것이다.




이대로 끝나면 조금 아쉬운 느낌이 있어서 한가지 더 해보도록 하자. 좀 전의 테스트는 mbed -> PC 라는 단방향 통신만 하였기에 이번에는 mbed <-> PC 양방향으로 해보도록 하자. 소스는 아래와 같으며, 처음에 조작 메뉴를 PC로 보내게 되며, PC의 1번 숫자키를 누르면 mbed의 첫번재 LED가 켜지고, 2번 숫자키를 누르면 두번째 LED가 켜지는 프로그램이다. 같은 방법으로 3번, 4번 숫자기도 마찬가지이며, 0번 숫자키를 누르면 모든 LED 가 꺼지는 프로그램이다. 아무리 쉬운 예제라고는 해도 눈으로 보면 소용없으니 꼭 테스트 해보기 바란다. (※ 버튼을 누를때는 테라텀이 활성화 되어 있고, 테라텀 터미널 창에서 눌러야 한다.)

#include "mbed.h"
 
Serial pc(USBTX, USBRX); // tx, rx
PwmOut led1(LED1);
PwmOut led2(LED2);
PwmOut led3(LED3);
PwmOut led4(LED4);

int main() 
{
    pc.printf("Press '1' On LED1\n");
    pc.printf("Press '2' On LED2\n");
    pc.printf("Press '3' On LED3\n");
    pc.printf("Press '4' On LED4\n"); 
    pc.printf("Press '0' Off All LED\n"); 
        
    while(1) 
    {
        char c = pc.getc();
        
        if(== '1') led1 = 1;
        if(== '2') led2 = 1;
        if(== '3') led3 = 1;
        if(== '4') led4 = 1; 
        if(== '0') 
        {
            led1 = 0;
            led2 = 0;
            led3 = 0;
            led4 = 0;
        }
    }
}


터미널 창은 아래와 같은 조작 메뉴가 표시된다.




 참고자료

[1] mbed handbookhttp://mbed.org/handbook/SerialPC


End.


ARM mbed 기초 강좌 : 03. mbed 소스작성, 컴파일, 업로드


mbed 기초 강좌

ARM mbed 기초 강좌 : 03. mbed 소스작성, 컴파일, 업로드



mbed (ARM Core + Online tools + Community)




 1. 온라인에서 소스 작성



이전 강좌에서는 컴파일된 파일을 실행하는 것만 했었지만, 이번에는 직접 프로젝트를 생성하고, 프로그램을 작성해 
보도록 하겠다.

1) mbed를 usb 케이블을 이용하여 컴퓨터에 연결시키고, mbed.org 페이지에 접속 하도록 하자. 아래의 화면이 나올 
것이다. (로그인 필요) 그 다음, 우측 상단의 Compiler를 클릭하도록 하자.





2) 컴파일 버튼을 누르면 아래와 같이 온라인 개발 환경이 구축된다. 
(개발 환경 구축으로 시간 소비 다하던 시절은 저 멀리 안드로이메다로 가 버린듯한 이 기분은 무엇인고) 






3) 왼쪽 상단 하면의 New 를 클릭하고, 프로젝트 명을 입력한다. 테스트로 해보는 작업이기에 "test" 라고

 입력해주자. 그러면 아래와 그림과 같이 기본적인 예제 main.cpp를 생성된다. 이 파일이 이전 강좌에서 

구동 테스트로 사용했던 "HelloWorld.bin"의 소스 인듯 싶다.





4) 그대로 사용하면 컴파일을 해보는 의미가 없으므로, 소스를 아래와 같이 살짝 수정해 보도록 하자. 

이는 첫번째 LED와 세번째 LED가 시간 간격을 두고 동시에 꺼졌다. 켜졌다를 반복하는 소스이다.

#include "mbed.h"

DigitalOut myled1(LED1);
DigitalOut myled2(LED3);

int main() {
    while(1) {
        myled1 = 1;
        myled2 = 1;
        wait(0.2);
        myled1 = 0;
        myled2 = 0;
        wait(0.2);
    }
}







 2. 온라인에서 컴파일



1) 이제는 컴파일 단계. 소스 수정이 끝났으면 화면 중앙 상단의 Compile 버튼을 눌러, 컴파일 하도록 하자. 워낙 내용이 없는 소스인지라 순식간에 컴파일이 완료 될것이다. 그리고 컴파일 종료와 함께 실행 파일을 자동으로 다운로드 받게 된다. 






 3. 실행 파일 업로드 및 실행


1) 다운로드 받은 "xxx_LPC1768.bin" 파일을 mbed 드라이브에 업로드(옮기도록) 하자.



 (※ 웹브라우저 다운로드 폴드 -> mbed 드라이브)




2) 그리고 마지막으로 실행 단계, 중앙 리셋 버튼을 클릭하게 되면, 아래의 화면과 같이 시간 간격을 두고 LED1과 LED3이 함께 점멸을 반복하는 것을 볼 수 있을것이다.




 참고자료


[1] mbedhttp://mbed.org


End.







ARM mbed 기초 강좌 : 02. mbed 구입, 유저등록, 기본테스트

mbed 기초 강좌

ARM mbed 기초 강좌 : 02. mbed 구입, 유저등록, 기본테스트



mbed (ARM Core + Online tools + Community)




 1. mbed 구입



mbed 공식 사이트에 의하면 많은 부품 공급 업체에서 mbed 두 종류의 보드, mbed NXP LPC1768와 mbed NXP 
LPC11U24 을 공급하고 있다고 한다 (http://mbed.org/handbook/Order). 하지만 국내에는 아직 mbed가 널리 알려지지 
않아 그 사용도가 적다는 이유로 국내 대리점에서 공식 취급하는 업체는 없다. 그래도 국내의 ICbank, 메카솔루션
에서 판매를 하고 있고, 디지키(Digi-key)에서도 판매하고 있으니 이를 이용하도록 하자. 


  • ICbank 쇼핑몰 = 76,870 원 (부가세 별도)
  • 메카솔루션 = 66,000 원 (부가세 포함가)
  • Digi-key = 74,650 원
  • AVR 몰 = 88,000 원(부가세 포함가)
  • 엘레파츠 = 86,010 원 (부가세 별도)


※ 2013년 1월 30일, 현재 가격, 부과세, 배송비 등의 기준이 다를 수 있으니 직접 확인 바람

제품명은 mbed LRC1768 Development Board 혹은 mbed NXP LPC1768 등으로 불리우고 있으며, 가격은 59달러로 
판매되고 있다.

 

 

 
제품 구성은 위와 같이 되어 있으며, 제일 중요한 것은 왼쪽 하단 부분에 있는 보드 본체의 USB 연결 케이블이다. 
이 두 개 제품의 구성으로 매우 심플한(?) 구성이다.

 



 2. mbed 유저 등록


자 다음은, mbed.org 에 제품을 등록하는 것이다. mbed.org 사이트는 mbed 사용자를 위한 컴파일러 기능 제공 및 커뮤니티, 라이브러리 공개 장소로서 이용된다. 이를 이용하기 위해서는 제품 구입후 인터넷에 연결하여 등록할 필요가 있다.

1) 우선, mbed 에 usb 케이블을 연결한 후, 컴퓨터에 usb 케이블을 연결한다. 전원 LED에 파란색 불이 들어온 것을 확인 할 수 있다.




2) 아래와 같이 USB 드라이버로 인식되면서, MBED.HTM 파일을 볼 수 있을 것이다.



 


3) MBED.HTM 파일을 클릭하면, 웹브라우저를 통해 자동으로 mbed.org 에 접속하게 된다. 오른쪽 Signup 버튼을 클릭하고, 이어서 나오는 화면의 오른쪽 버튼을 클릭하자.




4) 다음 화면에서 자신의 보드의 시리얼 키를 볼 수 있으며, 왼쪽 Signup 부분을 작성한 후 회원 등록을 하도록 하자!




5) 환영 메세지와 함께 아래와 같은 화면이 제공될 것이다. 이제 회원 가입이 끝났으니, 오른쪽 상단의 My Dashboard 메뉴로 들어가 보자.




6) My Dashboard 화면을 보면 자신의 정보가 나오는데, 처음에는 아무런 정보가 등록 되어 있지 않으니, 가운데 Edit my profile 을 눌러, 자신의 정보를 입력하자(생략가능). 이것으로 유저 등록은 완료하였다.





 3. mbed 기본 테스트



1) 그 다음으로, 구입한 mbed가 제대로 작동하는지 간단한 LED 테스트를 해보도록 하자. 위의 My Dashboard 페이지의 오른쪽 하단의 칩그림과 함께 "mbed NXP LPC1768" 이라는 링크가 있다. 클릭하자. 그러면 아래와 같은 화면이 나오고 간단한 튜토리얼이 제공된다. 이중 화면 가운데의 "HelloWorld.bin" 을 클릭하여 테스트 프로그램의 바이너리 파일을 다운로드 받자.



2) 다운로드 받은 "HelloWorldLPC1768.bin" 파을 mbed 드라이브으로 옮기자. 그러면 아래와 같은 그림이 될 것이다. 참고로 아래와 같이 mbed 드라이브에는 MBED.HTM 파일과 mbed 실행을 위한 *.bin 의 바이너리 파일이 존재하는데 모든 파일을 삭제해도 다음번의 기동때 MBED.HTM 파일은 자동 생성된다는 점을 알아두자.




3) mbed에 파일을 업로드 한 후, 보드의 가운데 버튼을 클릭하게 되면 프로그램이 실행된다. 이번 "HelloWorldLPC1768.bin" 파일은 보드 왼쪽 하단의 LED1 이 시간 간격을 두고 깜빡 깜빡이는 것이다.




위 과정을 거치는 ?@막?구입 후, mbed.org 에 유저 등록, 간단한 동작 테스트가 끝났다. 자~ 다음에는 간단하게 프로그램을 짜서 컴파일해보고 실행파일을 업로드 해보는 것을 해보도록 하자.



ARM mbed 기초 강좌 : 01. mbed 소개


mbed 기초 강좌

ARM mbed 기초 강좌 : 01. mbed 소개



mbed (ARM Core + Online tools + Community)




 1. mbed 란?


mbed 마이크로콘트롤러는 온라인 프로그래밍 툴로 개발가능한 특징을 무기로 전원 및 usb 메모리 기능 등을 갖춘 
원보드 형태의  마이크로콘트롤러이다. mbed의 어원은 여러가지 설이 있지만 들리는 바에 의하면 embedded 에서 
나온 단어라고 한다. mbed "엠베드"라고 불리우고 있으며, 2005년 개발이후 많은 유저들에게 사랑받고 있다.

제조사는 NXP (Next eXPerience) Semiconductors 사에서 개발한 보드이며, 코어칩으로는 ARM Cortex M3 core, 
96 MHz,메모리는 512 KB flash, 64 KB RAM 이며, Ethernet, USB Device, CAN, SPI, I²C, I/O 를 포함한 다양한 
인터페이스를 갖추고 있다.

2005년, ARM 엔지니어 둘이서 마이크로 콘트롤러를 배우는 학생들에게 도움이 되고자 개발한 것이 바로 mbed이다. 
ARM 코어를 장착하고 있으면서, 사용하기 편하고, 첫 개발단계에는 회로를 모르더라도 구동할 수 있도록 전원회로,
 통신회로 등의 회로등을 갖추도록 하였다. 현재는 고속의 NXP LPC1768 (Cortex-M3 core) 버전과 저전력의 
NXP LPC11U24 (Cortex-M0 core) 두개의 제품을 중심으로 그 영향력을 넓히고 있다.

가장 큰 장점으로는, 온라인 개발툴이다. 먼저, 보드를 usb를 통해 컴퓨터에 접속한다. 그 후, 각종 OS와 상관없이 
웹 브라우저를 통해 mbed.org 에 접속하는 것으로 프로그래밍 및 컴파일이 가능하며, 컴파일한 파일은 별도의 
다운로드 장비없이 usb 메모리에 데이타를 옮기듯이 붙여넣기 하면 된다. 이러한, 유저의 편의성을 극대화한
mbed는 EDN Innovation Awards 의 Software/Embedded Tools 부문에서 상을 받기도 했다.

또한, 이러한 온라인 개발툴은 소스관리, 소스 공개, wiki 등을 갖춘 온라인 커뮤니티를 구성하고 있어서, 각종 응용 
예제 및 오픈 된 소스를 받아서 사용해 볼 수 있다. 또한, mbed 를 이용한 응용 개발이 줄을 잇고 있어서 미래에 어떤 
제품이 될지 더욱 궁금해 지게 만드는 제품이라고 볼 수 있다.




 

 2. mbed 의 특징!


mbed의 특징은 정말 몇 번을 강조해도 부족한되요! 다시 한번 정리 해보록 하겠습니다.

▶ mbed 특징

1. 웹브라우저를 통한 온라인 컴파일 및 소스 버전 관리 기능
: 윈도우, 리눅스, 맥 등 OS를 가리지 않고, 어떤 OS에서든 웹브라우저에서 온라인으로 컴파일이 가능하다. 또한, 프로그램 굽기는 별도 장비없이 USB에 연결만 하면 가능하도록 되어 있다. mcu 개발 하시는 분, 공부 하시는 분들이 많으신데 어둠에 길에서 얻으신 개발툴보다는 이런 공개 프로그램은 어떨까 제안 드립니다. 또한, 소스 버전 관리 기능인 VC 기능을 탑재하고 있어서 소스 커미트 및 리버전 등을 쉽게 할 수 있도록 되어 있다.

2. 커뮤니티를 통한 라이브러리 공개 및 방대한 개인 위키 페이지
: 온라인 컴파일을 제공하는 http://mbed.org/ 사이트는 온라인 컴파일만을 제공하는 것이 아니라, 각종 커뮤니티 및 라이브러리 공개 장소로 이용된다. 커뮤니티에서는 개인이 작성한 각종 방대한 개인 위키 페이지가 존재하여, 공개된 소스를 다운로드 받아서 쉽게 따라해 볼 수 있다. 무엇보다, 모든 유저가 기본적으로 같은 하드웨어를 이용하고 있기에 확장 보드가 아닌 이상 바로 적용 가능하다.

3. 고성능 32비트 ARM코어와 다양한 기능
: 기본적으로 최근 마이크로콘트롤러 분야에서 큰 인기를 얻고 있는 고성능 32비트 ARM Cortex M3 코어를 장착하고 있고, E thernet, USBHost ,USBDevice, SPI, I2C, CAN, AnalogIn, PwmOut, AnalogOut) 등 다양한 기능을 갖추고 있기에 별도로 추가해야할 회로등이 적어 여러 응용 개발에 손쉽게 사용할 수 있게 되어 있다.

▶ 장점은 알겠는데 단점은 없나?

1. 고가격?
: 문제는 가격! $59 달러, 우리 나라가격으로 대략 7만원대 후반이라는 것이다. 조금 비싼 가격이 문제이긴 하다. 그러나 좀더 생각해 보면, 8비트 MCU라서 비교하긴 적당하지 않지만 MCU에서 많이 사용하는 ATmega128의 경우, 칩을 사는 경우가 아닌 개발용 보드로 살 경우 20000원 상당 + 프로그래밍을 위한 ISP 30000원 상당, 그리고 기타 주변 회로등을 추가로 달아야 하거나, 상용 프로그래밍 소프트웨어 비용까지 합한 다면 mbed의 $59달러 라는 가격은 싸게 느껴 질 것이다.

2. 디버깅?
: 소스의 스텝별 실행 및 실행시마다 바뀌는 내부 레지스터, 변수 등의 디버깅은 현재 온라인 개발툴에서 제공되지 않는다. 이것은 상당한 단점으로 좀 더 복잡한 프로젝트를 진행할때는 아쉬운 부분이다. 그래서 이전까지는 보드에 장착되어 있는 4개의 LED 및 가상 시리얼 통신으로 디버깅을 대신해왔다. 그러나, 유저들의 요구는 점점 커진것. 그래서 mbed에서는 디버깅을 위해 CMSIS-DAP USB 디버깅을 내놓았다. 이는 오프라인 디버깅툴인 Keil MDK v4.60 을 다운받아서 기존의 소스의 스텝별 실행 및 실행시마다 바뀌는 내부 레지스터, 변수 등의 디버깅을 할 수 있게 된것이다. Keil MDK가 유료이긴하지만, 32kb 까지는 무료로 사용할 수 있다. 또, 내부적인 소식으로는 이를 온라인에서 해결하기 위한 시도도 하고 있다니 더욱 기대해볼 만 하다고 생각된다.