임베디드 기초강좌 6 - MCU 의 내장 메모리

임베디드 기초강좌 6 - MCU 의 내장 메모리 

 

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

 

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

지난번에는 모든 전자기기의 필수적인 요소인 클럭에 관해서 알아 보았습니다.

이번 강좌에서는 임베디드에 사용되는 각종 메모리 혹은 내장 메모리의 종류및 

사용법을 알아보고 부록 강좌에서는 일반적인 메모리의 역사및 종류에 대해서 

알아보겠습니다.

 

임베디드에 사용되는 각종 메모리는 크게 두종류로 나뉩니다.

첫번째로 전원을 차단하면 그 내용이 지워지는 램(RAM - random access memory)과 

전원이 차단 되어도 지워지지 않는 롬(ROM - read only memory)이 

바로 그 두 종류 입니다.

 

임베디드 MCU에는 램과 롬을 동시에 내장하여 추가로 부가적인 램과 롬을 

MCU의 외부에 장착하지 않고도 원하는 프로그램을 실행 시킬수 있는 장점이 있습니다. 

그렇지만 램과 롬의 용량이 부족해 지는 경우에는 어떻게 하면 될까요?

첫번째로 MCU의 외부에 메모리를 추가로 장착하면 됩니다. 

 

그렇게 하면 메모리를 액세스 하기위해서  I/O 핀이 추가로 필요해 지게 됩니다.

(제어와 데이터의 이동에 사용되는 핀이 필요하기 때문입니다.)

 

두번째로 더 간단한 방법인데요. 

스펙문서를 살펴 보시면 같은 종류의 MCU라 하더라도 램과 롬의 용량이 각각 다른 

MCU가 존재 합니다. 이러한 경우에는 좀더 상위의 MCU를 사용하여 프로그래밍을 

하면 됩니다.

 

MCU 제조회사에서는 대개 같은 패밀리의 MCU중 메모리의 용량만 다른 경우에 

똑같은 스펙문서를 공유합니다. 

따라서 같은 스펙 문서를 보고 좀더 상위의 MCU를 사용하시면 됩니다. 

이러한 상위의 MCU도 없다면 비슷한 패밀리의 MCU를 대치하여 사용하면 됩니다. 

이때 각 핀들이 MCU마다 각각 다를수 있으므로 스펙문서를 보고 핀의 위치를 변경하는

추가적인 작업이 필요할 수도 있습니다.

 

예를 들어 보겠습니다.

다음사이트의 스펙 문서를 참고해 주세요

http://www.atmel.com/images/doc8161.pdf

atmel AVR 시리즈의 스펙 문서 입니다.

하나의 스펙 문서에 4종류의 MCU를 기술하고 있습니다.

 


(그림1)

 

스펙문서에는 각각의 MCU는 서로 핀 호환이 되며 3종류의 내장 메모리 크기만이 

다른것을 알 수 있습니다.

 


(그림2 - 스펙문서에 기술한 4종류의 MCU의 핀아웃은 동일합니다.) 

 

 

이 경우에 프로그래밍은 가장 작은 용량의 MCU로 시작해서 점차 기능이 추가되는경우 

상위의 칩을 사용하면 원본 프로그램을 거의 수정하지 않고도 원하는 기능을 

추가 할 수 있는 장점이 있습니다.

(완전히 수정할 필요가 없는것은 아닙니다.  스택포인터 조정을 위해서 한두개의 

명령어는 수정할 필요가 있습니다. 그렇지만 아두이노의 경우에는 부트로더에서 

이러한 일을 수행해 주므로 아두이노의 코드는 거의 수정없이 사용할 수 있습니다.)

 

자 그럼 이번에는 핀조정이나 기판 레이아웃이 달라지는 경우의 예를 살펴 보겠습니다

다음 주소를 참조해 주세요.

http://ww1.microchip.com/downloads/en/devicedoc/39632c.pdf

마이크로칩의 PIC18F2550으로 프로그램을 작성했다고 가정해 보겠습니다.

 

 

(그림 3)

 

PIC18F2550과 PIC18F4550은 내부 메모리의 크기가 다르지만 

또한 핀아웃도 다릅니다. 핀의 갯수가 다르네요..

(그림 4) 

 

대개 상위칩은 하위칩의 모든 기능을 가지고 있는 경우가 많습니다. 

따라서 18F2550으로 회로를 설계 하였다면 이경우에는 좀더 큰 용량의 칩으로 

바꾸면서 추가적으로 회로의 변경이 필요해 집니다.

 

위의 경우만 비교해 본다면 AVR시리즈가 좀더 migration이 편리한 듯 보입니다만, 

각 칩 제조사의 제품군이 매우 다양하기 때문에 어떤경우에는 MICROCHIP의 

제품의 micration이 더 편리한 경우도 있습니다.

 

하나하나 따져보고 추후 코드의 추가가 될 수 있는지 여부를 확인해 보아야 하겠습니다.

 

위의 두 스펙문서를 보시면 

High Endurance Non-volatile Memory Segments

– 4/8/16/32K Bytes of In-System Self-Programmable Flash progam memory

(ATmega48PA/88PA/168PA/328P)

– 256/512/512/1K Bytes EEPROM (ATmega48PA/88PA/168PA/328P)

– 512/1K/1K/2K Bytes Internal SRAM (ATmega48PA/88PA/168PA/328P)

– Write/Erase Cycles: 10,000 Flash/100,000 EEPROM

 

이런 글귀하고 

Program Memory Data Memory

Flash(bytes), # Single-Word Instructions

SRAM(bytes), EEPROM(bytes)

 

이런 문장이 있습니다. 

뭔가 메모리의 종류가 3종류가 되는것 같습니다.

공통적인 부분만을 뽑아내 보면 Flash programming memory, SRAM, EEPROM 

이렇게 3종류의 메모리가 내장되어 있다는 것을 알 수 있습니다.

 

자 그럼 왜 이렇게 다양한 종류의 메모리가 한꺼번에 내장되어 있을까요? 

그것은 각 종류의 메모리가 하는 역할이 각각 다르기 때문입니다.

 

맨 처음에 메모리는 크게 2종류로 나뉘어 진다고 말씀 드렸습니다. 램 혹은 롬 

위의 3종류의 메모리는 SRAM 은 램 종류이고, 

Flash programming memory, EEPROM 은 롬 종류입니다.

 

먼저 프로그램이 저장될 코드 메모리가 필요합니다. 

코드 메모리는 MCU의 전원이 꺼지더라도 지워지지 않아야 하기 때문에 

롬에 저장되며 FLASH라는 종류의 롬에 저장 됩니다.

그리고 또한 프로그램이 실행되는 중에 필요한 각종 정보를 저장하는데에도 메모리가 

필요할 것입니다. 이러한 메모리는 프로그램이 수행중에만 필요하므로 전원이 차단된 

경우 그 내용을 유지할 필요가 없습니다. 

이런 경우에는 램이 필요하고 MCU에는 SRAM이라는 종류의 램이 사용되었다는 

의미입니다.

 

그리고 마지막으로 프로그램이 수행중에 필요하기는 하지만 전원이 꺼진경우에도 

그 값을 저장할 필요가 있는경우에는 어떻게 해야 할까요?

예를 들자면 모니터의 밝기 정보같은 경우 

(매번 모니터를 켜자마자 밝기를 다시 조정하고 쓰는 분들은 없을 것입니다.)

이렇게 전원이 차단된 경우에도 정보를 가지고 있을 필요가 있는경우에는 

그 정보를 EEPROM에 저장을 합니다.

 

이렇게 3종류의 메모리가 1개의 MCU에 사용된 이유는 각 종류의 메모리의 액세스 속도가 다르고 쓰기 가능 횟수가 차이가 있기 때문에 그러합니다.

 

Flash programming memory, EEPROM 의 경우 각각 10,000 회 100,000 회의 기록을 

보장합니다. 즉 그 이상은 기록할 수 없는 것입니다. 내장 프로그램의 경우에는 최초 1번

기록이 되면 대개 (디버깅을 행하는 경우를 제외하고) 바꿀 필요가 없기 때문에 

10,000 회의 경우에도 넉넉합니다.

 

또한 EEPROM의 경우에도 100,000 회라면 MCU의 수명이 다하는 날까지 쓰더라도 

(하루에 100번 기록한다 하더라도 1000 일입니다.)

 

이것도 각 cell당 숫자이므로 모든 cell을 100,000회 이상 기록해서 쓰는 경우는 

많지 않을 것입니다.

 

- 모니터의 밝기를 하루에 100 번씩 바꾼다면 1000 일 후에는 모니터의 밝기 정보가 저장 되지 않겠네요.^ ^ -

그렇지만 매번 바뀌는 종류의 정보들 - 예를 들자면 모니터에서 표시되는 내용을 담고 

있는 메모리들 - 은 하루에도 수십만번 이상 그 내용이 바뀔 것입니다. 

이러한 정보들은 SRAM에 저장을 하며 모니터의 전원이 차단된후 다시 전원이 들어오면 

내부 프로그램에 의해서 다시 초기의 값들로 돌아오게 됩니다.

 

자 그럼 요약 하겠습니다.

 

 embedded MCU 의경우 대개 3종류의 메모리가 내장되어 있으며 

코드 프로그램의 메모리가 더 필요한 경우 FLASH memory 가 큰 것을 선택한다.

내장 프로그램의 실행시 임시 메모리가 부족한 경우 SRAM이 더 큰것을 선택한다.

내장 프로그램의 실행시 전원이 꺼져도 유지해야 하는 데이터가 더 필요한 경우 

EEPROM 이 더 큰것을 선택한다.

 

입니다. 

 

그렇지만 제조사는 아예 3종류의 메모리 전부가 더 큰 모델을 생산하므로 아무거나 

메모리가 부족하면 상위 모델로 대치하면 됩니다.

 

MCU의 내장 메모리에 대해서 약간의 감이 잡히셨나요.

 

이번시간에는 MCU의 메모리에 대해서 알아 봤습니다.

다음에는 일반적인 메모리의 종류가 어떤것이 있는지 알아 보겠습니다.

감사합니다.~~

 

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

임베디드 기초 강좌 5 부록 - 여러종류의 clock source

임베디드 기초 강좌 5 부록 - 여러종류의 clock source

 

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

 

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

 

 

글의 내용은 http://blog.naver.com/jimypage 에서도 확인하실수 있습니다.

 

 

지난번에는 임베디드 MPU를 다루는데 있어서 심장부가 되는 클럭에 대해서 알아보았습니다.

 

이번에는 임베디드 기기에서 클럭 소스로 사용될 수 있는 회로나 부품은 어떤것이 

 

있는지 알아보고 각각의 장단점을 살펴 보도록 하겠습니다.

 

될수있으면 고 정밀도의 고성능 부품을 사용하면 좋겠으나 각각 비용과 효율성 측면이 있으므로

 

여러가지를 다 알고 있다면 선택에 도움이 되리라 생각해서 글을 써 보았습니다.

 

 

 

 

클럭소스는 임베디드 보드에서의 프로그램이 일정한 시간으로 수행되는데 

 

필요한 클럭을 제공하는 발진 회로를 의미합니다.

 

CPU, MPU가 등장하면서 프로그램을 순차적으로 수행하는데 클럭은 필수적인 요소가 되었지만

 

임베디드 프로그래밍 또는 컴퓨터의 사용전에도 발진회로는 많은곳에서 쓰였습니다.

 

그중 대표적인것이 라디오 전파의 송 수신용도였습니다. 반송파를 만드는데 발진회로가 필요하기 

 

때문이었습니다.

 

 

 

 

최초의 발진소자는 수동소자의 성질에 의해서 발명이 되었습니다.

 

저항, 커패시터, 인덕터등의 수동소자들중 저항을 제외한 두 소자는 

 

각각 전압의 변화에 대해서 저항이 커지는 성질과 저항이 작아지는 성질을 가지고 

 

있습니다. 이러한 커패시터와 인덕터를 병렬로 배치한 후 전원이 차단되면 커패시터에서 

 

충전된 전하는 인덕터를 거치면서 자기장을 형성하여 유도 기전력을 만들고 

 

커패시터의 방전이 이루어진 경우 유도 기전력은 다시 커패시터를 충전시키는 현상을 

 

반복함으로써 발진을 하게 됩니다.

 

https://en.wikipedia.org/wiki/LC_circuit

 

 

 



 

 

이러한 현상을 이용하여 몇몇 발진기들이 발명되었는데 수동소자의 경우 에너지의 소모를 

 

보충할 방법이 없기 때문에 중간에 능동소자인 트랜지스터를 추가하여 계속적으로 발진하는

 

발진기를 만들 수 있었습니다. 

 

콜피츠 발진기, 클랩 발진기, 하틀리 발진기 등이 이러한 종류의 발진기에 속합니다.

 

 

 

 

 

 

 

 

http://www.wizmac.com/2015/lecture/board01_view.htm?No=4&Sub_No=8

 

(위의 사이트에서 그림을 가져왔습니다)

 

 

또한 멀티 바이브레이터 회로를 이용하여 발진을 시킬수도 있습니다.  이것은

 

두개의 트랜지스터가 각각 성질이 다르다는 점에 착안하여 각각의 트랜지스터가 

 

점멸을 반복하여 발진을 하게 됩니다.

 

 

 

 

 

 

 

http://efxkits.com/blog/multivibrators-types-and-thier-working/

 

 

그렇지만 수동소자를 사용하는 위의 발진기들의 경우에는 수동소자의 성질이나 온도등의 

 

변화에 민감해서 그 정밀도가 매우 떨어지는 단점이 있었습니다.

 

초기의 발진기는 라디오등의 방송에 사용되었는데 라디오 방송의 반송파의 주파수가 

 

정확하지 않아서 반송파의 정확한 발진 주기를 만드는 것이 큰 문제가 되었습니다.

 

그래서 이것을 튜닝해 주는것이 큰 문제였다고 합니다.

 

 

현대의 발진기가 발명된것은 1880년 압전현상의 발견으로 거슬러 올라갑니다. 

 

 

 

 

 

 

(압전 현상 - 출처 위키피디아)

 

 

 

 

압전 현상이란 물질에 물리적인 에너지가 가해지면 분극이 일어나는 현상으로 

 

물질에 전기에너지가 가해지면 물리적인 변형이 가해지며 이것이 되돌아가는 과정에서 공진

 

현상을 일으킬 수 있는데 수정(crystal)이 대표적인 물질입니다. 

 

https://en.wikipedia.org/wiki/Crystal_oscillator

 

수정 발진자의 경우 위에서 설명한 LC 공진기나 멀티바이브레이터 등과는 달리 온도나 주위환경과는 

 

무관하게 고유한 진동을 일으키며 이 진동의 진동수는 전적으로 수정편의 두께나 결정방향에 

 

의존합니다.  따라서 정밀한 클럭소스로 사용할수 있습니다.

 

 

 

 

 

시계에 사용되는 수정 발진자 

 

 

 

 

 

 

 

시골집이나 옛날 드라마에서 나오는 '괘종시계'는 태엽에 감긴 에너지를 진자의 움직임으로 

 

바꾸어 이것을 이용해서 시간을 표시하는 시계입니다. 

 

 

단지 진자의 기계적인 움직임으로 시간을 측정하는 장치였기 때문에 오차가 많다는 것은 

 

당연한 것이었습니다. 

 

 

그렇지만 수정 발진자가 상용화 되면서 이러한 괘종시계보다 정밀도가 우수한 '쿼츠 시계'가 

 

널리 사용되게 되었습니다. 

 

 

'쿼츠 시계'란 수정발진자를 이용해서 정확한 시간을 표시한 아날로그 시계를 의미합니다.

 

 

 
 

 

이러한 수정 발진기의 상업적인 이용은 1910년 후반부터 이루어 졌습니다.

 

최초의 수정발진자는 천연 수정을 얇게 잘라내어서 사용하였으나 

 

정확한 주파수를 생성하기 위해서 인공적으로 순수한 수정을 결정화 하는 기술이 발명되어서

 

오늘날의 수정 발진기는 전부 인공적인 수정으로 만들어 지고 있습니다.

 

 

 

 

 

 

 

(수정 발진자 그림)

 

 

따라서 주위환경의 변화에 무관하게 대단히 고 정밀도의 클럭을 얻을 수 있게 된것입니다.

 

그렇지만 수정 발진자에도 단점이 있는데 수정편을 무한정 얇게 만들수는 없으므로 

 

현재의 기술로는 50Mhz 정도까지가 발진 한계로 인식되고 있습니다.

 

수정발진자가 진짜 수정이 맞을까요?? 

 

뜯어보면..  

 

 

 

진짜로 수정 판이 들어 있네요.. ㅎㅎ

 

 

 

 

 

 

(수정발진자의 내부)

 

 

 

 

압전현상을 이용하는 또다른 발진기로는 세라믹 발진기 (ceramic resonator)가 있습니다.

 

세라믹의 경우에도 압전현상으로 발진을 일으키지만 수정 발진기보다는 좀 덜 정확합니다.

 

그러나 가격이 저렴하다는 장점이 있습니다.

 

 

 

 

 

 

(세라믹 레조네이터)

 

 

발진기의 발진을 일으키기 위해서는 계속적인 전기 자극이 필요합니다. 이러한 전기 자극을 

 

주기 위해서는 수정발진자 주위에 회로가 필요한데 이러한 회로를 하나로 패키지화하여 

 

모아 놓은것을 오실레이터라고 합니니다. 

 

 

 

(오실레이터 그림)

 

 

 

오실레이터는 주변 회로가 간단해지고, 정확하다는 장점이 있어 전자회로의 클럭소스로 

 

많이 쓰입니다.

 

 

 

우리가 임베디드에 사용하는 클럭의 경우에도 위의 여러가지 발진 회로를 사용할 수 있습니다.

 

대개는 수정 발진자를 사용하나 그밖에도 목적에 맞는 다양한 구성으로 클럭을 

 

생성할 수 있도록 하고 있습니다.

 

단지 클럭 입력핀의 양단에 각각 수정발진자나 기타 클럭원과 연결만 하면 

 

MPU 안에 내장되어 있는 나머지 부품과 함께 발진을 하기 때문에   

 

간단하게 클럭을 구성할 수 있습니다. 

 

 

 

AVR의 클럭 설정부분을 참고하면, 몇가지 종류의 클럭소스를 선택 할 수 있습니다.

 

(단 각각의 클럭 소스나 주파수에 따라서 사용되는 수동 소자가 다르기 때문에 

 

MPU의 퓨즈 비트에는 어떤 클럭소스가 사용되었는지 설정하는 비트가 존재 합니다.

 

주의 !! 퓨즈비트의 값을 잘못 설정하면 MPU는 작동을 하지 않습니다.)


클럭소스의 결정은 클럭이 발생하기 이전에 결정되어야 하는 것이기 때문에 

 

MPU 내부의 프로그램으로는 이것을 설정할 수 없고, 퓨즈비트라는 설정용 비트에 그 

 

종류가 설정되어 클럭의 소스로 사용됩니다.

 

http://www.electroschematics.com/9481/avr-clock-source-fuse-bits/

 

 

 

 

 

 

(AVR MPU의 다양한 클럭소스)


 

마찬가지로 AVR 이외의 다른종류의 임베디드 MPU의 경우에도 위에서 설명한 발진기들을 

 

포함한 다양한 클럭소스로부터 클럭을 생성해 낼수 있습니다. 

 

MPU 내부에 클럭 발진에 사용되는 회로를 

 

내장하고 있기 때문에 굳이 비싼 오실레이터를 쓰지 않고도 수정발진자만으로도 정밀한  

 

클럭을 생성할 수 있습니다.

 

(예전의 CPU들이나 MPU의 경우에 클럭 입력핀이 하나밖에 없는 경우가 있는데 이러한 

 

경우에는 수정발진자에 발진 회로를 구성하고 이 출력을 클럭 입력에 입력 해야 했습니다.

 

즉 부가회로가 더 필요했습니다.)


 

 

또한 최근의 MPU나 FPGA의 경우 RC 수동소자로 구성된 발진 회로가 이미 내장되어 있어서 

 

외부 클럭이 없이도 초기의 값을 읽어들이거나 프로그램을 실행할 수 있습니다. 이러한 경우에는 

 

MPU는 외부모듈이 하나도 없더라도 원하는 동작을 수행할 수 있습니다. 

 

- internal rc oscillator

 

ex) ATTiny 시리즈 혹은 PIC시리즈중 일부

 

 

 

MPU의 클럭은 상한선은 있으나 하한선은 거의 없기 때문에 

 

목적에 따라 필요한 클럭소스나 주파수를 선택할 수 있습니다.

 

대개는 레퍼런스에서 사용된 클럭 주파수를 사용하나 전원관리가 중요한 경우 

 

클럭을 좀더 낮추어 사용하기도 합니다.

 

 

 

 

클럭에대해서 어느정도 감이 잡히셨는지요?

 

이번에는 MPU의 클럭원으로 사용되어지는 다양한 발진회로에 대해서 알아 보았습니다.

 

읽어 주셔서 감사합니다.

 

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

 

관련 제품

 

http://www.icbanq.com/shop/product_detail.asp?prod_code=P000360693

 

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

 

http://www.icbanq.com/P000541714

 

 

 

 

 

참고 사이트

 

https://www.sparkfun.com/tutorials/95

 

https://www.maximintegrated.com/en/app-notes/index.mvp/id/2154

 

 

임베디드 기초 강좌 4 부록 - ARM MCU 실습해 보기..

 

 

 

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

되었습니다]

 

 

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

 

지난시간에는 임베디드 분야의 새로운 트렌드인 ARM 코어에 대해서 살펴 보았습니다. 

 

이번에는 ARM코어를 사용한 MCU를 간단히 리뷰해 보고, 

 

코딩하는 방법에 대해서 알아 보겠습니다.

 

ARM 코어가 내장된 시기는 이미 임베디드 분야에서도 MCU의 내장 메모리가 상당히 

 

커진 관계로 어셈블리 언어를 이용할 필요가 별로 없어 졌습니다. 

 

그래서 속도가 필요한 몇몇 루틴을 제외하고는 대부분의 코드를 C 또는 C++로 작성을 

 

하게 됩니다. 

 

예전에는 ARM 코어를 사용한 임베디드 보드를 이용해서 프로그래밍을 하기 위해서는

 

먼저 ARM코어 전용의 업로드 툴을 준비하고, 부트로더부터 작성하고 

 

그이후에 C 런타임 환경을 만든뒤에 C언어의 main루틴을 실행하였습니다.

 

대부분의 칩 제조사에서는 자사의 MCU나 CPU에 맞는 부트 코드를 제공해 주며 

 

또한 프로그래밍에 필요한 컴파일러나 디버깅 툴은 ARM사에서 제공을 해 주었습니다.

 

그런데 ARM사에서 발매한 컴파일러는 성능은 매우 뛰어나지만 가격또한 매우 비쌉니다.

 

마찬가지로 ARM사에서 판매하는 디버깅 도구인 TRACE32 역시 수천만원을 호가하는 

 

매우 고가의 장비라서 임베디드 프로그래밍이 초기투자에는 

 

윈도우 프로그래밍보다도 비용이 더 많이 들었습니다.

 

그렇지만, ATMEL 칩에서와 마찬가지로 GCC

 

(gnu compiler collection - gnu 에서 만든 컴파일러 셋입니다.)컴파일러가   

 

ARM용으로 개발이 되어 무료로 사용할 수 있게 되었고, 또한 저렴한 JTAG 디버거가 발매되어서 

 

개인 개발자도 고성능 임베디드 코어를 이용할 수 있게 되었습니다.

 

이번에 리뷰해볼 Nucleo-F401RE 개발보드는 STMicroelectronics에서 발매된 개발보드인데

 

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

 

 

 

 

 

 

 

가격이 무려 ... 

 

 

14000원입니다. -,.-

 

14만원이 아니에요.. 개발보드 안에 ST-LINK라는 디버깅및 업로드 툴까지 내장하고도 가격이 

 

저렇습니다.

 

32비트 ARM코어를 내장하고 디버거까지 내장된 개발보드가 아두이노보다 쌉니다.~ 

 

심지어는 아두이노 실드와 호환이 되는 female 핀까지 있어서 - 약간은 수고스러우나 - 

 

프로그래밍을 해 주면 아두이노 실드도 이용할 수 있습니다.

 

아두이노의 경우에는 디버거가 없어서 코드 추적이 불가능한데요... 

 

이것은 가능합니다. 변수 확인도 가능하죠..

 

그렇다면 개발환경이 열악하냐.. 하면 그것도 아닙니다.

 

https://developer.mbed.org/

 

개발도구를 설치할 필요도 없이 그냥 온라인으로 개발이 가능합니다. @.@

 

간단한 개발에는 도구를 설치하느라 걸리는 시간이 거의 없는것 입니다.

 

(물론 개발도구를 설치해서 오프라인으로 개발도 가능합니다. 

 

오프라인으로 개발을 하면 디버깅및 코드 추적이 가능해 집니다.)

 

이번에는 먼저 간단하게 온라인 개발도구를 이용해서 개발을 해 보도록 하겠습니다.

 

기본 사이트에 들어가시면 

 

http://www.mbed.org/

 



(그림1)

 

ARMmbed라고 써있네요. 예전에는 그냥 mbed만 써 있었는데...

 

(ARM사에서 mbed 사이트의 혁신적인 면을 보고서 파트너 쉽 관계를 맺었다고 합니다.)

 

그리고 오른쪽 위의 실제 개발자 사이트로 넘어가는 버튼을 누르면..

 

다음과 같은 개발자 화면이 나옵니다.

 

https://developer.mbed.org/

 

(그림2)

 

여기서 등록을 하시고, 왼쪽 위쪽의 platforms 항목을 눌러서 내가 가진 개발보드를 

 

추가하면 이 개발보드에 맞는 결과물을 얻을 수 있습니다.

 

 

한눈에 보기에도 많은 개발보드를 지원하는 것을 알 수 있습니다.

 

여기서 다시 오른쪽 위의 compiler 버튼을 클릭하면 온라인 IDE 개발도구를 실행시킬수 있습니다.

 

 

 

(그림4)

 

IDE개발도구에서는 내 컴퓨터에 설치된 일반 IDE개발도구를 쓰듯이 그냥.. 쓰시면 됩니다. 

 

NEW를 눌러서 새로운 프로젝트를 만들면 기본적인 템플리트를 지정해 줄 수 있습니다. 

 

 

저는 화면에서 보듯이 일단 LED를 깜박이기 위해서 neucleo_blink_led라는 항목을 선택했습니다만 

 

이 밖에도 I2C나 SPI및 PWM등의 제어에 필요한 예제들을 제공해 주므로 가장 적당한 템플리트로 

 

먼저 시작하시면 됩니다.

 

그리고 여기서 프로그램을 작성한 후 compile 버튼을 누르면 컴파일이 진행 되고 

 

 

 

 

 

 

(그림4)

 

(물밑에서 일어나는 작업들은 알 필요가 없습니다. 개발보드에 맞는 부팅 환경은 사이트에서

 

 다 알아서 해 주죠.)

 

브라우저에서 생성된 binary code 결과물을 다운로드 받게 됩니다. 

 

 

 

 

 

위에 다운로드 받은거 보이시죠??

 

이 결과물을 내가 가진 개발보드에 올리면 바로 실행이 가능합니다.

 

참 쉽죠?? ㅎ ㅎ 

 

처음에는 별로 안쉽더라도 몇번 해 보면 금방 쉬워질 겁니다. ㅡ,.ㅡ

 

쉬운 방법을 알아야 임베디드 개발의 좀더 깊은 곳으로 들어 갈 수 있습니다.

 

이번시간은 여기까지 마치겠습니다. 

 

위에 말씀드린 개발보드가 아니더라도 저렴한 개발보드를 하나 구입해서 실습 해 보시기를 

 

당부드립니다. 

 

감사합니다. ~~

 

 

 

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

 

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

 

 

임베디드 기초 강좌 4 - 새로운 고성능 임베디드 mcu의 등장

임베디드 기초 강좌 4 - 새로운 고성능 임베디드 mcu의 등장

새로운 고성능 임베디드 mcu의 등장

 

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

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

 

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

지난번에는 본격적인 임베디드 강좌로 CPU의 개발및 MCU의 개발배경, 

그리고 부록 강좌에서는 예전에 사용되었던 AVR, PIC 칩의 대표적인 MCU를 살펴 보았습니다.

이번에는 비교적 최근의 CPU인 ARM의 등장 배경및 대표적인 CPU를 살펴보고 

다음 강좌에서는 실제적인 MCU의 사용을 해 보겠습니다. 

 

90년대 MCU들은 비교적 작은크기와 적은 메모리 그리고 몇 안되는 IO 개수로 단순했었지만

현세대의 MCU는 그 기능이 매우 많고 방대하여 전부 이해하는 것은 시간이 많이 걸리고 

어려운 일입니다.  간단한 작업을 하는데 고성능의 MCU를 쓸 이유는 없을 것입니다. 

그래서, ARM CPU의 등장배경과 현세대의 MCU의 경우 꼭 필요한 분야가 어디인지 

그리고 어떤 곳에서 쓰이고 있는지 간략히 살펴보는 것으로 마무리를 하겠습니다.

 

 

지난시간에는 인텔 4004 CPU 가 개발된 이후 8비트 CPU의 시조가 된 8080이 개발되었고 

이 8080 CPU 가 8비트 CPU의 대표격인 z80의 원조가 되었다는 말씀을 드렸습니다.

오늘은 그 다음의 이야기인 32비트 CPU와 RISC CPU의 개발 배경에 대해서 말씀드리고, 

현세대의 임베디드의 새로운 트렌드에 대해서 말씀드리겠습니다.

 

인텔은 8080개발이후 16비트인 8086 CPU를 개발하게 되었는데 이CPU가 IBM에서 쓰이면서 

시장을 장악하게 되었습니다. 

 

8086이후 속도를 향상시킨 80286 프로세서를 개발하게 되었고, 이후 32비트 CPU인 80386 를 

개발하면서 부터 32비트 CPU의 시대가 열리게 되었습니다.

 

데스크탑 CPU라 하면 거의 인텔 CPU라고 할정도로 개인용 컴퓨터에는 인텔 CPU가 쓰였습니다.

인텔의 CPU는 CISC라는 구조의 CPU인데 하위 호환을 위해서 CPU의 명령어의 길이가 가변이면서 

또한 상당히 많은 명령어 셋을 가지고 있는것이 특징입니다.

 

이러한 CISC구조는 CPU의 명령이 다양하다는 장점이 있지만 전력소비가 많고 

명령 디코딩에 쓰이는 로직이 복잡하기 때문에 소형화가 어렵다는 단점이 있었습니다.

따라서 전력 소모도 크고 발열량도 상당하다는 단점도 함께 존재 했습니다.

 

- CISC : complex instruction set computing - 

 

이때 컴퓨터공학자들이 그 시대의 CPU를 분석해 보니 실제로 코드에서 사용되는 명령어 중 

자주 쓰이는 것은 20% 미만이고 나머지 80%는 거의 안쓰이거나 낮은 빈도로 쓰이고 있다는 

것을 발견하게 됩니다. 

 

그리하여 명령어의 갯수를 줄인 CPU를 개발하게 되었는데 이것이 RISC CPU입니다. 

RISC란 (reduced instruction set computing)의 의미로 제어와 연산에 쓰이는 꼭 필요한 명령어들만 

남겨놓은 것이 특징입니다.

 

미국의 버클리와 스탠포드에서 각각 독자적인 아키텍처를 개발하여 발전시켜 나갔는데 

스탠포드에서 유래한 CPU는 SPARC, POWER CPU가 있습니다. 

주로 그 시대의 중대형급 서버 컴퓨터에서 쓰였습니다.

 

그리고 버클리에서 유래한 아키텍처가 MIPS CPU 입니다. 

MIPS CPU도 중대형급 서버 컴퓨터에 쓰였습니다. 주로 그래픽 작업용 워크스테이션에 쓰였습니다.

데스크탑 시장에는 비록 도전했으나 인텔의 철옹성영역으로 실패를 하였고, 

아이러니하게도 CPU가 소형화 되면서 임베디드 기기및 게임기에 다시 쓰이게 되었습니다. 

90년대 중반 소니의 게임기 플레이스테이션 1이 서버급 CPU가 쓰였다는 광고를 하였는데

3D 폴리곤 처리 기능까지 갖추고도 저렴한 가격에 대 히트를 치면서 성공을 거두게 되었는데 

이때 사용된 CPU가 MIPS core 입니다. 

 

(정확히는 MIPS R3000 32비트 CPU이고 아이러니 하게도 3D 연산에 필요한 

부동소수점 연산 기능은 없습니다. 그래서 3차원 계산시에는 고정소수점 연산기능을 

이용해야 하는 반쪽짜리 3d CPU였습니다.)

 

MIPS 코어는 아직도 32비트 PIC 시리즈에 사용되고 있습니다.

 

 

MIPS CPU는32비트 RISC CPU이지만 어셈블리 명령어가 난해하고, 효율적이지 못한 단점이 

있었습니다. 

 

한편 Acorn이라는 영국회사에서 Acorn 이라는 RISC 아키텍처를 개발하고 자신의 

컴퓨터에 사용을 해 왔습니다만 한때는 잘 나갔으나 당대의 거물 매킨토시나 IBM에 밀려서 

사세가 기울었고, ARM 아키텍쳐를 애플과 VLSI의 조인트 벤처 기업인 ARM 에 팔았습니다. 

 

오히려 이때부터 ARM CPU의 중흥기가 시작이 됩니다. 

ARM사는 스스로 CPU를 생산하지 않고 ARM 코어를 여기저기 라이선스 해 주는 전략으로 

데스크탑 이외의 각 분야에 ARM 코어를 보급하였습니다. 

 

인텔이 데스크 탑 시장을 장악하고 있는동안 ARM은 그 밖의 시장을 장악했습니다.

게임기, 가전제품, 공유기, PDA에 이르기까지 거의 대부분이 ARM 코어를 사용하고 있습니다.

초창기에는 단지 저전력의 32비트 CPU정도로만 인식되던  CPU가 이후 코어 CPU의 속도가 

대폭 향상되어 일반 데스크탑 CPU에 버금가는 저가형 CPU들이 제조 되었습니다.

 

(라즈베리 파이 1, 라즈베리 파이 2에 쓰인 CPU도 각각 ARM V6, ARM cortex-a9 쿼드 코어급 

CPU가 쓰이고 있습니다.)

 

 

  잠깐 다른주제의 내용을 이야기 하겠습니다.

  라즈베리 파이 1,2 의 운영체제로 사용되는 리눅스는 임베디드 리눅스가 아닙니다. 

  그냥 32비트의 완전한 리눅스 입니다.

 

  임베디드 리눅스란 MMU가 없거나 메모리가 부족한 한정된 분야에서 쓰이기 위해서 

  리눅스시스템의 최소부분만을 남긴 리눅스를 의미하는데

  라즈베리 1,2 의 경우 메인메모리 512~ 1GB, 저장장치 2~32GB ARM 32비트 CPU 등을 

  채용하고 있기 때문에 완전한 리눅스 머신으로 볼수 있으며

  각종 리눅스 패키지의 배포판 (debian, ubuntu, arch linux)을 수정없이 바로 이용할 수 있기 때문에 

  완전한 리눅스 시스템으로 보는것이 타당합니다.

 

  반면에 공유기, 휴대폰, 게임기 등에 쓰이는 리눅스는 그 한정된 메모리나 저성능의 arm코어 

  등을 사용하는점에 비추어 임베디드 리눅스라고 할 수 있습니다.

 

  심지어는 서버의 역할로서 충분히 기능 할 수 있으므로 

  개인용 웹 서버를 운영하는일도 가능할 정도입니다.

 

  현재 불과 몇만원정도에 서버급의 리눅스 머신이 팔리고 있다는 사실은 10년전만해도 상상하기 

  힘든 현실이 되었습니다.  

 

 

 

임베디드 기기의 경우에 대부분 8비트 CPU가 주류였으나 복잡한 계산및 속도가 필요하게 되면서 

임베디드용 MCU에도 32비트급 CPU가 필요해 졌습니다.

그리하여 MIPS의 임베디드 시장 진출이 먼저 이루어 졌고, 뒤이어 ARM core도 임베디드 시장에 

진입하게 됩니다.

 

원래의 ARM CPU는 외부에 메모리등을 추가로 달아줘야 했습니다. (일반적인 CPU) 

이러한 ARM cpu가 임베디드 영역에 쓰이기 위해서는 몇가지 기능이 새로 추가가 되었습니다.

즉 임베디드 시장의 수요가 32비트로 넘어가게 되면서 성능과 저전력을 타협하여 

 

극단적인 고 성능(CLOCK 1GHz 이상)대신에 임베디드 기기에 적당한 클럭(80MHz 이하)을 

가지고 CPU 내부에 메모리와 제어유닛을 포함하는 형태로의 ARM 코어가 발전하게 됩니다.

(ARM cortex-m0 시리즈)

 

이때 ARM 코어 특히 cortex-m0 시리즈는 32비트 CPU의 장점을 가지면서 저전력이고, 

게다가 라이선스만 취득하면 누구나 CPU의 제조가 가능했기 때문에 

수많은 임베디드 CPU제조 업체가 cortex-m0 시리즈 MCU를 생산하기 시작했습니다.

다음 그림은 icbanq 에서 판매가 되고 있는 ARM cortex-m0 코어를 가진 MCU 종류들입니다. 

 

 

(그림 1) ARM MCU


종류도 다양하고 제조사도 다양한 것을 알 수 있습니다. 

심지어 가장 저렴한것은 1000 원대부터 가격이 형성되어 있습니다!!

 

ARM 코어는 저전력의 RISC CPU 이면서도 CISC CPU가 가지는 장점을 추가하고 

또한 C 언어에서 쓰이는 언어 형식(pre increment, post increment) 등을 어셈블리에 

직접 도입하여 명령어의 효율성이 대폭 증대되었습니다.

 

그리고 이시점부터 고성능 임베디드 CPU의 거의 대세가 되다시피 하였습니다.

우리가 실생활에 쓰는 첨단 IT기기의 대부분은(인텔 CPU가 장착된 노트북등을 제외하면) 

ARM 코어를 사용한다고 해도 과언이 아닙니다. 

 

심지어는 초소형 시계, 게임기, 공유기내부에서 쓰이는 CPU도 ARM 코어 입니다. 

애플워치나 아이패드 아이폰에는 어떤 CPU가 쓰였을까요?

ARM 기업의 초기 투자자가 애플사라는것은 아시죠?

그래서 이제는 임베디드를 하면서 ARM 코어에 대한 이해가 없으면 안되는 정도가 된 것입니다.

 

지루한 역사 이야기를 해서 재미가 없으셨죠?

암튼 읽어 주셔서 감사합니다.

 

이번시간에는 현세대 임베디드 CPU의 대표격인 ARM core에 대해 알아보았습니다.

다음 시간에는 ARM core가 사용된 개발보드의 하나를 리뷰해 보고 

사용하는 방법을 간략하게 살펴 보겠습니다.

 

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

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

 

 

관련 사이트 

 

http://www.icbanq.com/shop/product_list.asp?catg_code=102117100&orderby=3&theme_code=&list_type=3&areaPowerList1=

&areaPowerList2=&areaPowerList3=&areaPowerList4=&prod_mfg=&searchtext=

arm&pagesize=10

 

관련 물품

 

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

 

 

[아이씨뱅큐 ICbanQ 파워블로거 2기] 임베디드 기초 2 - LED 부록

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

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

 

안녕하세요. 

고명호 입니다. 

지난번에는 정보를 표시하는 용도의 LED를 살펴 보았습니다. 

이번에는 조명용으로 사용되는 LED에 대해서 알아보겠습니다.

조명용의 LED는 일반적인 실내 조명이외에도 사용되는 분야가 많은데

대표적인 장치는 액정 모니터를 들 수 있습니다.

 

 

액정 모니터에는 액정판넬 이외에도 조명을 위한 백라이트부분이 필요합니다.

이러한 백라이트는 CCFL 또는 LED, 인버터 또는 LED driver, 도광판 등등이 필요한데 

인버터는 CCFL에서 필요한 

고압을 만드는데 이용되며 도광판은 CCFL에서 발생한 빛을 화면전체에 확산 시키는 역할을 합니다.

CCFL과 인버터, LED와 LED driver, 도광판에 대해서 간략히 알아 보겠습니다.

 

 

백색 LED가 모니터의 조명으로 사용되기전 액정모니터의 광원으로는 CCFL이 사용되었습니다.

(2000년대 초 ~ 2000년대 중반)

CCFL은 형광등이지만 일반 형광등과는 약간 다릅니다. 

액정모니터의 광원에 사용되는 형광등을 CCFL이라 부릅니다.

일반 형광등은 열음극관(Hot Cathode Fluorescent Lamp-HCFL)으로 불리는 것으로 

전극을 가열하여 열전자를 방출하고 이 열전자가 형광등 벽면의 형광물질에 부딪혀 빛을 냅니다.

 

이와 달리 냉음극관(Cold Cathode Fluorescent Lamp-CCFL)은 음극을 가열하지 않고 

전자를 방출하는데 대신에 전자를 방출하기 위해서 고압의 전압이 필요합니다. 

냉음극관의 경우 효율은 열음극관보다 떨어지지만 수명이 길고, 열발생이 적기 때문에 

자주 교체를 할 수 없는 초창기의 액정모니터에서의 광원으로 쓰였습니다.

 

또한 액정 모니터에 사용된 형광등은 화면의 양 테두리에 위치하기 때문에 그 크기가 길고 

가느다란 것이 특징입니다. 

 

 

일반 형광등에 비해서 수명이 길지만 역시 이것도 수명이 존재하기 때문에 시간이 지날수록 

백색 균일도가 떨어지고, 화면의 백색이 누렇게 바래지다가 나중에는 화면이 안들어 옵니다.

이것은 형광등의 수명이 다하여 액정은 작동하지만 화면의 광원은 꺼진상태 입니다.

(자세히 보면 화면의 내용은 보입니다.) 

 

또다른 고장으로는 인버터의 수명이 다한 경우도 있는데 

이 경우에도 마찬가지로 백라이트가 작동하지 않습니다.

2000년대 중반의 모니터는 이런식의 고장이 많이 났었습니다.

그래서 CCFL만 전문적으로 판매하는 곳도 있었고, 수리를 해 주는 곳도 있었습니다.

 

저도 CCFL을 사용한 모니터가 있었는데 거금을 들여 구입한 모니터라 애착이 많이 가서

고쳐 쓸 수 있는 방법을 연구했었습니다.

저는 제 모니터를 LED 백라이트로 바꾸는 기사를 국내 최초로 게재하였고, 

이후 많은 분들이 그 아이디어를 따라하게 되었습니다.

 

(참고사이트)



<인버터>

 

냉음극관(Cold Cathode Fluorescent Lamp-CCFL)은 음극을 가열하지 않고 전자를 방출하기 때문에 

전자를 방출하기 위해서 고압이 필요하다고 하였습니다. 이러한 고 전압을 만드는 장치가 

바로 인버터 입니다. 

 

따라서 인버터 역시 고장이 쉽게 나며 수명이 존재 합니다. 

인버터는 CCFL을 사용하는 액정 모니터에서 밝기 조절의 역할도 해 주는데, PWM방식을 사용하거나 

또는 출력 전압을 조절하는 방식으로 밝기를 조절합니다.

LED모니터에서는 이러한 밝기 조절을 LED driver가 대신 합니다. 

 

 

<도광판>

 

일반적으로 액정의 측면에서 빛을 비추는 방식을 엣지형이라고 부르는데, 엣지형의 경우에는 

빛을 화면상에 얼마나 균일하게 퍼 뜨리느냐가 중요합니다. 

이렇게 측면에서 들어온 빛을 화면 전체에 균일하게 뿌려주는 판을 

도광판이라고 부르며 액정모니터의 뒷면에 투명한 아크릴판이 바로 도광판입니다.

(그냥 단순한 아크릴판이 아니고 수많은 홈들이 촘촘히 파여 있어서 가장자리에서 들어오는 빛을 

전체 화면으로 균일하게 퍼 뜨리는 역할을 해 줍니다)

 

 

(도광판 사진)

 

 

 

최근의 모니터들은 전부 LED를 광원으로 사용하기 때문에 그 수명이 길고, 또한 

백색 균일도도 거의 일정합니다.

그래서 저는 진열장용 LED bar를 이용하여 모니터의 백 라이트를 교체 하였으나, 

현재는 CCFL이 사용된 모니터를 LED로 바꿀수 있는 킷트류가 판매되어서 

구형 CCFL 모니터를 훨씬 간편하게 LED 액정 모니터로 바꿀수 있게 되었습니다.

최근에 제가 구입한 키트입니다.

 

 

(LED 키트 사진)

 

사진을 보시면 길다란 띠에 백색 LED가 촘촘히 박혀서 CCFL형광등이 들어가는 자리에 맞추어 

넣을 수 있도록 되어 있습니다. 

정보를 표시해 주는 액정화면은 동일하며 단지 CCFL인가 LED 인가의 차이만 있기 때문에 

CCFL을 LED로 교체해 주는것 만으로도 색감이 달라집니다.

즉 CCFL을 LED로 교체하여 색감및 수명이라는 두마리 토끼를 다 잡을수 있는 것 입니다.

 

CCFL 액정 모니터의 인버터가 해 주는 역할은 'LED driver' 라는 것이 대신 해 줍니다.

인버터처럼 고압을 발생시키는 것은 아니지만 상당한 전류를 소모하기 때문에 대응 회로가 

필요합니다.

LED에 가해지는 전압을 조절하거나 PWM 방식으로 화면의 밝기를 조절 할 수 있습니다.

 

 

 

예전에 제가 LED bar로 작업할 때에는 이러한 LED driver가 없어서 화면을 항상 같은 밝기로 놓고 

사용할 수 밖에 없었습니다.

저는 CCFL 대신에 진열장용 LED bar를 사용하였고, 당시에 LED 드라이버가 없어서 그냥 12V에 

직결하여 LED모니터로 개조를 하였습니다. 

이런식으로 모니터를 살려서 15년전 모니터를 아직도 잘 사용하고 있습니다.

현재도 고전게임할때 간간히 쓰이고 있습니다.

예전처럼 부품구하러 다닐 필요가 없이 인터넷 쇼핑몰에서 구입이 가능합니다.

 

 

또한 LED는 자동차의 전조등에도 쓰이며 빔 프로젝터의 할로겐 램프도 대체하고 있습니다. 

빔 프로젝터에 쓰이는 광원의 경우 매우 밝은 빛을 내기 때문에 예전에는 백열등 대신에 

할로겐 램프를 이용하였고, 항상 높은 열이 발생하여 수명이 길지 않다는 단점이 있었습니다. 

따라서 빔 프로젝터에는 냉각용 팬 및 전구를 교체할 수 있도록 개폐식 기구물을 가지고 있었습니다.

 

 

(구형 액정 프로젝터 사진)

 

 

그렇지만 최근에는 LED를 광원으로 사용하게 되어 밝기는 조금 떨어지지만 

거의 반영구적인 수명을 갖게 되었고 따라서 냉각팬및  

개폐식 전구 교환장치는 더이상 필요하지 않게 되었습니다.

 

 

(최근 구입한 중국산 액정 프로젝터 사진) 

 

 

 

이렇게 LED는 우리 실생활에 점차 넓게 쓰여가고 있습니다.

이번에는 LED가 조명으로 사용된 몇몇 분야에 대해서 알아 보았습니다.

다음에는 본격적으로 임베디드 디바이스및 MPU에 대해서 알아 보도록 하겠습니다.

이상으로 글을 마치겠습니다.


감사합니다.

 

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

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

 

관련 사이트

 

https://en.wikipedia.org/wiki/LED-backlit_LCD_display


http://blog.naver.com/jimypage/220396579174


관련상품

 

http://www.icbanq.com/shop/product_detail.asp?prod_code=P005587436

http://www.icbanq.com/shop/product_detail.asp?prod_code=P000173330&catg_code=100115106

 

 

[아이씨뱅큐 ICbanQ 파워블로거 2기] 임베디드 기초 2 - 출력장치(LED)

임베디드 기초 2 - 출력장치(LED)

 

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

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

 

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

지난번에는 임베디드 디바이스 입력장치의 기초인 버튼(스위치)에 대해서 알아보았습니다.

이번에는 임베디드 디바이스의 출력장치, 그중에서도 가장 제어가 간단한 LED에 대해서 

알아보겠습니다.

 

LED는 Light emitting diode 의 약어로 발광 다이오드라는 뜻인데

한방향으로 전기를 흐르는 '다이오드'이면서 을 내기 때문에 위와 같은 이름으로 불립니다.

반도체에서의 전자의 흐름으로 빛을 내기때문에 열로 손실되는 에너지가 거의 없이 

에너지 효율이 좋기때문 다양한 분야에서 이용되고 있습니다.

LED의 초기 용도는 주로 정보를 표시하는 용도 였으나 최근에는 고효율 고휘도의 백색 LED가 

상용화 되어 현재는 LED는 정보표시의 용도뿐만 아니라 조명용으로도 쓰이고 있습니다.

 

 

LED의 구조 - 출처 wikipedia >

 

맨 처음 LED가 개발된것은 1900 년도(electroluminance 현상 발견)이나 본격적으로 

상용화 된것은 1962년으로 비교적 짧은 역사를 가지고 있습니다.

LED가 상용화 되기 전에는 정보의 출력은 주로 꼬마전구등 작은크기의 백열등이 그 역할을 

담당하였으며, 또한 조명용으로는 할로겐등이나 형광등, 광원용 백열등이 주로 사용되었습니다.

 

LED가 백열등을 대체할수 있는 이유는 그 에너지 효율성에 있습니다.

백열등역시 에디슨의 발명이래 계속 성능이 향상 되었음에도 

(태생적인 한계상) 에너지 효율이 좋지 못했기 때문에 

각종 전자기기및 기계장치에서의 정보의 표시는 점차 LED로 대치 되었습니다. 

 

마찬가지로 조명용 LED는 형광등 및 백열등을 점차 대치하고 있는 추세입니다만,

조명용 LED는 비교적 최근에 개발되었고, 따라서 비쌉니다. 

비록 에너지 효율은 우수하지만 그 높은 가격때문에 아직 형광등을 전부 대치하지는 못했습니다.

현재는 컴퓨터 모니터 및 신축 건축물의 조명에 쓰이고 있는데 

컴퓨터 액정모니터의 백라이트에 사용된 형광등(CCFL)은 대부분 LED로 대치가 되었으며, 

거의 반 영구적인 수명을 가지고 있다는 장점이있지만 가격이 비교적 고가이기 때문에 

실내 조명용으로는 아직 형광등, 백열등을 전부 대치하지는 못하고 있습니다.  

오히려 기존 조명기구와 공존하는 형국으로 형광등 백열등 소켓에 삽입가능한 어댑터가 부착된 

LED 램프형식으로 판매되고 있습니다.

 

 

<백열등 소켓에 삽입 가능한 led 전구 - 출처 wikipedia>

 

에너지 효율만 보아서는 더 우수하지만 초기 비용때문에 현재는 형광등, 백열등도 함께 

사용되고 있습니다.

즉 정보표시용은 거의 LED만이 사용되는 반면에 조명용은 아직 

형광등, 백열등, LED 등이 혼재하여 사용된다고 볼 수 있습니다. 

 

조명용의 고휘도 LED의 경우 빛의 3원색전부가 개발된 것은 비교적 최근의 일로 

2000년대 초반, 중반까지도 여전히 백열등 또는 형광등이 많이 이용되었습니다.

최초 1976년 고휘도 적색 LED가 개발되었고, 1994년 고휘도 청색 LED가 개발되면서 

빛의 3원색을 전부 표시할수 있게 되어 드디어 백색광 LED가 개발및 상용화 되었고 

조명용의 LED가 본격적으로 사용되기에 이르렀습니다.

 

컴퓨터에 사용된 형광등은 일반 조명용 형광등과 약간 다릅니다.

일반 조명용 형광등은 HCFL(Hot Cathode Fluorescent Lamp-HCFL) 이라 불리우며 

고열에서의 전자가 방출되는 원리를 이용하여 빛을 내는데,  

컴퓨터 모니터에 사용된 형광등은 CCFL(Cold Cathode Fluorescent Lamp-CCFL)라 불리우며

고압에서의 전자가 방출되는 원리를 이용하여 빛을 내는 차이가 있습니다.

컴퓨터에서 쓰이는 형광등은 전류를 조금 더 소모하더라도 작고 수명이 길어야 하기 때문에 

CCFL이 사용되며 , 일반 조명의 경우에는 수명보다 효율이 중요하기 때문에 HCFL이 사용됩니다.

 

 

 

< 모니터용의 CCFL, 일반 형광등 - HCFL >

 

 

아무튼 CCFL보다 더 긴수명의 조명이 바로 백색 LED를 이용한 조명인데요, 

이번 임베디드 강좌에서는 조명용 광원은 제외하고 

나머지 다른용도, 즉 정보를 표시하기 위한 용도의 LED에 관해서 살펴볼 것 입니다.

(다음회의 게시물에는 조명용 LED에 대해 살펴 보겠습니다.)

 

예전 꼬마전구나 닉시관(nixie tube)같은 백열등의 경우 

특정 임베디드 프로세서에서 불을 켤수 있을정도로 충분한 전류를 흘려주지 못하기 때문에 

켜고 끄는것이 트랜지스터등의 외부 회로의 도움 없이는 불가능 했습니다. 

그러나 LED의 경우에는 비교적 적은 전류(20mA 이하)만을 소비하기 때문에   

대부분의 임베디드 프로세서의 출력으로 직접 LED를 켜고 끄는 것이 가능하고 

따라서 회로또한 간결해 지는 잇점이 있습니다.

 

 

일반적인 임베디드장치는 대개

 

입력 -> MPU에서의 입력된 정보가공 -> 출력

의 흐름으로 동작을 합니다.

 

TV의 리모컨을 가지고 예를 들어보겠습니다. 

 

 

TV의 리모컨 버튼이 눌림 -> 


눌린 버튼에 따라서 코드발생 -> 


각 코드에 맞게 적외선 LED를 점멸해 줌 




-> TV에서는 이 점멸되는 LED의 적외선을 읽어서 원하는 동작을 수행함..


 

 

마찬가지로 PC에서 사용되는 키보드의 경우에도 내부의 MPU가 거의 비슷한 동작을 합니다. 

눌린 키보드의 키에 대한 정보를 PS/2(USB) 형식의 값(스캔코드)으로 변환한 후 

PC의 키보드 단자(USB단자)를 통해서 스캔 코드를 전송하게 됩니다.

스캔코드의 전송은 클럭펄스및 시리얼 데이터 값이 전송되는데 이러한 값을 전송하기 위해서는 

타이밍및 충돌 검출등의 복잡한 프로그램이 필요합니다. (USB의 경우에는 더욱 복잡합니다.)

그렇지만 LED의 경우에는 단순히 켜고 끄는 동작만으로도 직접 눈으로 확인할 수 있기 때문에 

임베디드 디바이스의 출력장치중에서 가장 간단하고 확인하기 쉽습니다.

 

MPU가 사용되지 않은 가장 간단한 회로는 다음과 같이 구성할 수 있습니다.

 

그림 2-1 간단한 LED 회로 >

 

즉 BUTTON 을 입력받아 입력된 버튼이 눌린경우에는 LED 가 켜지는 회로를 만들면 

버튼이 입력됨과 동시에 LED가 켜지는 것을 확인 할 수 있습니다.

이 회로를 확장하여 입력버튼과 출력 LED 사이에 아두이노등 임베디드 프로세서를 끼워 넣어서 

다음과 같은 회로를 만들수 있습니다. 

 

< 그림 2-2 MPU를 이용한 LED 회로 >

 

이처럼 중간에 끼어 있는 임베디드 프로세서를 이용하여 복잡한 동작을 할 수 있게 됩니다.

예를 들자면 단순히 LED를 켜고 끄는 것 이외에 일정한 속도로 점멸을 시키거나 

그 이상의 아주 빠른 속도로 점멸을 해 주어서 LED의 밝기를 조절 할 수있습니다.

사람의 눈은 1/60초 이상의 빠른 동작은 인식할 수 없기 때문에 밝기가 달라진 것으로 인식하게 

됩니다.

이러한 방식의 밝기 조절을 PWM 방식이라고 합니다.(pulse width modulation - 펄스 폭 변조)

 

그런데 그림에서는 LED만 사용된것이 아니고 직렬로 저항이 삽입되어 있습니다.

LED를 MPU와 직접 연결하기 위해서는 직접 연결하는 것이 아니고 

오히려 중간에 전류 제한용 저항을 달아 주어야 합니다.

직접 MPU에 연결하면 순간적으로 많은 전류가 흘러서 LED를 손상시킬 우려가 있기 때문입니다.

정확하게는 각 LED의 스펙에 맞는 저항치를 선택하여 회로상에 직렬로 연결을 해 주어야 합니다만 

대개는 100옴 이상의 저항을 달아주면 특별한 문제는 없습니다. 

(대개 220, 330 옴 또는 1k 옴 저항을 사용합니다)

저항은 MPU와의 사이에 달거나 아니면 전원과 LED의 사이에 달거나 

둘중 아무곳에 달아도 상관은 없습니다. (전압분배)

버튼에 병렬로 연결하는 풀업저항은 MPU내부의 풀업저항이 있는경우 연결하지 않아도 상관 없으나, 

이와 달리 LED에 직렬로 연결해 주는 저항은 반드시 달아줘야 합니다.

이는 전류제한을 위해서 반드시 필요한 저항입니다.

좀더 자세하게 저항값을 조절하려면 다음 글을 참고하세요.

 

https://learn.sparkfun.com/tutorials/light-emitting-diodes-leds

 

LED도 버튼에서처럼 MPU가 5V(HIGH)를 출력할때 켜지게 하거나 

MPU가 0V(GND- LOW) 를 출력할때 켜지게 하거나를 선택할 수있습니다.

 

<1을 출력할때 켜지는 회로>

 

 

 

<0을 출력할때 켜지는 회로>


대개 LED 의 경우에는 큰 전류가 필요하지 않고 MPU의 출력핀 하나당 1개 정도의 

LED만을 구동하기 때문에 fan out이 문제 되지는 않습니다. 

따라서 대부분 5V(3.3V)를 출력할 때 켜지도록 설정을 하고 사용합니다.

단순히 한개의 LED 점멸뿐만 아니라 LED 7 개를 8 자 형태로 배치하여 

각 LED를 켜고 끔으로써 숫자를 표시할 수도 있습니다.

이런 LED를 특히 세그먼트 LED라고 부르며 전자 시계나 기타 전자기기에서 

숫자를 표시하는데 사용되고 있습니다.

 

 

 

임베디드 프로세서의 LED 점멸은 매우 간단합니다. 

그림 1의 회로에서는 I/O 핀에 1 (high)를 출력하면 LED가 켜지며 

그림 2의 회로에서는 I/O 핀에 0 (low)를 출력하면 LED가 켜집니다.

아두이노에서는 다음과 같은 명령으로 켜고 끌수 있습니다.

 

 

digitalWrite(13, LOW);

 

digitalWrite(13, HIGH);

 

 

또한 임베디드 프로세서의 경우 매우 빠르기 때문에 

단순 켜고 끄는것 이외에 매우 빠른 속도로 점멸시켜서 색의 밝기도 조절이 가능합니다.

 

최근의 대형 전광판의 경우 각 화소 하나하나에 고휘도 RGB LED를 대응시켜서 

화소의 펄스폭 변조방법으로 밝기를 조절하여 다양한 색상을 나타낼수 있습니다.

원래 전광판에는 전구가 사용되었습니다. 전광판도 고 효율의 LED로 대치되었습니다.

 

  '전광판'

 

여러 개의 전구를 평면에 배열하고 전류를 통하여 그림이나 문자 따위가 나타나도록 만든 판. 

[비슷한 말] 전광게시판.

 

 

LED를 사용한 전광판 >

 

이상으로 가장 간단히 구성 가능한 출력 장치인 LED에 대해서 알아 보았습니다.

다음번에는 LED가 조명용으로 쓰이는 예인 LED모니터를 분해해 보고 

구형 일반 모니터를 LED로 바꾸는 법에 대해서 알아보겠습니다.

 

감사합니다.

 

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

 

 

관련 사이트

 

http://www.icbanq.com/shop/product_detail.asp?prod_code=P002331961

https://learn.sparkfun.com/tutorials/light-emitting-diodes-leds

 

관련상품

 

http://www.icbanq.com/shop/product_detail.asp?prod_code=P002331961

http://www.icbanq.com/shop/product_detail.asp?prod_code=P005627998&catg_code=

http://www.icbanq.com/shop/product_detail.asp?prod_code=P001586253&catg_code=107112114

http://www.icbanq.com/shop/product_detail.asp?prod_code=P000098936