'프로그램/마이크로프로세서 설계(Atmega128)'에 해당되는 글 3건

ATmega128을 이용하여 숫자를 옮기면서 전화번호를 표시하는 소스.


#include "avr/io.h"
#include "util/delay.h"



int main(void){
  
  //C 포트는 fnd의 숫자 결정(어떤 숫자를 띄울지)
  //G 포트는 fnd의 위치를 결정(어디에 띄울지)

  DDRC = 0xff; //0x1111 1111 모두 출력상태
  DDRG = 0x0f; //0x0000 1111 4개만 출력상태

  //FND 숫자 원리만 알면 되니까 미리 써놓는다

 int count =0;

 unsigned char empty = 0x00;

 unsigned char digit[11] = 
 {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0x40};

 unsigned char fnd_sel[4] = {0x01, 0x02, 0x04, 0x08};

 unsigned char fnd[4] = {0x00,0x00,0x00,0x00};

 unsigned char phone[14] = {0,1,0,10,6,7,3,0,10,4,9,3,8};
 

  while(1){

    if(count>13) {
	 reset(fnd,&count);
	}    
     
    for(int j=0; j<400; j++){
		print(fnd_sel[3],fnd[3]);
		print(fnd_sel[2],fnd[2]);
		print(fnd_sel[1],fnd[1]);
		print(fnd_sel[0],fnd[0]);
    }
   
    move(&count,fnd,digit,phone);
  }

  return 0;
}


void print(char which,char what){
		PORTG = which;
	    PORTC = what;
		_delay_ms(10);
}

void reset(unsigned char* fnd,int* count){
   
   *count=0;
   for(int p;p<4;p++)
     fnd[p]=0x00;

}

void move(int* count,unsigned char* fnd,unsigned char* digit,unsigned char* phone){
	
	for(int q=3;q>0;q--)
      fnd[q]=fnd[q-1];
	
	fnd[0] = digit[phone[(*count)++]];
}



'프로그램 > 마이크로프로세서 설계(Atmega128)' 카테고리의 다른 글

전화번호 표시하기  (0) 2015.10.30
Port의 이해  (0) 2015.10.30
크로스 컴파일 개발환경 구축  (0) 2015.10.30
블로그 이미지

종환 Revolutionist-JongHwan

github.com/alciakng 항상 겸손하자.


http://www.hackerschool.org/Sub_Html/HS_University/HardwareHacking/17.html
[포트(Port)의 이해]

하드웨어 분야에서 있어서 포트(Port)란, 전기적 신호 데이터가 오가는 통로를 의미합니다. 
즉, MCU로부터 외부로 노출 된 핀(Pin)들이 바로 포트가 될 수 있는 것입니다. 

우리가 사용하는 ATmega128에는 총 64개의 핀들이 노출되어 있으며, 
다음 그림과 같이 1번 핀에서부터 64번 핀까지 시계 반대방향으로 순서대로 읽어 나갑니다. 
(이 때, 동그랗게 파인 부분이 왼쪽 위 모서리에 위치하도록 한 후 읽습니다.) 



* 출처 : http://www.atmel.com/Images/doc2467.pdf
* 구글에서 "atmega128"로 검색하면 가장 위에 나타납니다.

ATmega128 DataSheet의 2페이지에서 가져 온 이 그림은 앞으로 AVR 개발을 하면서 
여러번 반복하여 보게 될 것입니다. 

위 회로에 적힌 용어들이 얼핏 보기엔 복잡해 보이지만, 
유심히 잘 보면 어떤 규칙이 있음을 알 수 있습니다. 

우선 51번 핀부터 시계 방향으로 보면, 44번 핀까지 PA라는 이름이 붙어 있습니다. 
즉, PA0, PA1, PA2, PA3, PA4, PA5, PA6, PA7 이렇게 총 8개가 PA라는 공통된 이름을 사용하고 있습니다. 

이를 Port A라고 부릅니다. 
다시말해, PA0에서 PA7까지 8개의 핀이 모여서 Port A라는 하나의 포트가 되는 것입니다. 

같은 방식으로 ATmega128엔 총 7개의 포트들이 존재합니다.
 
  - Port A : PA0 ~ PA7
  - Port B : PB0 ~ PB7
  - Port C : PC0 ~ PC7
  - Port D : PD0 ~ PD7
  - Port E : PE0 ~ PE7
  - Port F : PF0 ~ PF7
  - Port G : PG0 ~ PG4 

포트 G는 예외적으로 핀이 다섯 개 밖에 없으며, 고르게 위치하지 못하고 여기저기 
흩어져 있는 것이 특징입니다. 
반면에 나머지 A~F 포트들은 8개의 핀들이 나란히 위치하고 있습니다. 

개발자는 이 7개의 포트들을 자신이 원하는대로 이용할 수 있습니다. 

예를 들어, LED 1개가 있을 때, 이 것을 PA3번에 연결해도 되고, PF0번, 혹은 PE3번에 
개발자 마음대로 연결하여 사용할 수 있습니다. 그리고 각각의 핀에 전기 신호를 출력할지, 
혹은 반대로 전기 신호 입력을 받을지도 직접 결정할 수 있습니다. 

이처럼 개발자 마음대로 사용할 수 있는 포트들을 범용 I/O 포트라고 부릅니다.

그런데 잘 보면, 각각의 핀 이름 옆엔 괄호( )로 무언가 적혀 있습니다. 
예를 들어, PA3 옆엔 (AD3)이라고 적혀 있습니다. 

이 괄호 안에 들어가 있는 용어들은 해당 포트가 "특수 기능"으로 사용될 때의 용도를 나타냅니다. 
각각의 핀들은 모두 범용 기능 외에 특수 기능을 가지고 있기 때문입니다. 

개발자가 특정 레지스터를 사용할 경우, 이 특수 기능의 포트가 자동으로 사용됩니다. 
이 특수 기능에 대한 세부적인 내용은 실습을 진행해 나가면서 설명해 드릴 것이며,
지금은 이처럼 특수 기능으로 사용되는 포트들이 "특수 포트"다라는 것만 알고계시면 되겠습니다. 

다음은  Port의 P자가 붙지 않은 핀들에 대한 설명입니다.

  - VCC : 전원의 +가 입력되는 핀입니다.
  - GND : 전원의 -가 입력되는 핀입니다.
  - XTAL1, XTAL2 : 크리스탈이라는 외부 장치 입력 전용의 핀입니다.
  - AVCC : 아날로그 VCC가 연결되는 핀입니다.
  - AREF : 아날로그 VCC의 기준 전압이 되는 핀입니다.
  - PEN : SPI 통신에 사용되는 핀입니다.
  - RESET : ATmega128 회로를 리셋(일종의 재부팅)시키는 용도의 핀입니다.

위에 나열되지 않은 다른 핀들이 범용핀, 혹은 특수핀으로 사용될 수 있는 것이 반해, 
위의 핀들은 무조건 위처럼 정해진 기능만 할 수 있습니다. 

지금까지 설명드린 모든 핀들은 TQFP 타입으로 구성되어 있기 때문에, 
전선을 연결하거나 납땜하는 방법이 쉽지 않습니다. 



그렇기 때문에, 앞서 설명드린 변환 기판이나 확장 보드 같은 것을 이용하여 
추가 장치를 연결하기 쉬운 상태로 만드는 것이 일반적입니다.

포트는 MCU에만 존재하는 것이 아니라, 외부 메모리와 같은 주변장치에도 마찬가지로 존재합니다. 
즉, 데이터 송수신을 필요로하는 모든 장치는 이와 같은 포트들을 가지고 있습니다. 



예를 들어, 범용 I/O 포트의 FND의 숫자출력 포트를 C포트로 하고 위치포트를 G포트로 한다면(G포트로 하는 이유는 5비트로 구성되어 있으므로 4개의 위치를 결정하기 쉬움)

다음과 같이 프로그래밍 할 수 있다.


잔상효과를 이용하여 fnd에 숫자를 찍는다.

int main(void){
  
  //C 포트는 fnd의 숫자 결정(어떤 숫자를 띄울지)
  //G 포트는 fnd의 위치를 결정(어디에 띄울지)

  DDRC = 0xff; //0x1111 1111 모두 출력상태
  DDRG = 0x0f; //0x0000 1111 4개만 출력상태

  //FND 숫자 원리만 알면 되니까 미리 써놓는다

 unsigned char digit[10] = 
{ 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67};


  while(1){

    PORTG = 0x01;
    PORTC = 0x3f; 
    _delay_ms(30);

    PORTG = 0x02;//0x00 0010
    PORTC = 0x06;
    _delay_ms(30);

    PORTG = 0x04;//0x00 0100
    PORTC = 0x5b;
    _delay_ms(30);

    PORTG = 0x08;//0x00 1000
    PORTC = 0x4f;
	_delay_ms(30);
  }
  return 0;
}

'프로그램 > 마이크로프로세서 설계(Atmega128)' 카테고리의 다른 글

전화번호 표시하기  (0) 2015.10.30
Port의 이해  (0) 2015.10.30
크로스 컴파일 개발환경 구축  (0) 2015.10.30
블로그 이미지

종환 Revolutionist-JongHwan

github.com/alciakng 항상 겸손하자.

출처 : http://www.hackerschool.org/Sub_Html/HS_University/HardwareHacking/14.html

[WinAVR + AVR Studio 설치하기]

본 서적과 함께 AVR 개발 실습을 하기 위해선 다음과 같은 세 가지가 필요하며,
이 준비 과정은 일반적으로 15분에서 30분 정도 소요 될 것입니다.

- 첫 째, AVR 전용 컴파일러 설치
- 둘 째, AVR 개발을 쉽게 할 수 있도록 도와주는 통합개발도구(IDE) 설치
- 셋 째, AVR 키트에 대한 하드웨어 드라이버 설치

1. WinAVR의 설치
  - WinAVR은 컴파일러, 디버거, 분석도구의 모음입니다. 
  - 즉, 실제 개발의 핵심이 되는 파일들을 제공합니다.
  - 설치되는 파일들 : gcc, g++, gdb, nm, ld, objdump, readelf 등
  - WinAVR 설치
    - http://sourceforge.net/projects/winavr/files/
    - 바로다운: http://sourceforge.net/projects/winavr/files/WinAVR/20100110/
    - 짧은 링크: http://bit.ly/gcPMiX
  - 기본 설치 폴더는 C:\WinAVR-20100110\입니다.



2. AVR Studio4 설치
  - 위 WinAVR에 대한 GUI 기반 통합개발 환경을 제공하는 도구입니다.
  - 즉, AVR Studio는 WinAVR에 대한 사용자 인터페이스인 셈입니다.
  - AVR Studio4 설치
    - http://www.atmel.com/tools/STUDIOARCHIVE.aspx (4.19 설치 권장)
    - register 버튼을 눌러서 등록 후 다운로드 가능
    - 등록 없이 바로 다운 : http://www.atmel.com/Images/AvrStudio4Setup.exe
    - 짧은 링크 : http://bit.ly/JaTVrT (실행파일 링크 경고가 나오면 무시하고 계속 진행)
  - Windows7의 경우 설치 중 멈춤 현상이 발생하는 경우가 있는데,
    이 때엔 다른 프로그램들을 닫고 바탕화면으로 이동하면 설치가 계속 진행됩니다.
  - 기본 설치 폴더는 C:\Program Files\Atmel\입니다.
  - AVR Studio 설치 후 추가로 나타나는 Junggo USB 드라이버도 함께 설치합니다.




참고> AVR ToolChain 
  - AVR ToolChain은 ATMEL 자체적으로 제공하는 컴파일러입니다. 
  - 개발자는 WinAVR과 AVR Toolchain 중 하나를 선택하여 사용합니다.
  - 우리는 WinAVR 이미 컴파일러를 설치했기 때문에 ToolChain은 설치하지 
    않아도 되며, 단지 참고로 설치 경로를 알려드립니다.
  - http://www.atmel.com/dyn/products/tools_card.asp?tool_id=4118
  - 링크 : http://www.atmel.com/Images/avr-toolchain-installer-3.3.0.710-win32.win32.x86.exe
  - 짧은 링크 : http://bit.ly/K8pbub

3. JMOD128 개발 키트의 USB 드라이버 설치 - http://www.silabs.com/products/mcu/pages/usbtouartbridgevcpdrivers.aspx - http://www.silabs.com/Support%20Documents/Software/CP210x_VCP_Win_XP_S2K3_Vista_7.exe - 짧은 주소 : http://bit.ly/IKV0cs - 설치 후 나타나는 CP210x USB to UART Bridge도 함께 설치합니다. 만약 드라이버 설치가 정상적으로 됐다면, JMOD128 USB 케이블을 PC에 연결했을 때 장치관리자에 다음과 같이 CP210x USB to UART Bridge 드라이버가 나타나야 합니다. 만약 드라이버 설치가 잘 되지 않는다면 USB 케이블을 여러번 재장착 해보시기 바랍니다. 이로써 개발 환경 구축이 완료 되었습니다! 참고로 상위 버전인 AVR Studio5도 배포되고 있으나, 버전 4에 비해 프로그램이 무겁고, 설치도 오래 걸리며, 결정적으로 우리가 사용하는 ATmega128과의 호환성이 떨어지는 이유로 추천해드리지 않고 있습니다.


'프로그램 > 마이크로프로세서 설계(Atmega128)' 카테고리의 다른 글

전화번호 표시하기  (0) 2015.10.30
Port의 이해  (0) 2015.10.30
크로스 컴파일 개발환경 구축  (0) 2015.10.30
블로그 이미지

종환 Revolutionist-JongHwan

github.com/alciakng 항상 겸손하자.