로그인회원등록 내글장바구니주문조회현재접속자
 상품 검색








 게시판 검색





 
 
회원등록 비번분실


온라인 입금계좌
ㆍ기업은행
ㆍ219-043192-01-028
ㆍ이건영

      거래은행 바로가기
 
 Arduino Open Source
아듀이노 함수의 상세설명
작성자 avrtools™        
작성일 2008/08/19
첨부#1 TimerOne.zip (5KB) (Down:490)
Link#1 (Down:322)
ㆍ추천: 0  ㆍ조회: 3660   
  아듀이노 PWM 출력과 타이머1 전용명령
제목 : TIMER1
참조 : http://www.arduino.cc/playground/Code/Timer1
목적 : 아듀이노 기판의 타이머 인터럽트를 사용하는 방법
 
이 Library (공유자원)는 ATmega168 칩의 Timer1 이라는 16 비트 하드웨어 타이머의 소스이다.
ATmega168 칩에는 3개의 하드웨어 타이머가 있으며, 목적에 따라서 다양한 방법으로 설정할 수 있다.
 
이 라이브러리는 PWM 방식에서 위상(phase)과 주파수(frequency)를 올바르게 쓰도록 만들어 준다.
타이머1의 PWM 주기(period) 즉 주파수를 빠르고 쉽게 설정하는 방법을 위해서 개발이 시작되었다.
그러나 타이머 가로채기와 다른 기능들도 포함하여 발전하게 되었다. 다른 타이머로 확장되거나 이식되었다. 

라이브러리

프로그램에서 자주 사용하는 관련된 소스들을 표준화하여 저장한 함수,

함수를 매번 만들지 않고, 간단히 호출하여 사용할 수 있도록 만든다.

배포방식에 따라서 비공개용, 상용, 공개용이 있으며, 공개 라이브러리는 자유롭게 사용할 수 있다.

타이머1 소스 :
http://www.arduino.cc/playground/uploads/Code/TimerOne.zip
설치 : 압축을 풀고, 아듀이노 소프트웨어가 있는 폴더의 Arduino/hardware/libraries/Timer1/에 복사한다.

initialize(period)
이 특별한 옵션은 어떤 다른 방식을 쓰더라도, 아듀이노에서 타이머1을 사용하려면 반드시 실행해야 한다.
옵션 타이머의 주기는 1 us이며, 초기설정은 1 초이다. 디지털 핀 9와 10의 analogWrite()를 보라,

setPeriod(period)
타이머1의 주기를 1us로 설정한다. (1/주파수은 주기 이므로, 주파수의 역수이다)
최소 주기 즉 높은 주파수를 지워하는 라이브러리는 1us 혹은 1mHz (1/1000 초)다.
최대 주기는 8388480 us 이며 약 8.3 초다. (보통 최대로 1초를 사용한다)
주기(period)의 설정은 첨부된 가로채기(interrupt)의 주기와 PWM 주파수를 모두 바뀌게 할 것이다.

역자 주:
가로채기(interrupt)는 16비트 타이머의 값이 시간과 더불어 증가하여 다시 0으로 되는 시각에,
타이머가 가득찬 경우, 16 비트 이상의 시간을 처리하기 위해, 자동으로 호출되는 특별한 함수이다.  
이 처리와 유사하게, 특별한 상태에서 자동으로 호출되는 가로채기 함수는 몇 종류가 있다.

 
타이머의 초기화와 주기설정으로 하드웨어가 1us 주기로 가로채기 함수가 호출되면,
1us 이상의 시간들은 가로채기 함수에서 us값을 변수로 이용하여 ms, sec 등을 처리한다. 
(이 가로채기의 함수의 처리가 끝나면, 주함수의 마지막 실행한 명령 다음의 명령을 실행한다)
 

pwm(pin, duty, period)
특정한 핀에 PWM 파형을 발생한다. 타이머1을 위한 출력핀은 포트 B1과 B2 이다.
결국, 2개의 핀 중에서 선택해야 한다, 아니면 안된다.
아듀이노 기판에서, 그것들은 핀 D9와 핀 D10 이다, (별명인 PWM0과 PWM1도 유효하다)
펄스비(duty)는 10 비트로 정해져 있다. 결국 어쨋든지 0 ~ 1023의 중간이다. 
 
주: 이 기능의 주기를 추가(option)로 설정할 수 있다.
만일 us으로 값을 포함하면, 이 함수의 호출은 마지막 매개변수(parameter)로 한다. 

attachInterrupt(function, period)
함수는 us에서 특정한 주기로 호출된다.
너무 높은 주파수의 가로채기는 까다롭게(부정확하게) 실행되므로 주의해야 한다.
혹은 명령실행이 주함수로 돌아오지 못하고, 가로채기만 실행하게 되어 프로그램이 잠기게 된다.
 
주 : 만일 주기 값을 us로 사용한다면, 이 함수로 주기를 설정할 수 있다.
이 함수의 호출은 마지막 매개변수(parameter)로 한다.

setPwmDuty(pin, duty)
먼저 pwm() 함수를 호출하여, 이미 설정이 되었다면, 
PWM 전용핀의 PWM 주기를 설정하는 빠른 방법이다.
PWM()함수를 호출할 때의 명령(핀의 DDR 설정, pwm 허용, 주기의 조절)은 부담이 없다. 

detachInterrupt()
추가된 가로채기를 금지한다

disablePwm(pin)
특정한 PIN의 PWM을 금지한다, 이 핀들은 다른 용도로 사용할 수 있다.
 
--------------------------------------------------------------------------------
원리 요약 - 공개된 원리의 실제 학습
--------------------------------------------------------------------------------
void initialize(long microseconds=1000000);                     // 타이머 주기를 1초로 설정 (us 변수는 4바이트)
void start();                                                                  // 타이머 작동
void stop();                                                                  // 타이머 중지
void setPeriod(long microseconds);                               // 타이머 주기를 1000000 us으로 설정 
void pwm(char pin, int duty, long microseconds=-1);       // pwm을 pin으로 출력, duty%, 999999 us주기로 설정
void setPwmDuty(char pin, int duty);                              // pwm을 pin으로 출력, duty%로 설정 (주기설정을 한다음)
void disablePwm(char pin);                                           // pwm 출력을 정지
void attachInterrupt(void (*isr)(), long microseconds=-1);  // 가로채기 함수를 999999us으로 정위치에 추가
void detachInterrupt();
                                                   // 가로채기 함수를 삭제 (이후로 가로채기 못함)

-------------------------------------------------------------------------------- 
다음의 예는 50%의 펄스폭 비율(duty)로 PWM 출력은 핀 9로 설정한다.
그리고 D10번 핀을 매 1/2 주기마다 반전하는 가로채기 함수를 추가한다.
작성 : June 2008,  저자 이메일 : jesse dot tane at gmail dot com
--------------------------------------------------------------------------------
#include "TimerOne.h"           // 라이브러리를 추가한다 (가로채기 함수를 실행위치에 추가)

void setup()                         // 기판의 설정(초기화)
{
  pinMode(10, OUTPUT);       // 10번 핀을 출력으로 
  Timer1.initialize(500000);     // 타이머1을 1/2 초 주기로 설정

  Timer1.pwm(9, 512);           // 핀 9의 PWM을 50%로 설정
  Timer1.attachInterrupt(callback);   // 타이머1의 초과시 가로채기 callback() 함수를 추가
}

void callback()
{
  digitalWrite(10, digitalRead(10) ^ 1);  // 가로채기 마다 10번 핀을 읽어서 반전하고, 10번 핀에 출력 
}

void loop()                              // 무한반복되는 주함수를 선언                    
{                                           // 주함수의 시작 (반복 실행을 위해 주함수 끝에서 되돌아 오는곳)
                                             // 실행 프로그램은 여기에,,, (M168이 가득할 때 까지 추가 가능)
}                                           // 주함수의 끝


이 소스는 10번 핀에 연결된 LED를 0.5초 마다 깜빡인다. 1번 ON, 1번 OFF가 모두 출현해야 1 주기가 된다.

이 프로그램은 무료 소프트웨어로, 신체와 재산 상의 어떤 위험과 손해를 보상하지 않습니다.
이 프로그램은 GNU 무료 소프트웨어 배포규정을 따릅니다.
Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
  
 AVRTOOLS™

   
  0
9999
윗글 아듀이노 전용명령
아래글 8비트 포트의 단일비트 조작방법
    N         제목    글쓴이 작성일 조회 추천
판매상품의 사용설명서는 다른 자료실에,,, avrtools™ 2011/08/30 (화) 1540 0
23 LCD 문자표시 (신형) avrtools™ 2012/04/12 (목) 2219 0
22 아듀이노 멜로디 연주 avrtools™ 2008/08/22 (금) 3549 0
21 아듀이노 4비트 LCD (구형) avrtools™ 2008/09/02 (화) 4437 0
20 아듀이노 가변저항 avrtools™ 2008/08/26 (화) 3164 0
19 직렬 데이터 이동(shift) 출력 avrtools™ 2012/04/10 (화) 1800 0
18 디지털 신호의 펄스폭을 측정하는 함수 avrtools™ 2012/04/10 (화) 2059 0
17 EEPROM 읽기, 쓰기 함수 avrtools™ 2012/04/10 (화) 2413 0
16 변수의 크기 avrtools™ 2012/04/10 (화) 1716 0
15 플레시 메모리에 상수를 저장하고 읽는 함수 avrtools™ 2012/04/10 (화) 2025 0
14 소프트웨어 Serial 함수 avrtools™ 2012/04/10 (화) 1898 0
13 아듀이노 터치스위치 [3] avrtools™ 2008/08/11 (월) 4213 0
12 아듀이노 shiftOut avrtools™ 2008/09/10 (수) 3473 0
11 아듀이노 스위치와 LED점등 avrtools™ 2008/08/13 (수) 4837 0
10 아듀이노의 주파수 출력 함수 avrtools™ 2009/10/20 (화) 2863 0
9 One Button Switch Library avrtools™ 2012/03/09 (금) 1928 0
8 아듀이노 논리연산 avrtools™ 2008/08/26 (화) 3106 0
7 아듀이노 PS2 키보드 읽기 avrtools™ 2008/09/10 (수) 4247 0
6 아듀이노 가로채기 함수 avrtools™ 2008/08/23 (토) 3338 0
5 아듀이노 전용명령 avrtools™ 2008/09/16 (화) 4011 0
4 아듀이노 PWM 출력과 타이머1 전용명령 avrtools™ 2008/08/19 (화) 3660 0
3 8비트 포트의 단일비트 조작방법 avrtools™ 2010/10/30 (토) 2463 0
2 직렬포트에서 문자를 받아 숫자 int로 저장 avrtools™ 2012/04/08 (일) 1774 0
1 직렬통신포트의 초기화 avrtools™ 2012/04/06 (금) 1546 0
1

바구니 : 0
 보관함 : 0
오늘뷰 : 0
HOME   |   회사소개   |   제휴안내   |   회사위치   |   서비스이용 약관   |   개인정보 보호정책   |   사이트맵
17015 경기도 용인시 기흥구 동백중앙로16번길 16-25, 508호. 전화 : 031-282-3310
사업자 등록번호 : 697-47-00075 / 대표 : 이건영 / 업태 : 제조업 / 종목 : LED조명, LED전원, 제어장치.
개인정보 관리책임자 : 홈페이지 관리자 . Copyright ⓒ2016 아크레즈 (ACLEDS INC.)
HOME TOP PREVNEXT 0 0 0