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








 게시판 검색





 
 
회원등록 비번분실


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

      거래은행 바로가기
 
 Arduino Open Source
아듀이노 함수의 상세설명
작성자 avrtools™        
작성일 2008/08/23
ㆍ추천: 0  ㆍ조회: 3127   
  아듀이노 가로채기 함수
참조 사이트 : http://www.maartenlamers.com/ThisIsWiring/

포트입력 가로채기
주함수에서 시간지연 함수를 처리중이거나, 직렬포트로 PC와 데이터 통신을 하고 있는 중에,
주 처리와 동시에 입력핀에 연결된 스위치나 연결된 센서의 상태를 읽는 처리를 하려면,
 
별도의 입력 스위치나 센서의 상태에 상응하는 적절한 처리를 하는 함수를,
매번 통신하는 주함수의 중간, 중간에 필요한 만큼의 함수를 추가해야 하는 불편함과,
주함수에 추가된 많은 함수의 실행으로, 주함수의 실행속도에 많은 영향을 주게 된다.
 
그러나, 하드웨어 가로채기는 하드웨어의 입력이 설정된 상태로 변화하면,
실행하던 주함수는 자동적으로 중지되고, 지체없이 첨부된 가로채기 함수를 실행한다.
첨부된 하드웨어 가로채기 함수의 실행이 끝나면, 다시 주함수의 실행을 계속한다.
 
아래의 예는, 스위치를 외부 가로채기 핀에 연결하고, 소스에 외부 가로채기 함수를 첨부한다.
이제 스위치가 눌리면, 스위치가 연결된 외부 가로채기 입력핀은 HIGH에서 LOW로 바뀌게 되고,
첨부된 가로채기 함수가 자동적으로 실행된다. 아듀이노 기판은 D2 와 D3 이 외부 가로채기 입력핀이다.

void setup()               // 기판의 초기설정
{
  attachInterrupt(7, myRoutine, FALLING);  // 하강신호로 가로채기 7번을 실행, 가로채기 함수는 myRoutine 
}

void myRoutine()         // 가로채기 함수 myRoutine
{
  n++;                         // 간단한 예로 변수 n을 증가시킨다.  
}

소스
// 이 예는 외부 가로채기가 어떻게 작동하는지 보여준다.
// 외부 가로채기는 0부터 7 까지이며, D0~D3 과 D36~39 이다.
// 아듀이노는 D2~D3을 지원한다.
int n = 0;                    // 가로채기 실험용 변수 n

void setup()               // 기판 초기설정
{
  Serial.begin(9600);    // 통신속도를 9600으로 설정
  pinMode(39, INPUT); // 핀 39를 입력으로

  // 첨부된 함수 myRoutine()은 외부 가로채기 7 과 39 가 HIGH에서 LOW로 하강하면 발생한다.
  attachInterrupt(7, myRoutine, FALLING);    // 가로채기 7번에 함수 myRoutine의 실행을 선언   
}

void loop()                 // 무한반복 주함수
{
  Serial.println(n);        // 가로채기에서 처리하는 변수 n을 직렬포트에 송신한다
  delay(200);               // 별로 하는 일이 없으므로 200ms을 대기한다.
}

void myRoutine()        // 가로채기 실행함수
{
  n++;                        // 가로채기가 몇번 발생하는지, 매번 변수n에 +1 한다.
}

가로채기를 솜씨있게 사용할수 있는 2개의 특별한 주의사항:
가로채기 함수가 실행되는 동안, 다른 가로채기는 지연된다. 가로채기 함수에서 타이머도 그만큼 지연된다.
다른 함수 또한 동시에 작동하는 것을 기대하지 말라, 그러므로, 가로채기 함수는 짧고 간단하게 유지해야 한다.

물리적인 단추 스위치를 눌럿을 때, High에서 low로 전환되는 짧은 시각에 접점진동(bounce)이 발생한다,
결과적으로, 단추를 한번만 눌러도 몇 번의 외부 가로채기가 발생된다는 것을 알아야 한다

------------------------------------------------------------------------------------------------------------------
 
ADC 변환완료 가로채기 처리함수
#include <stdio.h>      // 문자를 처리하는 함수가 있을 때, 필요한 라이브러리
int acc;                      // 지역과 주함수에서 모두 사용하는, 광역변수들은 처음에 선언한다.
int eoc;
 
// 컴파일러 지시자 #pragma는 ADC 장치가 변환이 완료되엇을 때,
// 가로채기가 실행되는 주소(ADC_vect)에 ISR(ADC_vect) 함수를 배치한다. 
#pragma vector=ADC_vect
ISR(ADC_vect)    // 10 비트 ADC 가로채기 함수
{
  acc = ADC;     // 1회 변환한 값을 저장한다
  eoc =1;           // 변환완료를 표시한다.
}
 
ADC 변환완료 가로채기 설정함수
// CLK/64 ~ 2, (CK/64 일때 변환속도 = 3회/1초),
// 단일(Single ended) 입력으로, ADC0의 결과는 오른쪽으로 정렬 (Right adjusted)
void init_adc(void)
{
  ADCSRA = (1<<ADEN)|(1<<ADIE)|(1<<ADSC)|(1<<ADATE)|(1<<ADPS2)|(1<<ADPS1);  // CLK/64                   
  ADMUX = (0<<REFS1)|(0<<REFS0);                 // AREF =AVCC, ADC CH =0               
  ADCSRA |= ADSC;                // ADC 가로채기를 시작
}
 
ADC 가로채기 시험 소스
void setup()                            // 기판의 초기화 (1번만 실행됨)
{
  Serial.begin(9600);                 // 직렬통신 포트를 9600 bps로 시작      
  init_adc();                             // ADC를 초기화하고, 가로채기를 시작
}
 
void loop()                              // 반복 실행되는 주함수
{
   int volt;                                // 주함수에서만 사용하는 지역변수
 
   ADMUX =7;                          // A7 포트에 연결된 입력을, 아나로그 전압으로 읽는다. 
   if (eoc ==1)                          // 가로채기에서 ADC결과를 저장햇는가?
  {
     eoc =0;                              // 다음 변환을 위해서 eoc(변환완료) 플랙을 지운다.
     volt = (adc *5000) /1023;      // ADC값을 mV로 계산한다
 
     Serial.print("ADC = ");          // ADC = 을 표시
     Serial.print(acc, DEC);        // 0~5000 을 10진으로 표시
     Serial.println(" [mV]");        // [mV]를 표시하고, 줄을 바꾼다. 
     delay(1000);                       // 1초를 기다린다. (1초에 1번 측정한다)
   }
}

이 프로그램은 무료 소프트웨어로, 신체와 재산 상의 어떤 위험과 손해를 보상하지 않습니다.
이 프로그램은 GNU 무료 소프트웨어 배포규정을 따릅니다.
Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
  
 AVRTOOLS™
   
  0
9999
윗글 아듀이노 PS2 키보드 읽기
아래글 아듀이노 전용명령
    N         제목    글쓴이 작성일 조회 추천
판매상품의 사용설명서는 다른 자료실에,,, avrtools™ 2011/08/30 (화) 1427 0
23 LCD 문자표시 (신형) avrtools™ 2012/04/12 (목) 2057 0
22 아듀이노 멜로디 연주 avrtools™ 2008/08/22 (금) 3395 0
21 아듀이노 4비트 LCD (구형) avrtools™ 2008/09/02 (화) 4249 0
20 아듀이노 가변저항 avrtools™ 2008/08/26 (화) 3047 0
19 직렬 데이터 이동(shift) 출력 avrtools™ 2012/04/10 (화) 1672 0
18 디지털 신호의 펄스폭을 측정하는 함수 avrtools™ 2012/04/10 (화) 1944 0
17 EEPROM 읽기, 쓰기 함수 avrtools™ 2012/04/10 (화) 2227 0
16 변수의 크기 avrtools™ 2012/04/10 (화) 1574 0
15 플레시 메모리에 상수를 저장하고 읽는 함수 avrtools™ 2012/04/10 (화) 1834 0
14 소프트웨어 Serial 함수 avrtools™ 2012/04/10 (화) 1758 0
13 아듀이노 터치스위치 [3] avrtools™ 2008/08/11 (월) 4063 0
12 아듀이노 shiftOut avrtools™ 2008/09/10 (수) 3301 0
11 아듀이노 스위치와 LED점등 avrtools™ 2008/08/13 (수) 4547 0
10 아듀이노의 주파수 출력 함수 avrtools™ 2009/10/20 (화) 2683 0
9 One Button Switch Library avrtools™ 2012/03/09 (금) 1796 0
8 아듀이노 논리연산 avrtools™ 2008/08/26 (화) 2941 0
7 아듀이노 PS2 키보드 읽기 avrtools™ 2008/09/10 (수) 3995 0
6 아듀이노 가로채기 함수 avrtools™ 2008/08/23 (토) 3127 0
5 아듀이노 전용명령 avrtools™ 2008/09/16 (화) 3875 0
4 아듀이노 PWM 출력과 타이머1 전용명령 avrtools™ 2008/08/19 (화) 3507 0
3 8비트 포트의 단일비트 조작방법 avrtools™ 2010/10/30 (토) 2310 0
2 직렬포트에서 문자를 받아 숫자 int로 저장 avrtools™ 2012/04/08 (일) 1647 0
1 직렬통신포트의 초기화 avrtools™ 2012/04/06 (금) 1436 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