레이블이 AVR R/C 조정인 게시물을 표시합니다. 모든 게시물 표시
레이블이 AVR R/C 조정인 게시물을 표시합니다. 모든 게시물 표시

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 되지요.



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




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

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

그럼, 이만 총총.




2014년 4월 27일 일요일

5. AVR(Atmega168) 간단히 살리기 - 내부 RC Oscillator 로 살리기(2)

지난 글에 이어서, 내부 RC Oscillator를 사용하여 Atmega 살리기를 계속 해 보겠습니다.

지난 글에서 중요한 것은, USB ISP 연결을 위한 6 Pin 연결이었습니다. 그림대로 USB ISP와 Atmega168을 연결했다면, USB ISP를 PC의 USB단자에 연결하면, Atmel Studio를 이용해서 Atmega의 내부를 프로그래밍 할 수 있습니다. 즉, 아주 간단한 것 만 셋팅하면 별다른 외부 회로 없이 Atmega를 돌릴 수 있는 거죠.

지난번에 이미 말씀드렸 듯이, 왠만한 것은 모두 데이터시트에 다 나와있다고 했죠? 예 맞습니다. 구글에서 "atmega168 datasheet"라고만 치면, 주르르르 해당 자료가 팍팍 나옵니다. 그것을 자기 PC에 다운로드해서 한번 보세요.. 그것에 익숙해져야만이 앞으로 그 어떤 것을 보더라도 두려움이 없어집니다. 그냥, 인터넷에 나오는 개개인의 간단한 테스트 내용만으로는 전체 그림을 볼 수가 없습니다. 꼭, 데이터시트를 다운로드해서 목차부터 천천히 보세요..시작이 곧 반입니다.^^

그럼, 보시죠..  아래 캡쳐 그림은, 데이터시트 28페이지 입니다.
내용은 즉,

"이 장치는 내부 RC오실레이터가 8Mhz로 맞춰져 있으며, CKDIV8 항목이 프로그램되어 있어서 최종적으로는 1Mhz 클럭으로 셋팅되어 출하됩니다."



어떠신가요? 사용자가 별도로 셋팅을 하지 않으면, 내부 RC오실레이터는 8Mhz짜리가 들어있으며, 그것을 CKDIV8 설정으로 1Mhz로 분주(Prescale)되어 내부에 클럭이 공급된다는 거죠. 만약, 분주를 하지 않고 8Mhz로 동작시키고 싶다면, CKDIV8을 셋팅하지 않으면 되는거죠. 쉽죠? 정말 쓰기 편하게 만들었네요.

그렇다면, CKDIV8은 어디에서 셋팅하는 걸까요?

그건 바로, Fuse Bit 셋팅하는 곳에 있어요. Atmel Studio에서 읽어들인 Fuse Bit셋팅을 보세요. 아래 그림 보세요. "CKDIV8"이 기본(Default)로 셋팅되어 있기때문에, 체크마크를 해제하시면, Atemga168은 8Mhz의 클럭으로 동작되는 것입니다.

쉽죠?? 직접 해보면 더 쉽다는 것을 알 수 있죠..



오늘은, 여기까지 하구요, 다음 글에서는 Atmel Studio를 가지고 간단한 프로그램을 다운로드 해 보겠습니다. 그것도 너무 쉽고 간단하게 되어 있어요. Atmel社에서 정말로 사용자를 친구로 생각해서 유저프랜들리하게 만들었습니다.~~

그럼, 이만 총총.

끝.





2014년 4월 25일 금요일

4. AVR(Atmega168) 간단히 살리기 - 내부 RC Oscillator 로 살리기

이번 글에서는, Atmega168을 살리려고 합니다.

노파심에,,, 저는 왠만한 내용은 해당 데이터시트에서 찾아봅니다. 이미 다 나와 있습니다. 그것만 잘 보면, 굳이 인터넷상의 이곳저곳 돌아보면서 내용을 찾을 필요가 없습니다. 가능하면 데이터시트를 보면서 공부하세요. 그것이 정답입니다.(물론, 좀 영어로 되어 있으니까... 좀 그렇긴 하지만..)

[데이터시트 다운로드]
Atmega168,88,48 datasheet

Q) 그런데, 흔히들 하는 외부 XTAL(크리스탈 오실레이터: 우리말로 하면, 수정발진자)을 사용하는데,, 그것 없이 어떻게 MCU(atmega168)가 동작을 하죠? 클럭을 발생시켜서 넣어줘야 하지 않나요?(아래 그림처럼)



A) 물론, 클럭이 필요합니다. 하지만, AVR에서는 꼭 외부 수정발진자(XTAL)을 사용하지 않더라도, 이미 내부에 클럭발생 장치가 들어있습니다. 그것도 8Mhz의 주파수로!! 너무나 편하지요..^^


그러니까, 외부에 굳이 크리스털오실레이터(수정발진자)를 달아주기 위한 회로가 필요없는거죠. 얼마나 간단하고 좋습니까? 돈도 절약, 수고도 절약!!

그럼, 데이터시트를 봅시다. (27페이지)
아래 그림을 보시면, 이미 내부에 Clock 소스로 선택을 여러가지로 할 수 있습니다.
즉, 외부 Crystal Oscillator 또는 내부 RC Oscillator를 선택 가능 합니다.(노란색 표시부분)
그래서, 저는 굳이 외부 크리스탈 회로를 추가하여 클럭을 넣어주기 보다는, 좀더 간단한, 아주 간단한 내부 RC Oscillator를 사용할 겁니다.


그럼, 내부 RC OSC.를 사용하기 위해서 준비해야 할 것이 뭐냐구요? 글세요.... 정답은 "준비할 것이 아무것도 없다" 입니다. 단지 Atmega168을 USB ISP를 이용하여 전원넣고 연결만 하면 끝이지요. USB ISP연결하면 기본(Default)로 내부 RC OSC.사용 준비가 끝난거죠..
너무나 쉽죠...

그럼, 시작해 보죠. 이제 간단히 살려봅시다.
준비물은 아래와 같습니다.

1. USBISP MK2
2. 6 핀 케이블
3. Atmega168(또는 자기가 가지고 있는 것으로 해도 좋음)
4. 인두기, 납, 전선 몇 가닥.
  

 아래 그림과 같이 간단히 연결하세요. 그럼,, 일단 끝입니다. 그리고 나머지는 Atmega Studio를 동작시키는 일만 남은 겁니다. 아래 연결 방법은 아시겠죠?
참고 삼아 위에도 6핀 커넥터의 번호 배치를 잘 보세요. 자기 힘으로 해보시면, 생각보다 간단하다는 것을 아실 겁니다.



위와 같이 연결하여 납땜을 끝내셨다면,,, 거의 다 한겁니다.
그러면,,

1. 6 핀 커넥터를 연결합니다.
2. USBISP 를 자기 PC의 USB단자에 연결합니다.
3. Atmel Studio 6을 실행시킵니다.
4. Tools --> Device Programming 클릭
5. Device선택(나의 경우는 Atmega168) --> Apply 클릭
6. Interface Setting에서 ISP Clock = 125kHz 선택. 좀 더 높은걸 해도 상관없음.
7. Fuses 클릭 --> 그러면, 아래에 Reading.... 어쩌구 저쩌구 나오면 성공!!

아래에 동영상을 첨부하오니, 한번 보세요. 단번에 이해될겁니다.


위와 같이 따라해서 성공하셨다면,, Atmega칩과 Atmel Studio는 서로 통신이 되는 겁니다.
부디 성공하시길..

다음번에는 Fuse bit 설정과 Atmel Studio에서 프로그래밍 하는 방법을 설명합니다.

그럼, 이만  총총..

끝.







2014년 4월 23일 수요일

3. AVR(Atmega168) 개발환경 --> 정말 간단해요!!

주제- Atmega168 개발 환경 구축(식은 죽 만들기죠)

지난번 글에 올린 Atmega168의 Pinout(다리배치)는 익숙하게 봐두셨나요?
다시 한번 복습하자면,,

PB0,1,2,3,4,5,6,7 (총 8개)
PC0,1,2,3,4,5,6   (총7개)
PD0,1,2,3,4,5,6,7 (총8개)
VCC(1개), GND(2개), AREF(1개), AVCC(1개)

간단히 산수 계산하면, 총 다리숫자는 28개죠? 데이터시트 보시면 딱 맞겠죠..
예~~ 맞습니다. 이게 전부랍니다. 이것만 알면 간단히 살리는 것은 식은 죽 먹는 것보다 더 쉽답니다. 살리는 건 좀 이따 하구,, 우선 개발환경에 대해 얘기할께요.

개발환경구축? 뭐,, 거창한 일 같지만 생각보다 간단??? 합니다. 정말로...
준비물은 다음과 같습니다.

1. PC에 Atmel Studio 6.1를 설치한다.
2. USB ISP를 하나 장만한다. (저의 경우는, USBISP MK2. 어디서 얻은거죠..)
3. Atemga168(또는 88 아니면 48, 없으면 아무거나...)
4. 인두기, 납, 전선 몇 가닥(약 6개 정도면 일단 끝!!)

하나하나 차례대로 설명합니다.

1번: 여기서 다운로드해서 PC에 설치하세요. 그냥 쭉쭉 기본으로 설치하면 됩니다.
[다운로드] Atmel Studio 6.1

2번: USB ISP MK2 (ISP6핀용 Flat Cable도 함께 사세요)
(아래 그림입니다. 다른것 쓰셔도 상관없을듯... 저는 일단 이것 씁니다. 자작 하시는 분도 있으니까,, 그리 어려운 물건은 아니지요.. 참고로, 이것 내부에도 Atmega칩 들어있어요..)


3번: 어디서 한개 구하세요. PDIP타잎이면 좋구요. 그래야 만능기판에서 하죠.


4번: 이것도 어디서 한번 구해보세요. 만물상가서 조그만 것 사셔도 되구요..



설명하다 보니까 은근히 많아지네요. 하지만 이건 별것 아니에요. 정말로 기초적인 것이니까요. 이런 준비가 있어야 Atmega의 은밀한 부분을 들여다 볼 수 있어요. 아무튼 뭔가를 하려면 기초적인 준비가 필요하죠..

오늘은 여기까지.. 꼭 해보시길.. 최소한 atmega studio와 USBISP는 갖고 계셔야만 다음에 할 얘기들이 뭔지 알수 있어요..

오늘은 여기까지..

이만 총총.






2. AVR(Atmega168) 가지고 놀아보기(1탄) - 쉽게 쉽게, 그리고 천천히..

두번째 글입니다.
우선, 제가 우연히 만나게 된 Atmega168을 가지고 설명을 하겠습니다.

(혹시나, 걱정1)
나는 Atmega168이 아니라 다른 칩을 가지고 있는데.. 어쩌지요?

(대답1)
물론, 칩마다 포트의 갯수와 일부 기능이 추가 또는 빠져 있지요. 당연히, 좀 비싼칩은 자원(주변장치)이 더 많지요. 즉, 좀더 쉽게 편하게 쓰도록 팍팍 뭔가 좋은게 들어있는거지요. 하지만, 프로그래밍적으로는 대부분 서로 갖다 쓸수 있도록 되어 있으니까 걱정마세요. AVR Studio에서 칩 선택만 하면 왠만한건 그냥 맞춰지구요. 조금 차이가 있는것은 레지스터(? 그냥 그렇구나 생각하시구요. 나중에 자연스럽게 알게됨) 이름(주소:어드레스)이 좀 차이가 있죠.


그럼, 우선 atmega168의 핀아웃(pinout: 다리배열)부터 보시죠. 껍데기부터 봐야죠..



먼저, 갖고 계신 칩이 왼쪽 모양이면 TQFP형상이라 부르고요, 오른쪽 모양이면 PDIP형상이라고 불러요. 그냥 상식으로 알고 계세요. 개인이 그냥 쓰기에는 오른쪽이 편하지요. 다리(Pin)도 크고 IC소켓에 껴서 쓰면 편하지요. 왼쪽(TQFP)것은 다리 간격이 좁아서 개인적으로 쓰기에는 좀 불편하죠. 더군다나 만능기판에 부착하기에는요.. 땜질 실력 있으신 분은 예외!

근데, 뭔가 다리 이름들을 쭉~ 살펴보니 뭐 그냥 일정한 이름 규칙이 보이네요. 그렇죠!

PB 0,1,2,3,4,5,6,7
PC 0,1,........5,6
PD 0,1,........ .,6,7
그리고, 나머지는 VCC, GND, AVCC, AREF .. 끝!!!

다리발 이름에 모든 기능이 다 나와있어요. 나중에 차차 알시게 될겁니다. 정말로, 다리에 왠만한 기능 설명이 다 나와 있어요~~~^^

우선, 오늘은 여기까지만 하구요,,
한가지, 위 그림 익숙하게 봐두세요.. 뭐 별거 없잖아요.

다음에는 이놈에게 전기를 먹여서 살리기를 할께요.. XTAL(크리스탈 오실레이터)없이 살릴수 있도록요.. 그래서, 이놈들(AVR 칩)이 참 쓰기 쉽게 만들어졌다는거에요..^^
저는 이런 것이 제일 맘에 들었지요. 그냥 전기만 넣어주면 팍팍 도니까요..
나머지는 그냥 간단한 프로그래밍!! 이것 조차도 너무 쉽게 되어있으니까요..
얼마나 쉽길래? 글세요.. 기대하시라~~

그럼, 이만 총총.

끝.