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

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

 

임베디드 디바이스에서 필수적인 입력장치

 

(부제:게임기 컨트롤러 수리하기, 고장난 리모컨 고쳐 쓰기)

 

임베디드 카테고리 파워블로거로 선정된 고명호 입니다.

 

 

아두이노나 라즈베리의 경우 경쟁이 치열한 관계로(?^^) 밀려나서 임베디드 카테고리를 맡게 되었습니다.

 

라즈베리나 아두이노쪽보다 임베디드쪽이 훨씬 다양한 주제를 다룰수 있어서 오히려 괜찮은것 같습니다.

 

 

요즘 많이 쓰이는 아두이노나 라즈베리의 경우 이미 완성된 하드웨어로 판매가 되고 있기 때문에 

 

특별히 하드웨어나 임베디드 관련 내용을 쓰기가 적당하지 않습니다.

 

 

그렇지만 아두이노에서 사용되는 atmel MPU를 저수준에서 컨트롤하거나 라즈베리파이의 GPIO를 이용해서 

 

각종 기기를 제어하기 위해서는 임베디드디바이스에 대한 지식이 필수적입니다.

 

 

 

임베디드 분야는 초보자 분들이 접근하기에는 높은 산과도 같이 배울것이 많고 어렵습니다.

 

그래서 저는 쉬운 주제부터 차근차근 접근하여 점차 어려운 주제로 내용을 옮겨 갈까 합니다.

 

먼저 임베디드 다비이스에서 필수적인 입력장치와 출력장치에 대해서 알아보려고 합니다.

 

 

오늘은 입력장치인 스위치, 그중에서도 버튼을 주제로 다루어 보겠습니다.

 

 

 

버튼 - 다음과 같은 종류의 수많은 버튼들이 있습니다.

 

(버튼 그림들)

 

 

 

기계적 움직임이 있는 기구물이기때문에 빈번히 고장나는 부품이지만 가격도 비교적 저렴해서 

 

고장이 나는경우 교체해서 쓰면 됩니다.

 

TV나 오디오에 쓰이는 리모콘의 경우에도 버튼이 쓰이는데 재질이 다릅니다. 

 

그렇지만 리모콘의 버튼의 경우 두께가 얇아야 하므로 위의 그림같은 높이가 높은 버튼은 사용할수 없어서 

 

고무 접점식 버튼을 사용하게 됩니다.

 

고무 접접의 버튼의 경우 가격이 매우 저렴한 반면에 고장시 교체가 쉽지 않습니다. 

 

고장이 나면 새로 완제품을 구입할 수 밖에는 없는데 생산이 중단된 제품의 경우는 수리가 불가능합니다. 

 

이러한 버튼을 수리하는법을 다음에 소개해 보도록 하겠습니다

 

 

 

임베디드 장치에서 버튼은 입력장치의 기본이 됩니다.

 

(스위치는 상태변화를 유지하는 반면 버튼은 상태변화를 누르는 동안만 유지한다는 점만 차이가 있고 똑같습니다.

 

따라서 아래에 설명드리는 버튼에 관련된 내용은 스위치로 바꾸어 읽으셔도 차이가 없는 내용입니다)

 

 

 

버튼의 눌림은 디지털로 감지하기가 용이합니다. 

 

눌리면1 안눌린경우 0 으로 약속을 하거나, 아니면 눌리면 0 안눌리면 1로 약속을 해 놓고 

 

임베디드 디바이스의 핀을 주기적으로 감시 (이런경우를 폴링이라고 합니다.) 

 

하거나 핀의 상태가 변화하는경우 특정 주소를 실행하게(이런경우를 인터럽트 방식이라고 합니다.)하여

 

핀의 변화가 일어나는경우 해당하는 일을 수행하면 됩니다.

 

 

 

스위치나 버튼의 한쪽 끝이 각각 5V(3.3V) 또는 GND에 연결되어있고, 

 

눌릴때 회로가 연결되고 이때 MPU에서 비로소 전압을 파악하여 1 또는 0

 

의 변화를 감지할수 있게 되는 것입니다.

 

그렇지만 스위치나 버튼이 눌리지 않은 경우에는 어떻게 될까요?

 

이 경우에는 핀이 아무곳에도 연결되지 않은 상태가 되어 (floating) 회로가 불안정해 지게되어 

 

입력핀의 값이 부정기적으로 노이즈에 따라 0 또는 1로 변하게 됩니다.

 

이것은 디지털 입력핀이 단순히 디지털 멀티메터처럼 전압을 측정해서 그 값에따라 반응하는 것이 아니고 

 

MOSFET이라 불리는 반도체의 입력으로 사용되기 때문입니다.

 

이 반도체는 입력이 0 또는 1이면 거의 에너지를 소비하지 않고

 

원래의 목적대로 작동을 하지만 전원이 인가된 상태에서 입력핀이 floating 하는 경우 오히려 

 

전력 소비도 많아지고 잡음에도 취약해 지게 됩니다. 

 

따라서 의도치 않게 버튼이 눌린 효과가 나타날 수 있는 것 입니다.

 

아무튼 반도체가 쓰인경우의 입력은 floating 상태로 두면 안되는데 

 

스위치를 floating 상태가 안되게 해 주는 것이 바로 pull up 혹은 pull down 입니다.

 

pull up은 전압을 5V(3.3V) 상태로 묶어 주는 역할을 하며 풀업저항을 5V(3.3V)와 입력단의 중간에 넣어서 

 

구성하며 반대로 pull down은 전압을 GND로 묶어 주는 역할을 하며 풀 다운 저항을 GND와 입력단의 중간에 넣어서

 

구성하게 됩니다.  풀업을 하게되면 스위치가 눌린경우는 0 안눌린경우 1의 상태가 읽혀지게 되며

 

평상시에는 HIGH 상태(1)에서 입력이 유지되다가 버튼이 눌리면 버튼과 직결된 GND로 전류가 흘러 

 

0의 상태가 읽혀지게 됩니다.

 

 

풀다운을 하게되면 평상시에는 GND 상태에서 입력이 유지되다가 버튼이 눌리면 버튼과 직결된 5V(3.3V)에서 전류가 흘러

 

스위치가 눌린경우는 1 안눌린경우 0의 상태가 읽혀지게 됩니다.

 

 

 

 

풀다운을 하거나 풀업을 하는것은 회로를 구성하는 사람의 마음대로 할 수 있습니다.

 

그렇지만 관례상 풀업을 구성하고 눌린경우에 0이 읽혀지도록 하고 있습니다.

 

이유는 대부분의 MCU들이 내부에 풀다운저항은 가지고 있지 않지만 풀업저항을 가지고 있기 때문입니다.

 

(그래서 풀업으로 회로를 구성하면 회로가 간략히 된다는 장점이 있습니다.)

 

 

 

왜 풀다운저항보다 풀업 저항이 반도체 내부에 들어가 있는지 살펴보도록 하겠습니다.

 

대부분의 반도체들은 GND(디지털 0) 출력을 할때 더 많은 반도체를 드라이브 할 수 있습니다. 

 

(즉 소스로 사용될때보다 싱크로 사용될때 더 많은 반도체를 연결할 수 있다는 의미입니다. 

 

이렇게 반도체가 다른 반도체를 몇개까지 제어 할수 있느냐 하는 것을 반도체의 fan out 이라고 합니다.) 

 

이렇게 부논리인경우에 작동을 하게 하는 경우 좀더 많은 반도체들을 서로 연결할 수 있습니다.

 

이러한 연결은 CPU와 메모리혹은 주변장치를 연결하는 버스에서 많이 볼 수 있습니다.

 

버스를 구성할때 버스에는 되도록 많은 장치가 연결될수 있으면 좋을 것입니다.

 

그래서 버스의 제어 신호들은 될수 있으면 많은 장치들이 연결될수 있도록 하기 위해서 

 

부논리 신호(GND로 떨어진 경우)인 경우에 동작하도록 하고 있습니다.

 

이러한 신호는 /CS 이런식으로 버스선 이름앞에 사선을 그어서 부논리 활성화 신호임을 표기하고 있습니다.

 

따라서 풀다운 저항보다 풀업저항이 더 많이 쓰이게 되고 이것이 MPU의 내부에 포함되게 된 것입니다.

 

 

 

 

 

그래서 버튼의 경우에도 0 인경우에 활성화(눌렸다)를 표기하게 하는 의미로 풀업저항을 구성하는 경우가 더 많습니다.

 

 

 

 

아무튼 다음그림과 같이 회로를 구성하면 버튼이 눌린경우에 0이 입력되는 간단한 입력회로를 구성할 수 있습니다.

 

 

내부 풀업저항을 이용하면 회로가 다음처럼 간략해 집니다.

 

 

 

 

 

아두이노등 MPU에서는 이 입력신호를 적당히 해석하여 처리함으로써 원하는 동작을 하게 됩니다.

 

 

 

풀다운이나 풀업저항을 연결한경우 전류의 소비는 어떻게 될까요?

 

지속적으로 전류가 흘러서 불필요하게 전기를 소모하게 되지는 않을까 걱정하지는 않으셔도 됩니다.

 

반도체의 입력단에는 대개 풀다운저항의 10배 이상의 임피던스가 걸리기 때문에 소비되는 전류는 거의 

 

무시해도 될 정도록 적습니다. 오히려 버튼이 눌릴경우에 풀업(다운) 저항을 거쳐서 지나가는 전류가 문제가 

 

됩니다. 따라서 버튼이 자주 눌리지 않는 경우에는 소비전류에 대한 문제는 거의 신경을 쓰지 않아도 됩니다.

 

 

 

오늘은 입력장치인 버튼을 알아보았는데, 다음에는 출력장치인 LED에 대해서 알아 보도록 하겠습니다.

 

감사합니다. 

 

관련 사이트

 

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


관련상품


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