충북인력개발원 전자과 공학박사 강원찬 3. timer & counter &pwm. up avr...

19
충충충충충충충 충충충 충충충충 충충충 3. Timer & Counter &PWM

Upload: alexandra-flowers

Post on 18-Jan-2018

257 views

Category:

Documents


0 download

DESCRIPTION

uP AVR (Atmega128) - 3 -

TRANSCRIPT

Page 1: 충북인력개발원 전자과 공학박사 강원찬 3. Timer & Counter &PWM. uP AVR (Atmega128) - 2 - PWM1=OC1A(PB5) PWM2=OC1B(PB6) T0=T1(PD6) T1=T2(PD7)

충북인력개발원 전자과공학박사 강원찬

3. Timer & Counter &PWM

Page 2: 충북인력개발원 전자과 공학박사 강원찬 3. Timer & Counter &PWM. uP AVR (Atmega128) - 2 - PWM1=OC1A(PB5) PWM2=OC1B(PB6) T0=T1(PD6) T1=T2(PD7)

uP AVR (Atmega128)

- 2 -

PWM1=OC1A(PB5)PWM2=OC1B(PB6)

T0=T1(PD6)T1=T2(PD7)

Page 3: 충북인력개발원 전자과 공학박사 강원찬 3. Timer & Counter &PWM. uP AVR (Atmega128) - 2 - PWM1=OC1A(PB5) PWM2=OC1B(PB6) T0=T1(PD6) T1=T2(PD7)

uP AVR (Atmega128)

- 3 -

Page 4: 충북인력개발원 전자과 공학박사 강원찬 3. Timer & Counter &PWM. uP AVR (Atmega128) - 2 - PWM1=OC1A(PB5) PWM2=OC1B(PB6) T0=T1(PD6) T1=T2(PD7)

uP AVR (Atmega128)

- 4 -

테스트 회로구성

AVR J53 <-> J42 연결PORTA <-> J30 연결

Page 5: 충북인력개발원 전자과 공학박사 강원찬 3. Timer & Counter &PWM. uP AVR (Atmega128) - 2 - PWM1=OC1A(PB5) PWM2=OC1B(PB6) T0=T1(PD6) T1=T2(PD7)

uP AVR (Atmega128)

- 5 -

AVR Port B <-> J29 연결

Page 6: 충북인력개발원 전자과 공학박사 강원찬 3. Timer & Counter &PWM. uP AVR (Atmega128) - 2 - PWM1=OC1A(PB5) PWM2=OC1B(PB6) T0=T1(PD6) T1=T2(PD7)

uP AVR (Atmega128)

- 6 -

새 프로젝트 생성 (File->New)

Page 7: 충북인력개발원 전자과 공학박사 강원찬 3. Timer & Counter &PWM. uP AVR (Atmega128) - 2 - PWM1=OC1A(PB5) PWM2=OC1B(PB6) T0=T1(PD6) T1=T2(PD7)

uP AVR (Atmega128)

- 7 -

Page 8: 충북인력개발원 전자과 공학박사 강원찬 3. Timer & Counter &PWM. uP AVR (Atmega128) - 2 - PWM1=OC1A(PB5) PWM2=OC1B(PB6) T0=T1(PD6) T1=T2(PD7)

uP AVR (Atmega128)

- 8 -

Timer 1 예제// Timer 1 overflow interrupt service routineinterrupt [TIM1_OVF] void timer1_ovf_isr(void){// Reinitialize Timer 1 valueTCNT1H=0xC2;TCNT1L=0xF6;// Place your code here}unsigned char led; // 전역변수선언interrupt [TIM1_OVF] void timer1_ovf_isr(void){        led++;        if ( led == 32 )                 led = 0;         // Reinitialize Timer 1 value        TCNT1H=0xe3;        TCNT1L=0xdf;        // Place your code here        PORTB = ~led;}

Page 9: 충북인력개발원 전자과 공학박사 강원찬 3. Timer & Counter &PWM. uP AVR (Atmega128) - 2 - PWM1=OC1A(PB5) PWM2=OC1B(PB6) T0=T1(PD6) T1=T2(PD7)

uP AVR (Atmega128)

- 9 -

1Sec 계산루틴 어째서 TCNT1 의 값이 C2F6 이냐면 ..16Mhz 에서 1024 의 분주비를 사용하면 15,625 의 값이 나오는데 , FFFF 에서 15,625 즉 3D09 던가 의 값을 카운트 해주려면 FFFF-3D09 -> C2F6 로 타이머 1 의 오버플로우값 FFFF 를 넘기는 것이다 .7.3728MHz/1024=7200(0x1C20)0xFFFF-0x1C20=0xE3DF1/7.3728MHz=0.135,633,680uSec*1024=138.888uS138.888*7200uS=1000,000uS=1Sec

그리고 역시 DDRB 를 0xff 로 설정해서 PORTB 도 0xff에서 ~led 로 사용하는 로우 엑티브 방식

Page 10: 충북인력개발원 전자과 공학박사 강원찬 3. Timer & Counter &PWM. uP AVR (Atmega128) - 2 - PWM1=OC1A(PB5) PWM2=OC1B(PB6) T0=T1(PD6) T1=T2(PD7)

uP AVR (Atmega128)

- 10 -

Timer 1 예제#include <mega128.h> #include <delay.h>TCCR1A=0x00;TCCR1B=0x05;TCNT1H=0xe3;TCNT1L=0xdf;// Timer(s)/Counter(s) Interrupt(s) initializationTIMSK=0x04;ETIMSK=0x00;// Global enable interrupts#asm("sei")DDRB = 0xff;PORTB = 0xff;led = 0;while (1) { // Place your code here };}

Page 11: 충북인력개발원 전자과 공학박사 강원찬 3. Timer & Counter &PWM. uP AVR (Atmega128) - 2 - PWM1=OC1A(PB5) PWM2=OC1B(PB6) T0=T1(PD6) T1=T2(PD7)

uP AVR (Atmega128)

- 11 -

Timer0 예제#include <mega128.h>unsigned char data =0xfe; Void main(){ DDRB=0xff;

PORTB=0xff;TCCR0=0x07; //normal mode(overflow, 1024 prescaler)TCNT0=0x00; //timer/count0TIMSK=0x01; //TIOE0 overflow, interrupt enableTIFR=0x01; //timer0 overflow flag#asm("sei")while (1) { PORTB=data; };

}

interrupt [TIM0_OVF] void tim0_ovf_interrupt(void){

#asm(“cli")TCNT0=0x00;data--;#asm("sei")

}

Page 12: 충북인력개발원 전자과 공학박사 강원찬 3. Timer & Counter &PWM. uP AVR (Atmega128) - 2 - PWM1=OC1A(PB5) PWM2=OC1B(PB6) T0=T1(PD6) T1=T2(PD7)

uP AVR (Atmega128)

- 12 -

연습문제1) Timer 1 을 이용해 2[sec] 마다 LED 쉬프트 시키는 프로그램을 작성하시오 .

2)Timer 0 를 혼용하여Timer 0 3[sec] 당 A port 시프트제어Timer 1 2[sec] 당 B port count 제어

Page 13: 충북인력개발원 전자과 공학박사 강원찬 3. Timer & Counter &PWM. uP AVR (Atmega128) - 2 - PWM1=OC1A(PB5) PWM2=OC1B(PB6) T0=T1(PD6) T1=T2(PD7)

uP AVR (Atmega128)

- 13 -

2 번 해답unsigned char led=0xfe;unsigned char cnt=0;unsigned char tog=0;// Timer 1 overflow interrupt service routineinterrupt [TIM1_OVF] void timer1_ovf_isr(void){TCNT1H=0xC7;TCNT1L=0xBF; led=led<<1 | 0x01;PORTB=led;if(led==0x7f) led=0xfe;} interrupt [TIM0_OVF] void tim0_ovf_interrupt(void){#asm("cli")TCNT0=0x00;cnt++;if(cnt==28){ cnt=0; if(tog==0){ tog=1,PORTA.6=0;} else {tog=0, PORTA.6=1;}}#asm("sei") }

Page 14: 충북인력개발원 전자과 공학박사 강원찬 3. Timer & Counter &PWM. uP AVR (Atmega128) - 2 - PWM1=OC1A(PB5) PWM2=OC1B(PB6) T0=T1(PD6) T1=T2(PD7)

uP AVR (Atmega128)

- 14 -

Counter 예제 (T0 입력 카운트 )

#include <mega128.h>void main(void){

DDRD=0xbf;PORTD=0x00;TCCR1A=0x00; //normal modeTCCR1B=0x06; //external clock, falling edgeTCNT1=0x0000; //timer/count0

while (1) {

PORTB=TCNT1; };} // 키트에 회로가 구성이 안되어 실습불가 !!

Page 15: 충북인력개발원 전자과 공학박사 강원찬 3. Timer & Counter &PWM. uP AVR (Atmega128) - 2 - PWM1=OC1A(PB5) PWM2=OC1B(PB6) T0=T1(PD6) T1=T2(PD7)

uP AVR (Atmega128)

- 15 -

#include <mega128.h>#include <delay.h>void pwm0_out(unsigned char duty) //8bit PWM{ OCR0=duty;} void main( void ){ unsigned char number; DDRB=0xFF; // 포트 B 출력 PORTB=0xFF; DDRB=0b00010000; // PORTB.4 를 OC0 로 설정한다 . TCCR0=0x6A; // (0110 1010) Fast PWM, Non-inverting, 8 prescaler // f=16MHz/(N*256), N=8 prescaler factor // f= 7.8125KHz, T=128usec

// PWM 의 주기는 128usec 가 된다 . TCNT0=0x00; // T/C value=0 OCR0=0x00; delay_ms(10); // 10msec 대기 while(1) { for(number=0;number<256;number++) { pwm0_out(number); // OC0 핀 (PB4) 에 출력

delay_ms(10); } };}

Page 16: 충북인력개발원 전자과 공학박사 강원찬 3. Timer & Counter &PWM. uP AVR (Atmega128) - 2 - PWM1=OC1A(PB5) PWM2=OC1B(PB6) T0=T1(PD6) T1=T2(PD7)

uP AVR (Atmega128)

- 16 -

16bit PWM mode#include <mega128.h>void main( void ){ DDRB=0xe0; // 포트 B 출력 (PB5,6,7), OCRA/OCRB/OCRC PORTB=0xFF; TCNT1H=0x00; TCNT1L=0x00; TCCR1A=0xab; //1010 1011 TCCR1B=0x0c; //00001100 (clk/256), 10bit mode top=0x03ff OCR1AH=0x00; OCR1AL=0xcd; OCR1BH=0x00; OCR1BL=0xff; OCR1CH=0x01; OCR1CL=0x00; while(1); } // 오실로스코프로 파형을 측정할 것 !! // R/C servo 와 DC 모터 제어에서 활용할 것임 .

Page 17: 충북인력개발원 전자과 공학박사 강원찬 3. Timer & Counter &PWM. uP AVR (Atmega128) - 2 - PWM1=OC1A(PB5) PWM2=OC1B(PB6) T0=T1(PD6) T1=T2(PD7)

uP AVR (Atmega128)

- 17 -

Page 18: 충북인력개발원 전자과 공학박사 강원찬 3. Timer & Counter &PWM. uP AVR (Atmega128) - 2 - PWM1=OC1A(PB5) PWM2=OC1B(PB6) T0=T1(PD6) T1=T2(PD7)

uP AVR (Atmega128)

- 18 -

연습문제1) OCRA, OCRB, OCRC 를 이용하여각각 30%, 50%, 80% 듀티비를 설계하고 ,40ms, 100ms, 500ms 로 주기를 설정하세요

2) 타이머를 이용하여 PWM 모드를 구현하세요 .( 단 , timer0 은 high, timer1은 low)

Page 19: 충북인력개발원 전자과 공학박사 강원찬 3. Timer & Counter &PWM. uP AVR (Atmega128) - 2 - PWM1=OC1A(PB5) PWM2=OC1B(PB6) T0=T1(PD6) T1=T2(PD7)

uP AVR (Atmega128)

- 19 -

- 끝 -