사용한 툴 : 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값을 조정한다.
'프로그래밍 > ATMega128' 카테고리의 다른 글
(ATMega128) PC와의 UART통신 (0) | 2016.07.10 |
---|---|
(ATmega128) 타이머로 LED 켜기 (0) | 2016.07.10 |
(ATMega128) 인터럽트를 이용한 LED동작 멈춤/재생 (0) | 2016.07.10 |
(ATMega128) FND값 올리기 (0) | 2016.07.10 |
(ATMega128) Switch 누른데로 LED켜기 (0) | 2016.07.10 |