본문 바로가기

끄적끄적

[펀글] 이제부터 AVR 뽀개기를 시작해 보려고 함~!!!


원문출처 : http://blog.naver.com/werabrai/50030050932


회사 업무에 필수적으로 필요한 Micom 의 한 종류라고 보면 되는데,

 

이에 대한 기초지식이 없어서 공부 좀 하려 합니다.

 

참고로, 아직 아무런 감도 못 잡고 있는 상태지만,

 

디씨X사이트에 프로그래밍 겔에 "유리한" 이라고 하는 유저의 강의를 보면서,

 

나름 할 수 있겠다는 자신감? 이라는 게 생겼고, 또 꼭 해야 하기 때문에

 

한 번 열심히 해 보려고 해~ 일단 기초적으로 필요한 개념에 대해서,

 

유리한이라고 하는 횽의 첫번째 강좌?를 아래에 첨부합니다.

 

=========================================================================================

 

Chapter 1. 개념잡기 (ver. 0.2)


나역시 그러했고 많은 사람들 역시 그러했듯이
임베디드라는 세계에 첫발을 딛은 사람들은 개념부터 막힌다.
시작도 못하고 개념에서 무릎꿃는 사람도 여럿 봐왔고 해서
개념부터 잡고 넘어가기로 하자.
개념및 용어정리만 해도 반은 먹고 들어간다.
(왜냐면 적어도 이빨은 깔수 있다.그리고 어렵게 생각하면 한없이 어렵겠지만
알고보면 별것 아닌게 정말 많다.)
공부하려는 마음을 잡았다면 모르는 용어나 이해안가는 개념은 구글신께 기도드리자.


진도나가면서 다시한번 설명하게될 놈들도 있겠지만 일단은 짚고 넘어가자.


임베디드란 무엇인가?

프로세서에 프로그램 구워서 돌리면 임베디드.
까놓고 임베디드의 개념에 대해서는 설명이 난감하다.
그냥 아날로그회로나 로직회로를 임베디드라고하지는 않는다.
pc역시 임베디드라 칭하지 않는다.
일반적으로 특화된 기능만을 가진 전자계산기를 임베디드라 한다.
은근히 코에걸면 코걸이 귀에걸면 귀걸이 개념이다.


펌웨어란?

컴퓨터의 프로그램이라고 생각하면 된다.
프로세서에 올라가는 프로그램을 칭한다.


하드웨어란?

모르진 않겠지?


MCU? MPU?

마이크로 컨트롤러 유닛과 마이크로 프로세서 유닛.
뭐 별차이 없다고 느끼는 사람도 있지만..
굳이 차이점을 말하자면 mcu는 입출력에 촛점이 맞춰져 있다면
mpu는 연산에 촛점이 맞춰져 있다.
연산방식이 약간 다르다고 하는것 같더라.


avr이 도대체 뭔가? (ATMega128기준. 이하 128)

Automatic Voltage Regulator 가 아니다.
Advanced RISC Architecture 라 부른다.
진보된 RISC 아키텍쳐쯤 되겠다.
Alf(Bogen) Vergard(Wollan) RISC micro-controller 라고도 한다더라.
특징을 얘기하자면 1클럭당 1개의 명령어 처리가 가능하고
(128기준 16MHz에서 16MIPS의 처리속도.
MIP이란Million Instructions Per Second의 약자로 초당 처리할수 있는 명령어의 갯수이다.
1MIPS는 초당 100만개의 명령어를 처리한다는 뜻)
동일 클럭이라면 8051의 10배 PIC의 4배속도가 난다.
C언어에 최적화 되어있으며 싸다.
내부 자원이 풍부한편.128기준으로 4k SRAM / 128k Flash Memory / 2ch Usart /4Ch Timer/Counter 등등!!
자세한건 나중에 하자.

(AVR 칩들중에서 128이 제일 좋다.. 자세한건 http://atmel.com 에서 확인해라)


그럼 RISC는 뭔가? CISC는?

CISC 는 Complex instruction set computer의 약자.
RISC는 Reduced instruction set computer의 약자.
CISC는 명령어가 많고 강력한 대신 속도가 느리다. x86계열이 여기에 속한다.
(x86이라 함은 일반 pc라 생각해라.)
RISC는 단축된(혹은 축소된) 명령셋을 가지고 있다. 속도가 빠르다.
자세한건 역시 찾아봐라. 개념잡기지 심화학습이 아니잖는가?


AVR은 어디에 쓰는건가?

아무데나 쓴다.
이것도차 개념 못잡는사람들 간혹 있더라.
이렇게 묻는 사람들 있다면 CPU는 어따쓰는가 라고 묻고싶다.

AVR을 밥솥에 넣고 온도센서,압력센서랑 열판을 엮어서 밥솥을 컨트롤 할수도 있고
STA013+CS4334 나 VS1003k 따위랑 엮으면 훌륭한 MP3 플레이어도 된다.
외부에 뭘 다느냐에 따라 그 역할은 천차만별이다.
주로 위부에 달아놓은 놈들을 컨트롤하고 데이터를 주고받는다.

 


뭣하러 AVR 하는가? 그냥 윈도 어플이나 짤란다.
잘 만들어도 에게~ 이게뭐야~ 라는 말이나 듣는 프로그램보다야
코드몇줄 되지도 않지만 뭔가 있어보이는 임베디드가
개인적으로 공부하기는 더 재미있었다.
http://blog.naver.com/meelin/50009779686
공부하면서 만들었던건데.. 실제 코드량은 261줄밖에 되지 않는다.
그나마도 쓰잘데 없는 군더더기 빼면 더 줄어든다.
(막 C언어 문법뗐을때라 코드가 엉망이다..)
저걸 졸작 프로젝트로 하겠답시고 회로물어보고 코드 묻는사람도 조낸 많더라..
http://blog.naver.com/meelin/50009590523
이건 저놈한테 초음파센서 달기전 버전.

공부하면서 듣게될 것들.


크로스컴파일?

쉽게 설명하자면 pc에서 그 프로세서에 맞는 프로그램을 컴파일 하는걸 뜻한다.
그래도 모르겠다고?
x86 머신에서 avr용 코드나 arm용 코드를 생산하는거.
음..더 어려워지는것 같다..
플스에선 컴파일 못하지? PC에서 코딩하고 컴파일 한뒤에 플스에서 돌리지?
그게 크로스컴파일이다.


크로스컴파일러

크로스컴파일이 뭔지 알았으니 크로스컴파일러도 알것이라 믿는다.
하나를 가르치면 열을 아는 사람이 되자.
avr을 예로들자면 avr-gcc / codevision / iar / iccavr 등등이 있다.
여기서는 꽁짜에 사용자도 많은 avr-gcc를 사용하도록 하자.
물론 흔히 사용하는 avr-studio와의 연동은.. 흠좀무..
avr-studio 가 코딩하기는 좀 그렇더라..
시뮬레이션용으로 쓰기는 하자..

j-tag

디버깅 툴.. 좋은건 상당히 고가다.
소스레벨 디버깅이 가능하다는 장점이 있다.
컴퓨터는 그냥 브레이크 포인트 찍으면서 디버깅하던가 디어셈 하면 되지만..
타겟시스템은 그게 안된다.
하드웨어적으로 가능하게 만들어주는놈이 j-tag이란 장비다.

ISP. In-System Programmer.

예전에는 칩라이터가 따로 있어서 거기에 꼽고 구워야 했다.
하지만 장비가 고가라..
ISP는 그 단점을 카바할수 있다. 내부 플래시 메모리에 바로 라이팅 하는 방법인데..
그냥 선연결해서 패레럴 포트에 꼽고 구우면 된다는 얘기다. 어렵게 생각하지 말자.
avr은 만번정도 라이팅이 가능하단다.


레지스터 레지스터 지겨운 레지스터..

네이년 백과사전에서는 이렇게 설명한다.------------------------

컴퓨터의 중앙처리장치에 들어 있는 소규모 데이터 기억장치이다.
이때 내부 버스(bus)가 연산장치와 레지스터를 연결해준다.
컴퓨터의 중앙처리장치 속에는 쓰임새에 따라 몇 종류의 레지스터가 들어 있다.

그 가운데 중요한 것으로는 명령 레지스터, 번지 레지스터, 인덱스 레지스터, 누산기 등이 있다.
레지스터의 회로는 주로 플립플롭 회로를 많이 연결한 형태를 하고 있는데,
이것은 데이터를 쉽고 빠르게 읽고 쓸 수 있기 때문이다.
예를 들어 레지스터의 데이터로 데이터를 저장하는 데 걸리는 시간은 보통 수10ns(나노초) 이하로,
주기억장치에 비하여 훨씬 빠르다.

---------------------------------------------------------------

우리는 쉽게 쉽게 가자.
레지스터의 내용을 바꾸면 칩이 반응한다.
자, avr에는 PORTD 라는 출력 레지스터가 있다.
PORTD=0xff; 라고 코딩하면 PORTD는 8개의 핀에 HIGH 신호를 인가한다.
PORTD=0x00; 이라고 코딩하면 PORTD의 모든 핀은 LOW로 떨어진다.

입출력 뿐만 아니라 환경설정도 레지스터의 데이터를 바꿔서 해야된다.
PORTD를 입력용으로 쓰고 싶으면 DDRD=0x00으로, 출력으로 쓰고싶으면 DDRD=0xff로..

일단 이정도로만 집고 넘어가자.
요약하자면 레지스터는 환경을 결정하고 입출력을 결정하는 놈이다.
(뭐 꼭 이런일만 하는건 아니지만 이렇게 알아놓아도 배우는데 지장은 없다.
자세한건 혼자서 심화학습 해라.)
레지스터 쓸줄 알게되면 그프로세서는 90%이상 배운거다.


일단 사장 눈치 보이니 오늘은 이정도로 하자.
개념정리는 수시로 업뎃 하기로 하고,
나머지는 강좌진행하면서 계속 하기로 하자.


PWM이 뭐야?

모터제어나 전력제어에 빠질수 없는 PWM..
pulse width modulation이라고 하는거다.
펄스폭 변조..
1사이클을 1초라고 치자.
입력전압을 5볼트라치고
0.5초동안 5V를 걸어주고 0.5초동안 0V를 걸어준다면
1초동안 걸린 전압은 평균 2.5V이다.
하지만 1초가 생각보다 긴 시간이라 on/off가 눈에 보이겠지?
100us(us=마이크로초.1/1,000밀리초(ms) 1/1,000,000초)를 한싸이클로하면 10KHz가 나오겠지?
이정도 짧은 시간에 얼마만큼 HIGH를 주고 LOW를 주느냐에 따라 전력량이 달라지는것.
이걸 PWM제어라고 하는거다.
얼마만큼 HIGH신호를 주는가를 듀티비라고 하는데, 듀티비가 높을수록 전력이 세진다.
LED를 가지고 실험해보면 밝기조절이 되고
모터로 실험해보면 속도조절이 가능해진다.

HIGH신호? LOW 신호?

이건 소자마다 인식범위가 조금 다른데..
5V소자의 경우 보통 1.7V미만을 LOW로 인식하고 3.4v이상을 HIGH로 인식..하던가?
뭐 그렇다는거다. 근데 전압이 어중간하게 걸린다면..?
정상동작을 보장하지 않는다. HIGH일수도 있고 LOW일수도 있고..

인터럽트?

만약에 니가 DC 은꼴갤과 디댤갤을 순방하면서 DDR을 하고있다치자.
어머님이 문을열고 들어왔다면 어떻게 할것인가?
지금 하고있던일을 멈추고 신속히 팬티와 바지를 올린뒤
모니터를 끄던지 컴을 끄던지 코드를 뽑을것이다.

이처럼 외부 반응을 통해 하고있던일 접고 벌어진 일부터 해결하는걸 인터럽트라 한다.
물론 저 상황에서야 ㅈ이 오그라들어서 인터럽트 발생전 루틴으로 점프하긴 힘들겠지만,
통상적으로 스텍에 복귀주소 올리고 점프했다가 인터럽트 처리하고 복귀한다.

데이터 시트?

부품에 대한 메뉴얼이라고 생각하면 된다.
기본적인 사용법부터 특성같은게 잘 나와있다.
가끔 예제까지 포함된 경우도 있고..
보통 standard로 회로구성까지 나와있다.
누군가 xx부품 어떻게 써? 라고 묻는다면
'닥치고 데이터시트 쳐봐' 라고 말해주면 된다.
참고로 http://alldatasheet.com 가면 거의 모든 데이터 시트가 있다.
난 '영어만 보면 울렁증이라 그딴거 못보겠다' 그딴 샛퀴 있으면
나랑 일기토하자.

타이밍도(Timing 圖)

어떠한것이 동작하는데 있어서 명령을 주는 순서를 표로 그려놓은걸 말한다.
친절하게 몇초동안 신호를 줘야되는지 어떤 순서대로 줘야하는지 다 나와있다.
데이터시트 뒤져보면 나온다.

ADC ? DAC ?

adc는 Analog Digital Converter
dac는 Digital Analog Converter
아날로그를 디지털로 수치화 시켜주던가
디지털 수치를 아날로그 신호로 뽑아내던가.
대표적인걸 뽑자면..
ADC는 디지털 온도계정도?
DAC는 사운드카드?
어쨌든 이쪽계통은 Analog Device라는 회사가 좀 먹어준다.
그대신에 비싸더라.

어쨌든 여기서 얻을수 있는 교훈은
'디지털은 결국 아날로그를 지향한다' 라는거지.

준비물 추가.
WIN-AVR(avr-gcc) (컴파일러) AVR-Studio (IDE툴).
두개다  http://www.avrfreaks.net/index.php?module=Freaks%20Tools&func=viewTools 에서..
프로시온 avr라이브러리 http://hubbard.engr.scu.edu/embedded/avr/avrlib/
포니프로그 http://www.lancos.com/

ATMega128 데이터 시트. http://atmel.com/dyn/resources/prod_documents/doc2467.pdf

혹시 열심히 공부할생각 있으면
ATMega128 데이터 시트 제본뜨고 (atmel.com에서 찾아.)
avr-gcc 레퍼런스 제본뜨는것도 괜찮다.

덧붙이면 영어 모르면 아무것도 못한다.
데이터시트를 계속 봐야된단 얘기가 영어에도 익숙해지기 때문이다.

그래도 한글이 좋으면 윤덕용교수의 ATMega128 마스터였나 그거사라.
데이터시트에 가장 근접한 책.


일단 생각나는것만 쓴거야..
추가할만한거 있으면 덧붙여줘.

 

=========================================================================================