2014년 5월 15일 목요일

6. AVR(atmega168) 프로그래밍 하기 - ISIS Proteus 사용해서 LED 켜보기.

좀 바뻤던 핑계로 이제 다시 글을 씁니다.
이번에는 Atmega168에 프로그램밍을 하도록 하려고 합니다.
그런데, 실물 하드웨어를 납땜해서 만들기 보다는(물론, 이미 갖고 놀만한 실물은 있지만..) Proteus를 사용해서 돌려보려고 합니다. 코드는 Atmega Studio 6.0을 사용할 거구요.

그럼, 오늘 할 것을 간단히 소개합니다.

1. 주제: Atmega168을 이용해서 LED 깜박이기
2. 준비물

  • ISIS Proteus 7.0 (아니면, 더 좋은 버전으로)
  • Atmega Studio 6.0 (아니면, 더 좋은 버전으로)
  • 끝.
3. 어떻게?
  • Proteus로 간단히 회로를 그린다.
  • Atmega Studio로 간단한 코딩을 한다.
  • 컴파일하고, ELF파일을 Proteus에 연결한다.
  • 그리고, Simultation 버튼을 누른다.
  • 끝.
말로만 하니까 뭔가 와닿지가 않죠? 그럼, 아래 그림을 보세요.



이것이  프로테우스로 시뮬레이션을 하기 위한 회로도 입니다.
회로는 최대한 간단하게,, PD0에는 LED(Green)을 연결했고, Reset을 위한 간단한 회로와 전원 연결 표시용 LED(RED)만 되어 있지요.

Green LED를 구동시키기 위해서는 PD0(Port D의 0번째)에 On(0V), Off(5V) 신호만 해주면 LED가 깜박이겠죠. 즉, Green LED(D3)의 Anode(양극:삼각형 표시쪽)가 R13에 연결되어 Vcc(5V) 전원단에 연결되어 있잖아요.. 그리고, Green LED의 Cathode는 PD0에 연결되어 있지요. 따라서, PD0의 출력상태(On or Off)에 따라서 Green LED는 켜지거나 꺼지는 거죠.


다시 요약하면,

PD0 = Off(0V) --> Green LED 동작 --> 켜짐.
PD0 = On(5V출력) --> Green LED 미동작 --> 꺼짐.

아시겠죠?

참고로, LED 사용시는 대략 200~300오옴 정도의 저항을 붙여 주세요. LED오래 쓰시려면요.
안그러면, 훌러덩 맛이 가는 사태가 발생할 수 있어요.

왜그러냐구요?

일반적으로 다이오드(LED도 다이오드니까..)는 forward voltage조건이 넘어서면 미친듯이 전류가 증가하죠. 다이오드 특성그래프 한번 찾아 보세요. 대충, 0.6V 넘어서면 훌러덩 전류가 급증하잖아요. 그러다보니, 얘를 제어할 필요가 있죠. 한마디로, 다이오드는 조울증 환자에요. 어떤때는 Off였다가 조금만 기분이 맞으면(즉, Forward voltage조건 충족시) 금새 미친듯이 전류가 증가해요. 그래서, 약이 필요한데,, 그것이 바로 R13 저항이죠. 

내친김에, 아래 스펙을 보세요. Green LED의 것인데, Vf=2.2V, If = 10mA 정도죠.
그럼, Green LED에 흐르는 전류를 계산해봅시다. 

I(D3) = (Vcc - Vf) / R13 = (5.0 -2.2) / 220 = 12.7 mA 
(시뮬레이터에서는 11.5mA 로 나오네요)


아무튼, 이렇듯 LED 사용시에는 LED를 보호하기 위한 전류제한용 저항을 꼭 잊지 마세요.


그럼, 소스코드를 좀 보겠습니다. Atmega Studio 6.0 을 사용하고 있습니다.
(Atmega Studio 관련해서는, 제가 지난 글 올린 것 참조하세요)
보시면, 직관적으로 알 수 있습니다. 순서를 간략히 얘기하자면,

  1. PORTD의 입출력 모드를 설정해주고,
  2. PORTD의 초기값을 넣어 주시고, (물론, 이 경우에는 PD0의 값만 넣어도 됨)
  3. 무한루프(while(1))에 원하는 코드 넣기.(XOR을 사용하여 PD0를 토글 시킴)
참고) 깜박이는 것이 보이게 하기 위해서 Delay 100ms를 넣어줌. 안그러면 너무 빨라서 안보임.

Proteus에는 오실로스코프도 준비되어 있어서,, PD0를 파형을 한번 볼께요.
정확히, 100ms 단위로 On/Off 되지요.



이왕 한김에, 동영상도 캡쳐했어요. 보시죠.




오늘은, 여기까지 하구요..

앞으로 조금씩 글을 올리면서 재밌는 것을 해볼께요.
저도 좀 자료도 찾아보면서 공부를 좀 해야 겠네요..^^

그럼, 이만 총총.




댓글 없음:

댓글 쓰기