본문 바로가기

만들기 / making/sensing workshop

Arduino VS ATmega168 프로그래밍

Arduino VS ATmega168 프로그래밍


Arduino로 LED 켜기   

File>SketchBook>Example>Digital>Blink
 
Arduino에서 사용하는 프로그래밍 언어는 Arduino고유의 언어이다.
쉽게 만들다보니 한계점이 생길 수 밖에 없다.
 
Code 분석---
 
int ledPin = 13;                // LED connected to digital pin 13
                                      // ATmega168의 PB5를 ledPin이라 명칭
 
void setup()                    // run once, when the sketch starts
{
  pinMode(ledPin, OUTPUT);      // sets the digital pin as output
                                               // ATmega168의 PB5를 output을 위한
                                                  핀으로 설정
}
 
void loop()                     // run over and over again
{
  digitalWrite(ledPin, HIGH);   // sets the LED on
  delay(1000);                  // waits for a second
  digitalWrite(ledPin, LOW);    // sets the LED off
  delay(1000);                  // waits for a second
}
-----
 
자 LED를 켜기 전에 어떤 것을 설정해야 할까요?
 
1. 자신의 Board
2. 자신이 사용하는 Port
 
Tools>Board
Tools>Serial Port  에서 설정하시면 됩니다.
 
* 자신의 Serial Port를 확인하기 위해서는?
 
내 컴퓨터에서 오른쪽 클릭을 하고 (관리)를 누르시면 [컴퓨터 관리]라는 윈도우가 뜹니다. 여기에서 장치관리자를 클릭하시고 수 많은 메뉴 트리 중에서 [포트]를 클릭하면 자신이 사용하는 Port number를 알 수 있습니다.
 
-----
 
자 모든 준비가 되었으면 Upload를 해보세요.
 
제대로 진행이 되었다면 Arduino내에 부착되어 있는 LED가 깜빡거리는 것을 볼 수 있습니다.
 
Code의 delay를 조정하여 다시 한 번 테스트 해보세요.
 
* LED
 
LED의 극성을 따져봅시다.
 
LED다리 길이를 실수로 잘라서 똑같이 만들어버리면 극성을 어떻게 구분할 수 있을까요?
 
LED의 극성을 구분하는 다른 꼼수?들을 알아봅시다.
 
-----
 
LED의 긴 쪽을 12번에 꽂고 짧은 쪽을 GND에 꽂아보세요.
 
자 그럼 12번 LED를 켜도록 코드를 바꾸어봅시다.
 
 
 
 
ATmega168로 LED 켜기
 
기본적인 세팅을 확인합니다.
일단 칩프로그래머만 USB로 컴퓨터에 연결합니다.
장치관리자에 들어가서 Jungo라고 적힌 메뉴 트리를 여시면
AVRISP mk2와 WinDriver가 있어야 합니다.
 
그럼 이제 AVR studio를 엽니다. (버젼은 4.15 였죠?)
 
New Project를 누르시면 뭔가 설정하는 부분이 보이실 텐데
왼쪽 탭에서 AVR simulator2을 선택하고 오른쪽 탭에는 각자의 칩
(168 or 328)에 해당하는 것을 선택하고 프로젝트 이름을 정합니다.
 
여기가 중요합니다!!!!! 
Project > Configuration Options 로 들어갑니다.
 
Device: 이 부분에 자신의 칩이 제대로 들어가 있는지 확인합니다.
Frequency: Arduino에 칩의 옆 부분에 길다란 트랙 모양의 은빛 부품이 있을 꺼에요. 여기에 자세히 보면 16MHz라고 적혀 있을 껍니다.
그러면 여기에 16,000,000(Hz)을 입력하시면 됩니다.
 
다음은 칩 프로그래머와 Arduino를 연결합니다.  
 

IDC 커넥터 방향

 
상세한 연결은 후에~ (아무라도 먼저 올려주시면 감사하겠습니다.)
 
 
// code start
#include <avr/io.h>
#include <util/delay.h>

int main(void) {
  
  DDRB=0b00100000;
  while (1) {
    
    PORTB = 0b00100000;    
    _delay_ms(100);
    
    PORTB = 0b00000000;
    _delay_ms(100);
    
  }
}

-----

Configuration Option을 모두 조정하신 후에 위의 Code를 붙여 넣고
Build를 하세요.
 
Compile이 모두 완료되면 칩 위에 'Con'이라고 적힌 아이콘을 누르시면 탭이 무수히 많은 윈도우가 뜹니다. 여기에서 Fuse라고 적힌 탭으로 들어갑니다.
경고문의 메시지 창이 뜨면 하드웨어 적으로 연결이 잘못된 경우가 대부분일 겁니다. 혹은 전원이 들어가 있지 않은 경우일 수도 있어요.(이 때, 아뒤노에 전원이 들어가 있어야 한다는 의미입니다.)
 
Fuse의 아래쪽 탭에 세 개의 줄이 있습니다. 여기에 각각 다음과 같은 데이터가 연결되어 있어야 합니다.
 
168:
 
0XF8
0XDD
0XFF
 
328:
 
0XFD
0XDA
0XFF
 
여기서 0x라고 적힌 것은 이 data가 16진법으로 이루어져 있다는 것을 의미합니다.
 
 
//Code 분석
 
#include <avr/io.h>
#include <util/delay.h>

int main(void) {
  
  DDRB=0b00100000; 
 
  while (1) {
    // while( ){ }의 ( )안에 true혹은 1에 해당하는 조건이 오면
    // { } 안이 계속 반복하여 실행합니다.
    
    PORTB = 0b00100000;     // PortB의 6번째 즉, PB5(pin13)에 5V를~
                                          // 참고로, 00000001은 PB0을 의미합니다.    
    _delay_ms(100);
    
    PORTB = 0b00000000;
    _delay_ms(100);
    
  }
}
 
 
datasheet의 p.86을 참조하시면 Register에 관한 너무 자세한? 정보가 담겨 있습니다. 00100000을 datasheet의 p.86, 11.4.2의 PortB의 그림과 매핑시켜보면 1이 가리키는 부분이 PB5임을 알 수 있습니다.
 
p.72 11.2.3
switching between I & O 참조
 
* SFR (Speical Function Register)
 
-----
 
Error) 'make file' 이란 구문이 섞인 메시지가 뜨는 경우는 경로에 한글이
         섞여있는지 확인해주시면 됩니다.

'만들기 / making > sensing workshop' 카테고리의 다른 글

2진법 / 16진법 / ASCII  (0) 2009.08.31
Arduino bootloader  (0) 2009.08.31
*Arduino 실행 문제  (0) 2009.08.31
ADC/DAC  (0) 2009.08.31
LED 켜기  (0) 2009.08.31