Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


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

1 충북인력개발원 전자과 공학박사 강원찬 3. Timer & Counter &PWM

2 uP AVR (Atmega128) - 2 - PWM1=OC1A(PB5) PWM2=OC1B(PB6) T0=T1(PD6) T1=T2(PD7)

3 uP AVR (Atmega128) - 3 -

4 uP AVR (Atmega128) - 4 - 테스트 회로구성 AVR J53 J42 연결 PORTA J30 연결

5 uP AVR (Atmega128) - 5 - AVR Port B J29 연결

6 uP AVR (Atmega128) - 6 - 새 프로젝트 생성 (File->New)

7 uP AVR (Atmega128) - 7 -

8 uP AVR (Atmega128) - 8 - Timer 1 예제 // Timer 1 overflow interrupt service routine interrupt [TIM1_OVF] void timer1_ovf_isr(void) { // Reinitialize Timer 1 value TCNT1H=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; }

9 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=0xE3DF 1/7.3728MHz=0.135,633,680uSec*1024=138.888uS 138.888*7200uS=1000,000uS=1Sec 그리고 역시 DDRB 를 0xff 로 설정해서 PORTB 도 0xff 에 서 ~led 로 사용하는 로우 엑티브 방식

10 uP AVR (Atmega128) - 10 - Timer 1 예제 #include TCCR1A=0x00; TCCR1B=0x05; TCNT1H=0xe3; TCNT1L=0xdf; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x04; ETIMSK=0x00; // Global enable interrupts #asm("sei") DDRB = 0xff; PORTB = 0xff; led = 0; while (1) { // Place your code here }; }

11 uP AVR (Atmega128) - 11 - Timer0 예제 #include unsigned char data =0xfe; Void main() {DDRB=0xff; PORTB=0xff; TCCR0=0x07;//normal mode(overflow, 1024 prescaler) TCNT0=0x00;//timer/count0 TIMSK=0x01;//TIOE0 overflow, interrupt enable TIFR=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") }

12 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 제어

13 uP AVR (Atmega128) - 13 - 2 번 해답 unsigned char led=0xfe; unsigned char cnt=0; unsigned char tog=0; // Timer 1 overflow interrupt service routine interrupt [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") }

14 uP AVR (Atmega128) - 14 - Counter 예제 (T0 입력 카운트 ) #include void main(void) { DDRD=0xbf; PORTD=0x00; TCCR1A=0x00;//normal mode TCCR1B=0x06; //external clock, falling edge TCNT1=0x0000;//timer/count0 while (1) { PORTB=TCNT1; }; } // 키트에 회로가 구성이 안되어 실습불가 !!

15 uP AVR (Atmega128) - 15 - #include 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); } }; }

16 uP AVR (Atmega128) - 16 - 16bit PWM mode #include 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 모터 제어에서 활용할 것임.

17 uP AVR (Atmega128) - 17 -

18 uP AVR (Atmega128) - 18 - 연습문제 1) OCRA, OCRB, OCRC 를 이용하여 각각 30%, 50%, 80% 듀티비를 설계하고, 40ms, 100ms, 500ms 로 주기를 설정하세요 2) 타이머를 이용하여 PWM 모드를 구현하세 요.( 단, timer0 은 high, timer1 은 low)

19 uP AVR (Atmega128) - 19 - -끝--끝-


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

Similar presentations


Ads by Google