2013년 7월 25일 목요일

[ATMEGA128] Atmega128의 기본 문법

이 포스팅은 개인적인 학문 탐구 및 제어를 공부하기 위한 개인적인 페이지 입니다.
틀린 부분은 댓글을 통해 수정하겠습니다.
-----------------------------------------------------------------------------------------------------------------

코드비전의 경우 기본 문법은 다음과 같다.


#include <mega128.h>

void main(void)
{
while (1)
    {
    // Please write your application code here
    }
}

mega128의 각종 레지스터의 경우 mega128.h에 정의되어 있으며 자세한 정보는 헤더 파일 및 데이터 시트를 참조하기 바란다.

대부분의 MCU 들은 메인 소스에 반복문이 들어가게 되는데 이러한 이유는 MCU의 동작은 전원이 공급 되는한 무한하게 동작 되어야 하기 때문이다. 컴파일러에 따라 무한반복문 while(1) 또는 for(;;;) 등 이러한 구문이 기본적으로 지원될 것이다.

만약 무한반복문이 없다면 정해진 소스 코드의 절차에 따라 동작을 한 후  MCU가 정지 혹은
스택 구조의 에러에 의한 순서에도 없던 동작이 무분별하게 일어날 수 있다.

그러므로 전체적인 MCU의 동작 절차는 반복문하에 소스코드를 기입하여야 정상적으로 작동하게 된다.

다음의 코드는 기본적인 포트 제어를 하기 위한 코드이다.

#include <mega128.h>
#include <delay.h>

void main(void)
{
     DDRA = 0xff;
     PORTA = 0x01;

      while(1){
       delay_ms(500);
       PORTA = PORTA << 1;
      }
}
     
기본 소스 코드에 delay.h를 추가해 주었다.
코드비전의 delay.h는 두가지 함수를 지원한다.
void delay_us(unsigned int n);
void delay_ms(unsigned int n);
두 함수의 인자는 unsigned int n 로서  Atmega128에서는 양의 정수 표현으로 0~65535의 범위를 갖는다.
사용법은 delay_ms(500); 이라는 코드를 기입한다면 MCU는 약 500ms 동안 정지한다.

추가적으로 더 설명하자면 딜레이 함수는 인터럽트 등 특별한 경우 그에 관한 처리 루틴이 실행된다 하여도 지정한 시간만큼 MCU가 정지하기 때문에 제 시간에 처리해야할 코드도 처리하기 힘들어지기 때문에 특별한 경우가 아니라면 사용을 자제하는 것이 좋다. 만약 주기적으로 처리해야할 코드가 있다면  타이머등을 이용하는것이 현명한 선택이다.

따라서 딜레이 함수들의 무분별한 사용은 권하지 않는다.


코드 설명을 계속하자면
레지스터 DDRx는 포트의 입력 혹은 출력을 결정한다 DDRA = 0x0f;의 뜻은 PORTA의 0~3핀은 출력 4~7핀은 입력으로 사용한다는 뜻이며 PORTA = 0xff;는 PORTA 모든 핀을 출력으로 사용한다는 것이다.

/*
Atmeag128의 모든 포트는 양방향 병렬 IO포트이며 선택에 따라 내부 풀업 저항의 사용 여부도 결정할 수 있다. (atmega128의 하드웨어 설명은 나중에 천천히 하기로 한다)
*/

여기서 중요한 점은 DDRx 레지스터는 포트의 입력 혹은 출력을 결정하는 레지스터이다.

PORTx 레지스터는  DDRx 설정에 따라 데이터를 출력하며 입력 설정인 경우 포트에 걸려있는 PIN들의 상태를 읽어들이기도 한다.

코드상 모든 PORTA의 모든 핀들은 출력으로 설정되었기 때문에 PORTA = 0x01;의 의미는
PINA.0의 논리만 1 나머지는 0으로 한다는 의미이다.

이제 반복문으로 들어가 PORTA의 레지스터는 500ms 마다 한번씩 1비트씩 왼쪽으로 쉬프트 하게된다.

즉 이 소스코드는 A포트의 핀의 논리를 500ms 마다 쉬프트 시켜주며 만약 PORTA에 LED를 부착시 정논리를 이용한다면 LED는 순차적으로 하나씩 켜지게 될 것이다.

기본적인 설명은 이것으로 끝이며 앞서 게시한 코드는 오류가 존재하는  코드이다. 문법적으론 오류가 존재하지 않지만 분명한 오류 코드이다. 이 코드에 대해 생각해보길 바란다.
끝으로 오류는 다음 연재를 통해서 알아 보도록 하자. .

[ATMAGA128] MCU에 대해서


이 포스팅은 개인적인 학문 탐구 및 제어를 공부하기 위한 개인적인 페이지 입니다.
틀린 부분은 댓글을 통해 수정하겠습니다.
 
-----------------------------------------------------------------------------------------------------------------
Atmega 128은 8bit MCU(Micro Controller Unit) 이다.
Atmel사는 여러 종류의 MCU를 지원하는데, 8bit MCU도 상당히 종류가 많다.
ATmega640
ATmega128
ATmega2560
...
..
.
이런 컨트롤러들의 차이는 MCU 내부 주변장치나 내부 Flash memory 차이로 나타난다.
(이를 포함한 여러 가지 차이점이 존재한다.)

예를 들면
mega128은 USART 2개를 지원하며 메모리는 128Kbyte이다.
mega2560은 USART 4개를 지원하며 메모리는 256Kbyte이다.
 
이 차이는 사용자가 구성하려는 시스템에 맞도록 ATmel 사에서도 여러 가지 MCU를 지원하는 것이다. 만약 자신이 구성하려는 시스템에 UART 통신이 4개가 필요하다면 mega128을 통해 구현하기는 힘이 들것이다. (물론 전혀 방법이 없는 건 아니다.) 또한 소스 코드를 작성하다보면 MCU 내에 data table 등 많은 data가 필요할 때 128Kbyte은 부족할 수 있다.
(필자도 128Kbyte를 모두 사용해본적은 없다.-_-)

그렇다면 다다익선이라고 상위기종만 쓰면 좋지 않을까? 라는 어찌 보면 당연한 의문을 품을 수도 있지만 그건 또 아니다.. 공학도라면 멀지 않은 미래에 공학자라면 떼려야 땔 수 없는 게 바로 비용(cost)과 관계가 깊다. 좀 더 나은 스펙에 MCU를 사용하다면 전체적인 비용을 커질 수밖에 없다. 이것은 큰 문제로 다가오며 공학도라면 최소한의 비용으로 시스템을 구성할 수 있어야 한다. 그렇기에 독자들은 자신이 구성하려는 시스템에 맞는 MCU를 선정하는 것이 매우 중요하다 할 수 있다.

앞으로의 연재는 atmega128를 통해 하려 한다.
비전문가 혹은 전문가, 아마추어 혹은 프로 사이에서 가장 많이 쓰이는 게 Atmega128이라 생각하며 자료도 쉽게 얻을 수 있기 때문이다.

또한 소스 코드는 Code vision의 컴파일러를 사용할 것이다.
코드비전은 http://www.hpinfotech.ro/html/cvavr.htm 이 곳에서 받을 수 있다.

마지막으로 코드비전의 사용법이나 설명에 주가되는 C언어에 대한 문법은 소개하지
않으려 한다. 이러한 정보는 간단한 검색을 통해 쉽게 알 수 있다.

2013년 7월 4일 목요일

Follow me - Muse

 
 
[Follow me - muse]


When darkness falls
And surrounds you.
When you fall down,
When youre scared
And youre lost. Be brave,

Im coming to hold you now.
When all your strength has gone
And you feel wrong,

Like your life has slipped away.


Follow me.

You can follow me

And i will not desert you now.
When your fires died out,

No ones there,

They have left you for dead.


Follow me.


You can follow me.
I will keep you safe,
Follow me.

You can follow me,
I will protect you.


I wont let them hurt, hurting you, no.
Ooh yeah.

When your heart is breaking.


You can follow me.

You can follow me.

I will always keep you safe,
Follow me,

You can trust in me.

I will always protect you, my love.
Feel my love

Feel my love.