임베디드 레시피

Egloos | Log-in





LED를 ON/OFF 제어하려면?

LED를 ON/OFF 제어하려면?
 
뭘 알아야 이해를 하지
임베디드 시스템에서 무언가를 제어해 보고 싶다면 제일 먼저 살펴봐야 될 내용이 엠시유 데이타 시트와 개발용 보드의 회로도 입니다.
엠시유 데이타 시트는 엠시유의 각종 페리퍼럴이나 시피유에 대해 소개된 문서랍니다. 엠시유의 메모리 어드레스가 어떻게 되는지, 지피아이오(GPIO)는 몇 개나 사용할 수 있고 해당 어드레스는 어딘지 등등 엠시유 만드는 회사에서 데이타 시티를 만들어 배포하고 있죠. 그럼 이러한 엠시유 데이타 시트를 보고 개발자는 프로그램을 만드는데, 중요한 것은 개발용 보드의 회로도가 어떻게 설계되어 있는지를 반드시 확인하셔야 되죠. 엠시유 데이타 시트의 문서 내용은 일반적인 프로그램 방법에 대한 가이드라고 하면, 회로도는 개발하는 타겟보드의 설계도이니 개발자는 프로그램 하실 때 반드시 회로도를 보시고 하셔야 합니다. 그럼 이제 프로그램을 어떻게 하면 되는지 알아 보도록 하죠.
우선 엠시유 데이터 시트에는 개발용 보드 만들 때 어디에다 LED를 연결하면 좋을지에 대해 가이드를 해 줘요. 그 가이드대로 만들면 기본적인 개발용 보드가 만들어져요. 개발용 보드가 만들어 졌다면 프로그램을 만드는 순서를 알아 보죠.
첫 번째, 개발용 보드의 회로도를 살펴보세요. 엠시유 핀들 중에 동작시키고자 하는 LED가 어디에 연결이 되어 있는지 확인을 한답니다.
두 번째, 엠시유 데이타 시트를 열어 보세요. LED의 어드레스를 찾아야 하니까요. 

 
위의 그림과 같이 회로도를 보니 GPIO1번 핀에 RED LED 가 연결 되어 있네요. 그리고 반대편에는 VCC라고 되어 있군요. 엠시유 데이타 시트를 열어서 GPIO 1 번 핀의 어드레스가 어디인지 확인해 봐야 하는데, 일반적으로 엠시유 데이타 시트마다 어드레스가 다를 수 있으니 반드시 참고하셔야 해요. 그럼 여기서는 임의로GPIO 01 ~ GPIO4까지 하나의 그룹으로 이루어져 있고, 이 그룹의 어드레스는 0x1230 라고 가정을 할게요. 이제 어드레스를 확인했으니 GPIO 1에 어떤 신호를 줘야RED LED가 ON이 될지 알아봐요.
LED가 켜지는 원리는 초등학교 시절 LED를 한번씩은 켜 봐서 알고 있으시죠? 여기서 우리는 LED에 어떤 신호를 줘야 LED가 ON 된다는 것을 알고 있는데, 씨 언어로 표현하기 위해서는 가장 기본적인 것을 이해하셔야 해요. 하나의 핀에는 0 또는 1이라고 줄 수가 있어요. 그럼 0은 뭐고 1은 뭘까요? 0은 마이너스(GND) 신호이고, 1은 플러스(VCC) 신호랍니다
씨언어로 이렇게 표현하죠.
PORT = 0x1      --->    VCC 이고
PORT = 0x0      --->    GND 랍니다.
 
그럼 위의 회로도에서 보면 RED LED가 VCC로 연결되어 있으니 엠시유 쪽에서는 GND 신호가 나가면 RED LED가 ON 되겠죠. 자~! 요렇게요.
PORT(0x1230) = 0xE             -->     0y1110
반대로 RED LED OFF 하려면
PORT(0x1230) = 0xF             -->     0y1111

BLUE LED ON은
PORT(0x1230) = 0x7             -->     0y0111
반대로 BLUE LED OFF 하려면
PORT(0x1230) = 0xF             -->     0y1111

그럼 LED 전체가 불이 들어오게 하려면 어떻게 해야 할까요?
PORT = 0x0             -->    0y0000

프로그램이 재미 있다고 느끼시는 분은 신호등처럼 LED가 하나씩 ON 되게 하는 프로그램에 도전 해 보세요.



 

by 히언 | 2010/02/07 20:33 | SOTO Story | 트랙백 | 핑백(1) | 덧글(4)

Linked at 친절한 임베디드 시스템 개발자.. at 2010/02/07 20:35

... 받으려면? 106 졸업 전까지 반드시 해야 될 일은? 107 LED를 ON/OFF 제어하려면? 108 코어(Core)와 시피유(CPU)의 차이점이 뭐죠? 10 ... more

Commented by 락이즈 at 2010/02/10 00:50
마이크로프로세서 시간에 ATmega128로 실험 했던 기억이 새록새록 나네요~ ^^; 그때 LCD도 막 제어하고 그랬는데..ㅎ 기본적인 개념 잘 설명해 주셔서 감사합니다~
Commented by soto at 2010/02/11 06:58
^^;
Commented by dnjsehd at 2010/03/06 23:14
아직 초보인 저에겐 프로그램이 어렵게만 느껴지네요.
하지만 제가 만든 프로그램이 작동되는 것을 보면
흐뭇합니다.
계속 고고!!
Commented by soto at 2010/03/07 07:50
맞아요. 그런 재미에 살죠. ㅋㅋ
※ 이 포스트는 더 이상 덧글을 남길 수 없습니다.

◀ 이전 페이지          다음 페이지 ▶