프로그래밍/ATMega128
(ATMega128) PWM 사용하기
길가다주운노트
2016. 7. 10. 19:09
사용한 툴 : avr studio 4
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #include<avr/io.h> #include<avr/interrupt.h> #include<util/delay.h> int main() { unsigned char Light = 0 ; DDRB=0x10; TCCR0=0x71; TCNT0=0; while(1) { for(Light=0;Light<255;Light++) { OCR0=Light; _delay_ms(10); } for(Light=255;Light>0;Light--) { OCR0=Light; _delay_ms(10); } } return 0; } | cs |
8 PWM 출력값을 받기위해 PORTB의 4번핀을 출력으로 사용
9 TCCR : 7번비트 부터 0번비트까지 FOC, WGM0, COM1, COM0, WGM1, CS2, CS1, CS0 을 설정 할 수 있는데 CS는 분주기 WGM은 모드를 설정 하는 것이다.
8비트 타이머(0,2)의 설정
WGM1 | WGM0 | Mode Name | 설명 |
0 | 0 | Normal mode | TCNT값을 조정하여 TCNT가 255일때 인터럽트가 발생 |
0 | 1 | CTC mode | TCNT가 특정 값에 도달하면 인터럽트 발생 |
1 | 0 | Fast PWM mode | 특정 값, 255일때 인터럽트 발생 |
1 | 1 | PC PWM mode | 0->255 업카운팅 255->0 다운카운팅 COM1,0에 따라 OCR가 업카운팅 or 다운카운팅일때 값이 일치하면 인터럽트 |
따라서 지금은 PC PWM mode를 사용하고 있으며 COM1,0도 1 1 이여서 업카운팅일때 인터럽트가 발생한다.
10 카운트 되는 것을 0으로 초기화
15,20 OCR의 값을 변경함에 따라 PWM값을 조정한다.