임베디드 강좌 3 부록 - 대표적인 embedded 용 MCU 개요

임베디드 강좌 3 부록 - 대표적인 embedded 용 MCU 개요

 

본글은 http://blog.naver.com/jimypage 에서도 볼 수 있습니다.

 

[본 컨텐츠는 ICbanQ (아이씨뱅큐)에서 진행하는 파워블로거 활동의 일환으로, 

 

아이씨뱅큐의 지원을 받아 작성되었습니다]

 

icbanq 의 홈페이지에 가 보시면 MCU 카테고리에 많은 종류의 MCU들이 존재 하는것을 알 수 

 

있습니다.

 

이번회에는 대표적인 embedded용 MCU인 atmel의 AVR시리즈와 microchip의 PIC시리즈중에서 

 

가장 일반적인(또는 일반적 이었던) 제조사의 과거 베스트셀러 MCU에 대해서 알아 보겠습니다. 

 

그리고 다음회에는 좀더 나가서 ARM코어 제품군에 대해서 알아 보도록 하겠습니다.

 

이번에 살펴볼 것은 atmel 의 AVR 시리즈중 AT90S2313과 

 

microhip의 PIC 시리즈중 pic16f84a 입니다.

 

둘다 현역에서 은퇴한 MCU 이지만 90년대에 널리쓰인 베스트 셀러 칩입니다.

 

(사실 은퇴라고하기에는 조금 애매 합니다.


아직 판매가 되는 MCU이지만 현재는 가격대비 성능이 더 좋은 제품들이 많이 나와있기 때문에


실제 현업에서는 많이 쓰이고 있지 않는다 정도로 이해 해 주시면 좋겠습니다.) 

 

즉 가장 범용적으로 쓰일 수 있다는 점에서 베스트 셀러 였구요. 그래서 간략하게 알아보겠습니다.

 


 

(그림 icbanq 의 MCU 카테고리 항목들)

 

위의 그림에서 보시면 많은 카테고리의 MCU들이 있다는 것을 알 수 있습니다. 

 

각 제조사마다 개발 방법은 거의 동일하기 때문에 일반적인 임베디드 개발을 할 경우에는 

 

먼저 목적, 기능에대한 검토를 한후 어떤 기능이 꼭 필요한지, 어떤 기능이 향후에 필요 할 수 있는지

 

IO 핀은 최소 몇개 정도가 있어야 하는지, 클럭은 어느정도로 동작해야 하는지를 결정하고, 

 

이후에 칩 선정을 하고 펌웨어 프로그램을 작성하게 됩니다. 

 

각 제조사마다 거의 비슷한 기능을 하는 칩들이 다수 존재하기 때문에 일반적으로 

 

AVR에 익숙한 사람들은 AVR을 PIC에 익숙한 사람들은 PIC을 사용합니다. 

 

물론 이 두 제조사의 MCU조차도 해당하는 기능이 없는경우 

 

TI, freescale(motorola 에서 이름을 바꾼 회사 입니다.)등 제3의 MCU를 알아본다던가 

 

그마저도 여의치 않은 경우에는 원하는 기능이 있는 다른 MCU 를 추가하거나, 

 

아니면 제어용 IC, CPLD, FPGA등을 추가하게 됩니다.

 

그렇지만 대개는 위 두 회사의 제품군이 다양하기 때문에 다른 MCU를 추가할 필요없는 경우가 

 

많습니다.

 

 

 

아무튼 atmel과 microchip의 대표적인 제품인 at90s2313과 pic16f84a는 그 보편성 때문에 

 

트레이닝 보드에서도 많이 사용되었을 뿐 아니라, 

 

취미용 제품에서 상용제품까지 (아마도) 가장 많이 제조되고 팔렸을 겁니다.

 

 

 

먼저 각 제품의 스펙문서에 나온 개략적인 기능설명을 보겠습니다.

 

첫번째로 atmel의 AT90S2313 입니다.

 

 

 

(AT90S2313 개요문서)

 

 

그리고 다음은 microchip 의 pic16f84a 입니다.

 

 

(pic16f84a 개요문서)

 

 

위의 두 문서를 보시면 몇몇 기능을 제외하고는 거의 차이가 없다는 것을 알 수 있습니다.

 

먼저 공통점을 살펴 보자면 

 

1. high performance RISC 칩이라는군요. -> 소형화를 위해 명령세트를 줄인 CPU 입니다.

 

2. 8비트 타이머 및 그 인터럽트가 존재합니다.

 

3. 20핀 DIP 패키지로 자작 기판에서도 손쉽게 사용할 수 있습니다.

 

4. 프로그램을 FLASH 메모리에 저장합니다.

 

5. 수십, 수백의 작업용 데이터 메모리가 존재합니다.

 

6. 비휘발성 메모리로서 EEPROM이 존재합니다. 

 

7. 시리얼 방식으로 프로그램 메모리에 기입합니다.

 

 

이번에는 차이점을 살펴보겠습니다.

 

AVR은 UART가 존재합니다.

 

AVR은 16비트 카운터가 존재합니다.

 

AVR은 analog comparator가 있습니다.

 

PIC은 가격이 저렴합니다.

 

 

먼저 AVR은 명령어가 118개나 되어서 powerful 하다고 합니다. 

 

그러나 PIC은 명령이 오직 35개밖에 안되어서 배우기 쉽다고 합니다.

 

그러나 AVR은 머신코드가 겹치는 명령을 따로 나누어 놓았기 때문에 실제 명령어 수는 

 

저것보다 적습니다. 그것을 고려하면 명령어수도 좀더 비슷해 집니다.

 

 

또한 AVR은 기본 4Mhz 모델이지만 PIC은 20Mhz까지 가능하다고 합니다. 

 

그러나 AVR은 1클럭에 1명령이 실행됨에 반해서(정확히 1클럭 1명령은 아닙니다) 

 

PIC은 4클럭에 1명령이 실행되므로 속도가 1/4 입니다. 

 

이마저도 비슷해 졌네요.

 

 

PIC은 점프명령을 제외한 모든 명령이 4 클럭에 실행되는 반면 

 

AVR 은 명령의 클럭수가 일정치 않습니다. 따라서 정확한 타이밍이 요구되는 분야에서는 

 

PIC이 좀더 유리합니다.

 

 

 

이렇게 놓고보니 두 칩은 명령어 세트는 다르지만 성능은 거의 비슷한 것 같이 보입니다. 

 

따라서 선호하는 제조사의 하드웨어를 먼저 공부하고 나중에 다른것을 

 

공부하더라도 상관이 없습니다.

 

요즈음은 아두이노등 플랫폼이 많이 쓰이기 때문에 

 

상대적으로 AVR을 잘 알아두면 나중에 아두이노 프로그래밍에도 

 

사용할수 있어서 유리합니다.

 

 

각 MCU를 자세해 살펴보려면 다음의 링크를 참조해 주세요.

 

AT90S2313

 

http://blog.daum.net/unininu/7165272

 

 

PIC16F84A

 

http://www.ktechno.co.kr/pictech/picframe.html

 

 

 

감사합니다.

 

[본 컨텐츠는 ICbanQ (아이씨뱅큐)에서 진행하는 파워블로거 활동의 일환으로, 

 

아이씨뱅큐의 지원을 받아 작성되었습니다]

 

이번에는 각 제조사의 과거 플래그십 MCU를 살펴보았습니다. 

 

다음번에는 임베디드의 새로운 트렌드인 ARM칩에 관해서 알아보겠습니다.

 

 

 

관련 사이트

 

http://blog.daum.net/unininu/7165272


 

 

관련 제품

 

http://www.icbanq.com/P000088835/S

 

http://www.icbanq.com/P001625842/S


[아이씨뱅큐 ICbanQ 파워블로거 2기] 임베디드 기초 3 - 임베디드 MCU개요

안녕하세요. 고명호입니다.

 

임베디드 MCU 개요에 대한 설명을 드리겠습니다.

 

 

본글은 http://blog.naver.com/jimypage 에서도 볼 수 있습니다.

 

 

[본 컨텐츠는 ICbanQ (아이씨뱅큐)에서 진행하는 파워블로거 활동의 일환으로, 

 

아이씨뱅큐의 지원을 받아 작성되었습니다]

 

이제부터는 본격적인 임베디드 시스템에 대해서 알아보는 것입니다.

 

임베디드란 특수 목적으로 설계된 하드웨어및 이 하드웨어를 제어하는 소프트웨어를 통합하여 

 

지칭하는 말입니다.

 

임베디드의 반대 개념으로는 일반적인 범용 운영체제 시스템을 들 수 있습니다.

 

범용운영체제 (윈도우, 리눅스, OSX)의 경우 하드웨어의 변경없이도 실행시키는 

 

소프트웨어에 따라 다양한 작업을 수행할 수 있습니다.

 

즉 운영체제라는 기본 서비스 환경하에서 임의의 작업들이 수행됩니다. 이에반해 

 

임베디드 시스템의 경우에는 목적이 먼저 선택된후 

 

이 목적을 위해서 하드웨어와 소프트웨어가 개발됩니다. 

 

따라서 특정 목적에 부합하는 하드웨어(MPU및 주변장치)가 먼저 선정되고, 

 

이 하드웨어에 필요한 소프트웨어를 개발하여 최종 결과물을 생성하게 됩니다.

 

일반 범용 운영체제와는 달리 매우 단순한 작업에서부터 아주 복잡한 작업에 이르기까지 

 

그 분야가 상당히 넓으며, 따라서 MPU및 주변장치도 특정 목적및 기능에 부합하도록 

 

다양한 가격대, 다양한 제조사의 다양한 종류가 있는것이 특징입니다.

 

 

예전 가전제품등 전자기기의 경우 비교적 단순한 작업만을 수행하기 때문에 

 

MCU(Micro Controller Unit)가 필요없는 경우가 많았습니다. 

 

MCU가 필요없는 경우라 함은 임베디드 제어 프로그래밍도 필요없다는 말입니다.

 

 

 

예를 들어보겠습니다.

 

지난번 LED 강좌에서 설명드린 세그먼트 LED를 이용해서 전자 시계를 만들었다고 가정해 봅시다.

 

전자시계가 하는 일은 단지 시간을 표시해 주는 것입니다.

 

이러한 단순한 작업은 MCU의 가능에 의존하지 않고 일반적인 논리 소자의 조합으로 

 

얼마든지 구현할 수 있습니다.

 

이런 경우에는 회로의 설계및 완성이 제품의 완성으로 이어지며 제어용 프로그램은 

 

필요하지 않습니다.

 


(TTL을 이용한 clock 회로도 그림)


(회로도상에서 CPU,MCU는 보이지 않습니다. 

단지 논리 소자의 조합으로 시계의 역할을 수행합니다)

 

 

그렇지만 특정작업을 수행하는데 제조사의 요구가 다양해 진다거나

 

(예를 들어서 위의 시계에 알람기능이 추가 되는 경우) 

 

아니면 다양한 모델을 개발해야 하는 경우 단순 논리 소자의 결합만으로는 그 일을 할 수 없습니다. 

 

왜냐하면 간단한 기능을 추가하는데에도 회로설계를 다시하고, 기판설계를 다시하고, 

 

기판 제조를 다시하고, 테스트를 다시 수행해야 하기 때문입니다. 

 

즉 특정부분의 사양 변화에 소요되는 시간및 비용이 만만치 않다는 것이 문제가 된 것 이었습니다.

 

결국은 범용성이 있는 다양한 기능을 수행할 수있는 중앙 연산장치의 필요성이 증가하였고 

 

이것이 CPU가 탄생된 계기가 되었습니다.

 

 

실제로 최초의 CPU라고 알려져 있는 intel사의 4004라는 4bit CPU 모델의 경우 

 

일본 비지콤이라는 회사의 '계산기'에 쓰일 목적으로 처음 개발이 되었습니다.

 

 

(인텔 4004 CPU 그림)

 

그렇지만 CPU를 제조하고 보니 단순히 덧셈 곱셈등의 계산기능만을 위한 것이 아닌 

 

그 이상의 다양한 기능을 할 수 있다는 가능성이 발견되었고 

 

점차 더욱 빠르고 강력한 기능을 가진 CPU가 개발되어 오늘날에 이르게 되었습니다.

 

인텔은 이후 8bit CPU인 8080을 개발하였고 이 8080 cpu는 8bit CPU에서 대박을 친 Z80시리즈의

 

원조가 되었습니다. 7,80년대의 8bit CPU보다 향상된 16bit, 32 bit CPU가 개발및 사용 되었으며 

 

최근에는(2010년 이후) 32bit cpu의 한계를 넘는 64bit CPU가 개발되어 개인용 컴퓨터에 

 

쓰이고 있습니다.

 

이렇게 인텔, AMD로 대표되는 데스크탑 컴퓨터의 CPU가 발전을 하는동안 

 

또다른 종류의 CPU의 필요성이 대두 되었습니다.

 

일반 CPU의 성능이 비약적으로 발전했으나 이정도의 고 성능이 필요하지 않은 

 

단순한 제어를 위한 CPU의 필요성이 증가된 것이었습니다.

 

 

물론 단순한 제어를 위한 용도의 CPU는 데스크탑 CPU의 원조격인 구형 z80 등 8bit의 

 

일반 CPU 등을 이용할 수도 있습니다. 

 

그렇지만 일반 CPU의 경우에는 데이터 버스, 어드레스버스등이 외부에 노출되어 있어서 

 

메모리장치에는 직접 연결이 가능하나 메모리 이외의 시리얼 단자라든가 병렬포트등의 

 

기타 주변장치와 연결을 하기 위해서는 어드레스 디코더및 특정 IO 기능을 담당하는 

 

주변 IC 칩이 필요해 집니다. 

 

(예를 들자면 Z80이라는 8비트 CPU의 경우 주변장치와 병렬 통신을 하기 위해서는 

 

Z80 SIO라는 특정한 반도체가 필요합니다. 

 

또한 마찬가지로 Z80 CPU 에서 병렬 통신을 위해서는 8255등 주변 IC가 필요합니다.)

 

 

그렇지만 소형, 단순한 장치를 개발하는 경우 위와같은 주변칩이 필요하다는 것은 

 

비용및 개발기간 상승의 원인이 됩니다

 

따라서 80년대 초반이후 기존 CPU와 IO를 담당하는 주변 기기의 기능을 하나로 합친 

 

CPU들이 생산되게 되었습니다.

 

이러한 CPU를 특별히 MCU라 부릅니다(micro controller unit)

 

이때의 MCU의 의미는 기존의 CPU에 제어용의 유닛(controller unit)이 내장되었다 하여 

 

그렇게 이름붙여지게 되었습니다.

 

- 결국 기존 8bit CPU 제조사는 (대표적인 기업은 z80을 생산하던 zilog) 새로운 변화에 


대응하지 못하여 성능에서는 인텔 8086시리즈에 밀리고, 


가격에서는 MCU 칩제조사에 밀려 근근히 명맥만을 유지하는 상태가 되었습니다.-

 

이 시기의 MCU중 대표적인 기업이 (아두이노 시리즈로 유명한) ATMEL, motorola, 

 

그리고 microchip, TI 등이 있습니다.

 

기존의 CPU는 메모리영역이 데이터영역과 코드영역의 접근방식이 동일한 폰 노이만 구조를 

 

많이 사용합니다.

 

그러나 MCU는 기존의 CPU와는 달리 RISC구조, 하버드 아키텍쳐를 가지는 것들이 대부분입니다.

 

 

소형화, 경량화를 위해서 명령어 세트를 단순화한 RISC방식을 채택하고 있으며, 

 

메모리 버스자체가 외부에 노출되어 있지 않기 때문에 

 

항상 고유한 주소를 가지고 코드영역에 접근해야 할 필요성도 없습니다. 

 

따라서 코드메모리, 데이터 메모리와 IO 영역이 분리된 형태의 버스 구조(하버드 아키텍쳐)를 

 

채택하고 있습니다.

 

데스크탑 CPU와는 다르게 목적에 따라 다 품종이 생산이 되며 

 

다양한 가격대의 다양한 기능을 지닌 MCU들이 생산이 되기 때문에, 

 

가격과 목적에 맞는 MCU를 선택할수 있는 선택의 폭이 매우 넓습니다.

 

 

오늘날은 몇몇 제조사들만이 임베디드 MCU를 생산합니다.

 

살아남은 MCU 들은 ATMEL 의 AVR 시리즈, intel 의 8051 시리즈, microchip 의 PIC 시리즈, 

 

TI 의 MSP시리즈등이 있습니다. 

 

모토롤라의 MC68시리즈는 90년대까지 쓰이다가 현재는 잘 안쓰이고 있습니다.

 

 

위의 MCU들을 제조하는 제조사는 자사의 고유한 MCU구조와 명령어 세트를 가지고 있는데 

 

각 제조사 마다 명령어 세트는 거의 동일하며 

 

상위기종으로 갈수록 명령어가 더 추가되는 정도의 변화만 있습니다.

 

위의 시리즈는 대개 8bit CPU들이나 최근에는 임베디드 기기도 고성능이 필요한 경우가 

 

종종 있기 때문에  각 제조사들은 32bit 코어를 라이선스 하여 

 

전혀 다른 명령어 세트를 가진 고성능의 MCU도 생산하고 있는 추세입니다.

 

(microchip 은 MIPS core를 , ATMEL 은 ARM core 를 라이선스하여 제조하고 있습니다.)

 

 

 

임베디드 프로그래밍이란 예전에는 각 제조사에 맞는 어셈블리 언어를 이용하여 

 

프로그래밍 하는 능력을 의미했습니다.

 

그렇지만 최근에는 MCU 성능의 비약적인 발전및 그에 따른 C 컴파일러의 보급으로 

 

하드웨어적인 코드, 데이터 메모리제약이 거의 없습니다. 

 

(부족한 경우에는 더 상위의 칩을 쓰면 됩니다.) 

 

따라서 최근의 임베디드 프로그래밍은 각 MCU의 하드웨어의 특성을 이해하며 

 

C 언어로 프로그래밍을 하는 능력을 의미하게 되었습니다.

 

 

 

저는 임베디드용의 MCU의 성능이 미약하던 시절부터 프로그래밍을 해 왔기 때문에 

 

각 제조사의 MCU 아키텍쳐 각각의 어셈블리 언어를 전부 이해하고 있습니다만 

 

어셈블리 언어로 작성된 프로그램의 경우 일단은 배우기 어렵고 난해하며

 

각 기종간 이식성이 거의 없다는 단점이 있습니다.

 

따라서 현재는 매우 최적화가 필요한 경우가 아니라면 범용성을 위해서 

 

임베디드 프로그래밍도 거의 C 언어를 이용하는 편입니다.

 

 

즉 예전의 임베디드 프로그래밍은 특정 제조사 MCU 어셈블리 언어를 얼마나 

 

잘 사용하는가, 그리고 하드웨어 자원을 얼마나 효율적으로 이용하는가가 중요한 문제였습니다.

 

이러한 능력은 일반적인 데스크탑 컴퓨터에서의 개발 언어를 습득하는 것 보다도 훨씬 

 

배우기 어렵고, 시간도 많이 걸리는 일이어서 임베디드 개발자들의 인원수가 

 

범용 운영체제의 개발자들보다 훨씬 적었고, 

 

따라서 연봉등으로 더 대우를 받게 된 계기가 된 것입니다.

 

 

그렇지만 최근에는 MCU 의 성능이 비약적으로 향상되어 

 

어셈블리 언어를 전혀 알지 못하고도 프로그래밍이 가능한 시대가 되었습니다. 

 

오로지 C 언어만 가지고도 원하는 작업을 수행할 수 있게되어 

 

이제는 임베디드 프로그래밍 이라고 하면 특정 제조사 MCU 하드웨어를 얼마나 잘 이해하고 있는가, 

 

그리고 얼마나 적은량의 리소스를 가지고 

 

목적에 합당한 기능을 수행하느냐의 문제(최적화 알고리듬)가 되었습니다.

 

임베디드 MCU에 대한 대략적인 이해가 되셨는지요?

 

 

 

이번회에서는 임베디드 MCU의 개략적인 개요에 대해 살펴보았습니다.

 

다음회에는 임베디드용으로 사용되는 MCU의 대표적인 칩및 제조사의 하드웨어에 대해서 

 

몇가지를 알아보고 각 제조사별 대표적인 칩의 핀맵에 대해서 간단히 살펴 보겠습니다.

 

[본 컨텐츠는 ICbanQ (아이씨뱅큐)에서 진행하는 파워블로거 활동의 일환으로, 

 

 

아이씨뱅큐의 지원을 받아 작성되었습니다]

 

 

 

관련 사이트

 

https://jawadsblog.wordpress.com/page/5/


 

 

관련 제품

 

http://www.icbanq.com/P000088835/S


 

 

평범한 폰케이스, 지겨우세요?

평범한 폰케이스가 지겨우시다면???

3D프린터로 출력한 재미난 폰케이스들을 만나보세요!

(저는 첫 번째 톱니바퀴...........)

 

블로거 분들의 선택은?! 

 

 

 

드론과 3D프린터가 만났다!

이번엔 요즘 대세 드론과 뭉쳤다!

직접 자신만의 드론을 디자인해서 3d프린터로 출력!

 

정말 멋지지않나요?

아래영상에서 확인해 보세요! :)

 

ICBANQ 3D 프린터 판매처: http://www.icbanq.com/shop/templete_list.asp?t_idx=32

 

 

 

 

유리를 이용한 3d프린터

나날이 발전하고 있는 3d프린터, 이제는 유리다!

 

몇몇의 MIT department 들이 모여 유리를 소재로 출력하는 3d프린터를 만들어냈습니다!

(그 뜨거운 걸 어떻게...신기방기!!)

한번 확인해 보세요 :)

 

 

 

 

 

ICBanQ 파워블로거 2기 - 인텔의 에디슨 펌웨어 업데이트하기

 [본 컨텐츠는 ICbanQ (아이씨뱅큐)에서 진행하는 파워블로거 활동의 일환으로, 아이씨뱅큐의 지원을 받아 작성되었습니다]

 

 

우선 인텔 에디슨을 브레이크아웃 보드에 설치한 후 최신 이미지로 업데이트를 해주면 좋습니다. 맥을 기준으로 설명합니다.

1 단계: 에디슨 연결하기

아래 그림처럼 USB 케이블을 두개 모두 연결합니다.

연결 후 조금 있으면 다음처럼 디스크로 인식됩니다.

2 단계: 기존의 이미지 파일들 삭제하기
터미널을 열고 인식된 디스크로 이동합니다.

cd /Volumes/Edison

폴더로 이동 후 아래와 같이 입력하여 모든 파일을 삭제합니다.
rm –rf *

다시한번 숨겨진 파일까지 모두 제거합니다.
rm –rf \.*

3 단계: 최신 이미지 다운로드

https://software.intel.com/en-us/iot/hardware/edison/downloads

최신 Yocto 이미지를 다운로드합니다. 에디슨에 설치될 최신 리눅스 Yocto 이미지 입니다.

다운로드 후 압축을 풀고 파일을 디스크에 복사합니다.

최종적으로 새로운 파일들이 복사되고 디스크를 선택하면 아래와 같이 복사되었습니다.

4. 에디슨 플래슁

이제 터미널에서 screen /dev/cu.usbserial 를 입력후 탭키를 누르면 적절한 포트가 선택됩니다.

그리고 다시 115200 -L 를 입력 후 엔터를 칩니다. 다시한번 엔터를 입력하면 아래와 같은 화면이 출력되고 root를 입력하면 로그인 됩니다.

이제 reboot ota 를 입력하면 새로운 펌웨어로 업데이트됩니다.

 

스크린샷 2015-08-01 오후 9.02.02

 

스크린샷 2015-08-01 오후 9.02.15

스크린샷 2015-08-01 오후 9.05.02

 

새로운 따끈따끈한 시스템으로 업데이트가 되었습니다.

일단 root 계정으로 로그인합니다.

root@edison:~# configure_edison --version

159

현재 따끈따끈한 버젼은 159입니다. 15년 9번째 업데이트 입니다.^^

 

 

 

화면이 스크롤 되면서 이런 저런 처리 내용이 디스플레이되고 모든 업데이트가 마무리됩니다.

관련상품 : http://www.icbanq.com/P005632309/R

 [본 컨텐츠는 ICbanQ (아이씨뱅큐)에서 진행하는 파워블로거 활동의 일환으로, 아이씨뱅큐의 지원을 받아 작성되었습니다]

 

인텔의 에디슨 시작하기

맥에서 인텔 에디슨에 연결하는 방법입니다.

에디슨을 확장보드에 잘 결합합니다.

IMG_0310
보드에 결합한 상태에서 USB 케이블을 둘다 연결합니다.

IMG_0312

터미널에서

ls /dev/cu.usbserial-* 를 입력하여 설정된 시리얼 포트를 확인합니다.

제 경우는 아래와 같습니다. 시리얼 포트를 찾았으니 터미널로 접속합니다.
[~]$ ls /dev/cu.usbserial-*
/dev/cu.usbserial-A103KJQL

// 아래와 같이 입력합니다. 여기에서 XXX로 표시된것은 여러분들의 시리얼을 입력하시면 됩니다.
저의 경우는 /dev/cu.usbserial-A103KJQL 을 입력하겠습니다.

screen /dev/xx.usbserial-XXXXXXXX 115200 –L

위와 같이 입력한 후 빈화면이 나오면 엔터를 한번 쳐주시면 됩니다.(이것때문에 한동안 멘붕...ㅋㅋ)

그러면, Yocto(욕토) 리눅스에 로그인 할 수 있게 됩니다.

 

Poky (Yocto Project Reference Distro) 1.6.1 dimplejuno ttyMFD2

dimplejuno login:

로그인 계정은 root 를 입력합니다. 처음에는 비번은 설정되어 있지 않습니다. 그냥 엔터를 입력합니다.

 

보드 이름 설정하기

보드의 이름 설정하기 입니다. 원하시는 이름으로 설정합니다.

우선 설정된 이름을 확인합니다.

저의 경우에는 아래와 같습니다. --showNames 하면 설정된 이름을 볼 수 있습니다.

root@edison:~# configure_edison --showNames
{"hostname": "edison", "ssid": "EDISON-6C-65", "default_ssid": "edison_ap"}

수정 하시려면 아래와 같이 입력합니다.

configure_edison --name
Give this Edison a unique name.
This will be used for the access point SSID and mDNS address.
Make it at least five characters long (leave empty to skip):
Skipping name change...

root@dimplejuno:~# configure_edison --showNames
{"hostname": "dimplejuno", "ssid": "dimplejuno"}
root@dimplejuno:~#

root 계정의 비번 설정하기, 비번을 설정해줍니다.
configure_edison --password

*와이파이 설정하기 : 에디슨에는 감사하게도 와이파이가 기본으로...땡큐베리 감사.

와이파이를 설정하려면
configure_edison --wifi 를 입력한 후 스캔하고 원하는 AP를 선택한 후 암호를 입력하면 연결됩니다.
연결된 후에는 로컬 연결 IP(저의 경우, http://192.168.0.26)를 보여줍니다.

Configure Edison: WiFi Connection

Scanning: 1 seconds left

0 : Rescan for networks
1 : Exit WiFi Setup
2 : Manually input a hidden SSID
3 : U+NetB96F
4 : U+zone
5 : home
6 : dimplejunoEGG
7 : decsers

Enter 0 to rescan for networks.
Enter 1 to exit.
Enter 2 to input a hidden network SSID.
Enter a number between 3 to 7 to choose one of the listed network SSIDs: 7
Is decsers correct? [Y or N]: Y
Password must be between 8 and 63 characters.
What is the network password?: ********
Initiating connection to decsers. Please wait...
Attempting to enable network access, please check 'wpa_cli status' after a minute to confirm.
Done. Please connect your laptop or PC to the same network as this device and go to http://192.168.0.13 or http://dimplejuno.local in your browser.

브라우저에 http://192.168.0.13 를 입력합니다. 즉, 에디슨이 와이파이에 연결되고 13번 아이피를 할당 받았습니다.
당근 브라우져로 연결하면 사이트가 나타납니다.

스크린샷 2015-04-17 오후 10.59.47

configure_edison --setup 으로 모든 설정을 한번에 할 수도 있습니다.

블루투스 시작하기

우선 블루투스를 활성화 합니다.
rfkill unblock bluetooth
bluetoothctl

root@edison:~# rfkill unblock bluetooth
root@edison:~# bluetoothctl
[NEW] Controller 98:4F:EE:04:34:EE edison [default]
[bluetooth]#

아래와 같이 에이전트를 등록합니다.
[bluetooth]# agent KeyboardDisplay
Agent registered
[bluetooth]# default-agent
Default agent request successful
[bluetooth]#

[bluetooth]# scan on
Discovery started
[NEW] Controller 98:4F:EE:04:34:EE edison [default]
[NEW] Device CC:29:F5:BE:E6:74 Hojun의 iPhone6
[NEW] Device 71:8F:32:71:C0:9D 71-8F-32-71-C0-9D
[NEW] Device 88:0F:10:29:63:9A MI

[bluetooth]# pair 88:0F:10:29:63:9A
Attempting to pair with 88:0F:10:29:63:9A
[CHG] Device 88:0F:10:29:63:9A Connected: yes
[CHG] Device 88:0F:10:29:63:9A UUIDs:
00001800-0000-1000-8000-00805f9b34fb
00001801-0000-1000-8000-00805f9b34fb
00001802-0000-1000-8000-00805f9b34fb
0000fee0-0000-1000-8000-00805f9b34fb
0000fee1-0000-1000-8000-00805f9b34fb
0000fee7-0000-1000-8000-00805f9b34fb
[CHG] Device 88:0F:10:29:63:9A Paired: yes
Pairing successful

터미널에서 위와 같이 연결합니다.

관련상품 : http://www.icbanq.com/P005632309/R

 [본 컨텐츠는 ICbanQ (아이씨뱅큐)에서 진행하는 파워블로거 활동의 일환으로, 아이씨뱅큐의 지원을 받아 작성되었습니다] 

 

BLE테스트키트 안드로이드 앱을 이용한 라즈베리파이 로봇 제어입니다.

 

"본 글은 아이씨뱅큐가 진행하는 칩센의 블루투스 4.1 모듈 테스트 키트 무상 체험단의 일환으로 ICbanQ의 지원을 받아 작성되었습니다" 

구입처입니다. 

원래 라즈베리파이와 테스트 키트를 블루투스 통신하여 서보모터로 스위치를 제어하려고 했는데, 
생각같이 되지 않아 제가 활동하는 커뮤니티에서 만들고 있는 로봇에 컨트롤러로 사용하여 미션을 수행하였습니다.

제공한 안드로이드 앱의 터미널을 통해 로봇에게 명령 하달하기 입니다.

다른 것은 개별적으로 했던 것이고, BLE 테스트 키트와 관련있는 부분은 BLE 테스트 앱의 터미널을 통해
데이터를 전달하고 라즈베리파이에서 이를 시리얼 통신으로 수신해서 처리하는 내용입니다.
 
 
 
급조해서 로봇 머리에 테스트 키트를 부착했습니다.
다른 라인들 때문에 좀 지저분해졌는데 양해바랍니다.
 
 
 
로봇은 원래 라즈베리파이를 웹을 통해 제어하는 구조였는데, 라즈베리파이의 USB와 테스트 키트를 연결하여 제공된 안드로이드
앱의 터미널을 통해 로봇을 제어하려고 합니다.
 



부팅 시키고 나서 페어링까지 완료한 모습입니다.
이제부터 터미널에 글을 쓰고 send하게 되면 라즈베리파이의 시리얼을 통해 로봇을 제어할 수 있는데요.
저는 기존에 사용하던 node.js의 오픈 소스를 이용하여 구현하였습니다.

아래의 소스가 시리얼 통신으로 터미널에서 전송한 데이터를 받아오는 소스입니다. 보내는 것도 가능한데,
이번 미션에서는 받아오는 부분만 필요해서 받는 이벤트 쪽만 구현했습니다.

var serialport = require("serialport");
var SerialPort = serialport.SerialPort
var serialPort = new SerialPort("/dev/ttyUSB0", {
  baudrate: 9600,
  parser: serialport.parsers.readline("\n") // 
}, false); // this is the openImmediately flag [default is true] 
 
 serialPort.open(function (error) {
  if ( error ) {
    console.log('failed to open: '+error);
  } else {
    console.log('open');

    serialPort.on('data', function(data) {
      console.log('received: ' + data);
      
      if (data[0] === 'f') //forward
        forward(0);
      else if (data[0] === 'b') //backward
        backward(0);
      else if (data[0] === 'l') //left
        left(0);
      else if (data[0] === 'r') //right
        right(0);
    else if (data[0] === 's') //stop
        stop();
    });
  }
});

로봇 제어 API는 좀 길어서 생략했습니다. 
잠시 공간을 할애하자면, 간혹 IT 커뮤니티에서 보신 분들도 계시겠지만, 
개인적으로 circulus라는 커뮤니티에서 활동하면서 제작하고 있는 로봇입니다.
pololu 서보모터 컨트롤러, sg5010, as3103등의 서보모터를 사용하여 만들었고요. circulus라는 개발 platform에서
소프트웨어를 구현하고 있고, 웹을 통해 제어하고 있는데, 이번에는 BLE제어 키트를 이용하여 안드로이드 앱으로
제어하게 되었네요. 
pololu의 서보모터 컨트롤러의 소프트웨어 역시, npmjs.org에 오픈소스를 찾으실 수 있습니다.

아래는 로봇을 제어하는 동영상입니다.
 
 
 
 
 
 



 
지금까지 읽어주셔서 감사합니다. 좋은 하루 보내세요.

"본 글은 아이씨뱅큐가 진행하는 칩센의 블루투스 4.1 모듈 테스트 키트 무상 체험단의 일환으로 ICbanQ의  
        지원을 받아 작성되었습니다"

블루투스 라즈베리파이 시리얼 콘솔

 

"이 글은 아이씨뱅큐가 진행하는 칩센의 블루투스 4.1 모듈 테스트 키트 무상 체험단의 일환으로 ICbanQ 지원을 받아 작성되었습니다"

무상체험 대상인 BoT-CLE110 Test Kit 구입처http://www.icbanq.com/shop/product_detail.asp?prod_code=P005672731

 

​라즈베리파이 모델B 2대, 라즈베리파이2 모델B 2대, 모두 4대의 라즈베리파이를 가지고 있다. 데모용으로 자주 들고 다니는 라즈베리파이2는 2대는 각각 Ubuntu 14.04 + ROS indigo, 라즈비안과 카메라 영상을 네트워크 스티리밍할 mjpeg streamer가 설치되어 있다. 보통 전원과 네트워크만 연결해 사용하고, 여간해서는 키보드, 모니터 등은 연결하는 일이 거의 없다. 하지만 가끔씩 이 전에 사용했던 네트워크 설정이 데모장소의 네트워크 여건상 수동 설정을 사용했을 경우, 난감한 사태가 벌어진다. 보통 USB to UART 장치를 이용해 시리얼 콘솔 접속으로 설정을 변경하는데, 이 BoT-CLE110 Test Kit을 일종의 쉴드로 만들어 아예 장착해 두면, 바로 PC나 스마트폰에서 무선으로 이 작업이 가능하겠다는 생각이 들었다.

1. BoT-CLE110 Test Kit의 Baudrate 변경


일반적으로 리눅스 시리얼 콘솔로 사용되는 UART Baudrate는 115,200baud를 사용한다. 라즈베리파이 또한 마찬가지이다. 이 작업에 적당한 시리얼통신 에뮬레이터는 아두이노 IDE 프로그램의 시리얼 모니터가 적당하다. 먼저 BoT-CLE110 Test Kit을 마이크로 5핀 USB 케이블을 통해 PC와 연결한다. 이 때 장치관리자의 포트항목에 나타나는 COMxx의 xx에 해당하는 숫자를 기억해두자.


이제 아두이노IDE를 실행시킨 후 '도구 - 포트 - COMxx'을 앞서 기억해 둔 숫자로 맞춘 후   아이콘을 클릭하여, 시리얼모니터를 실행한다.


아래 그림처럼 설정이 되었는 지 확인한다.


AT를 입력하여 +OK가 출력되는 지 확인


AT+UART=115200 를 입력하여 +OK가 출력되는 지 확인


아래 그림에 표시한 것 처럼 보레이트를 115200으로 변경 AT를 입력하여 +OK가 출력되는 지 확인



2. 바즈베리파이의 Serial Cosole 활성화


시리얼 콘솔을 활성화 시키기 위해 raspi-config를 실행한다.

 $ sudo raspi-config

메인메뉴에서 '8. Advanced Options' - 'A08. Serial' - '' - '' 순서로 선택하여 시리얼 콘솔을 활성화 시킨 후,  ''를 선택하여 raspi-config를 종료한다.


 

시리얼 콘솔 포트 확인

 $ sudo ls /dev/ttyA*

   /dev/ttyAMA0

​/dev/ttyAMA0가 라즈베리파이 PGIO포트에 있는 시리얼 콘솔 접속시 사용되는 시리얼 포트의 이름이다.


3. Wiring

라즈베리파이의 I/O 신호레벨이 +3.3V 이므로 특별히 신호레벨을 맞춰 줄 필요는 없다. GND만 맞춰주면 되다. 아래 그림처럼 4가닥만 연결해주면 된다. 점선으로 표시한 SW 방향에 주의한다. 앞서 전송속도를 115200으로 변경할 때와 반대방향으로 맞춘다.

 

 

4. BoT-CLE110 Test Kit를 이용한 라즈베리파이 시리얼 콘솔 접속

 

 


 

"이 글은 아이씨뱅큐가 진행하는 칩센의 블루투스 4.1 모듈 테스트 키트 무상 체험단의 일환으로 ICbanQ 지원을 받아 작성되었습니다"
written by GroundZero
 

  

 
이 저작물은 크리에이티브 커먼즈 저작자표시-비영리 4.0 Unported 라이선스에 따라 이용할 수 있습니다 

[미션2. 구현기] 스마트폰 미니 자동차 제어

 

※ 본 글은 아이씨뱅큐가 진행하는 칩센의 블루투스 4.1 모듈 테스트 키트 무상 체험단의 일환으로 ICbanQ의 지원을 받아 작성되었습니다.

※ 구입처 : http://www.icbanq.com/shop/

 

 

미션 2 : 무선스마트폰 미니 자동차 제어

 

 

 이번 미션을 수행하면서 그 동안 RC카를 한번 개조해 보고 싶었던 개인적인 바램이 이렇게 BLE 모듈을 체험해 볼 수 있는 기회와 어우러져 의미있는 시간이지 않았나 생각됩니다.  

 

본론으로 들어가기에 앞서 진행해야 할 작업을 크게 나누어 보면 아래와 같습니다.

1. HW준비 : RC회로를 BoT 테스트 키트로 교체, DC모터 Driver 모듈과  연결  
2. SW준비 : BoT 테스트 키트 용 테스트 apk의 PWM control UI 수정(-> Joystick)  

3. Test 및 보완

 

우선 HW작업으로 불용품 RC카를 분해하여 Radio Controler 회로를 떼어 냅니다.

 

 

그리고 새로운 두뇌(BoT 테스트 키드)로  바꿔주고, 연결 작업을 합니다.

이미 제목에서 알 수 있듯이 DC모터를 PWM 신호로 제어하기 위해 BoT 테스트 보드의 PWM0~3(4개의 출력 신호)를 사용합니다.

 

 

 

 

그리고 BoT테스트 보드의 IO전압(3.3V)과 전류 레벨(?:CSR1010문서에도 없네요..ㅠ.ㅠ)로는 초라한 can모터라 할지라도 직접적인 DC모터제어에 무리가 있어 효율적이고 쉽게 제어하기 위해 ICBANQ에서 구매한 DC모터 Driver(위 사진 중앙 하단)를 적용하였습니다. 

 

 

 

 

 

 DC모터 Driver는 2채널용으로 BA6208 2개만을 사용하여 입출력을 사용하기 편하게 배치한 간단한 쪽보드(piggyback board)입니다.

 

 

 

 

실제 공간이 작은 시스템에 적용하기엔 size가 좀 크네요.^^ 

 

BA6208 보드 기준으로 

     1. control용 입력신호 : BoT테스트보드의 PWM0~3 pin으로 부터 LM0,LM1 / RM0,RM1에 각각 연결

     2. 전원(4.5~15V)  : 배터리팩(전원 스위치 포함)으로 부터 Vcc, Gnd에 연결

     3. DC모터구동용 출력신호 :  2채널 출력(J3/J4)을 각각 DC모터에 연결 (Maximum 500mA)

이렇게 간단합니다.

 

 

 

아래표는 BoT보드의 PWM 출력 -  BA6028 -  DC모터의 구동 방향과의 상관 관계를 나타냅니다.

   DC Motor#

PWM#

BA6208 Output to

DC motor

   Motor1(driving)

PWM0

PWM1

 

                 H

L

정회전

L

H

역회전

H

H

정지

L

L

Open

   Motor2(steering)

PWM2

PWM3

 

H

L

정회전

L

H

역회전

H

H

정지

L

L

Open




 

그리고 BoT 테스트보드의 PWM 출력을 보드 내부(RGB LED, Vibrator)가 아닌 외부(헤드핀 부착부)로 돌리기위해

해당 스위치를 아래 사진과 같이 보드 외부로 설정합니다.

 

 

이제 장착과 연결이 끝났네요.

 

 

기념으로 측면 샷도 한번 눌러 봅니다.

 

 

이로써 HW적인 준비는 마쳤고 ...

 

 

 

 

 

 

 

다음은 SW 관련사항을 한번 볼까요 ...  

 

 

BoT 테스트 키트용 android app에서 PWM control을 위한 UI는 RC카 조정 관점에서는 좀 맞지 않습니다.

그래서 칩센 사이트의 Download 코너에 공유되어 있는 테스트앱을 받아서 수정,구현하기로 가닥을 잡았습니다.

 

 

테스트앱의 구성을  간단히 살펴보면 아래와 같습니다.

(* 그리고 library인 chipsen-cle1x0_1.jar(com.chipsen.bleservice)도 있습니다.)

 

 

 

Activity 진행 순서는 아래와 같습니다.

       chipsen_logo(splash) --> NavigationActivity(각종 data, control이 있는) --> (BLE scanning 시) DeviceScanActivity

 

 

PWM control을 담고 있는 부분이 LedContorlFragment인데, 이 부분에 기존 것(PWM관련 만)을 제거하고 아래와 같이 DualJoystickView 관련 코드를 추가합니다.(시간 관계상 https://code.google.com/p/mobile-anarchy-widgets/wiki/JoystickView를 활용합니다.)

 

 

 

 

그리고 JoystickView로부터 전처리된 터치이벤트가 전파되면  JoystickMovedListener가 감지하여 조정을 위한 판단을 한 후 BLE 서비스로 전달하여 GATT - write characteristic operation을 수행하면  CSR1010에 전달되고 최종적으로 PWM을 control을 합니다.

 

최종 수정된 activity 형태는 아래와 같습니다.

 

 

 

 

작업의 많은 부분을  Driving motor(좌), Streering moter(우) 레벨 조정을 위한 JoystickMovedListener 내부 구현에 투자하였습니다.

우선 원하는 대로 동작 시키는 것에 초점을 두었지만 아직 최적화의 여지는 많이 남아 있어 보입니다.

 

 

 

 

자~ 이제 테스트 단계로 넘어갑니다. 

1차 동작 검증을 위해  아래와 같이 포즈을 취합니다.

 

 

 

 

 

여러차례의 수정을 마치고 나름 잘 굴러갑니다. 

 

 

 

이제 "Hit The road Jack !" 해 볼까요 ~~ 

 

 

 

음주 운전은 절대 안됩니다. ^^

 

* 작업한 소스도 첨부합니다. 

 

 

이상으로 미션2를 마치겠습니다.

 

 

 

 

 

※ 본 글은 아이씨뱅큐가 진행하는 칩센의 블루투스 4.1 모듈 테스트 키트 무상 체험단의 일환으로 ICbanQ의 지원을 받아 작성되었습니다.