■PWM

 Timer기능 안에 PWM mode가 있다. 주로 쓰는 것이 Fast Pwm mode.

PWM(Pulse Width Modulation) 신호는 디지털 소스를 사용하여 아날로그 신호를 생성하는 방법입니다. PWM 신호는 듀티 사이클과 주파수라는 가지 주요 구성 요소로 구성됩니다.

 듀티 사이클은 신호가 하이(또는 켜짐) 상태에 있는 시간을 1 사이클을 완료하는 걸리는 시간의 백분율로 나타냅니다.

 

, Buzzer에서 PWM 높은 것은 음향이 높은 , 듀티 사이클이 짧을수록 높은 음이 나옵니다.

PWM 신호는 다양한 제어 어플리케이션에 사용됩니다. 용도는 DC 모터 제어이지만 밸브, 펌프, 유압 장치 기타 기계 부품을 제어하는 ​​곳에도 사용할 있습니다.

 

 

TCCR0 prescale TCNT0,OCR0 값으로 클럭이 조정된다

TCNT0 주파수(Frequency) 조절할 있다.

OCR0 듀티 사이클 조절할 있다.

 

#include <avr/io.h>
#include <avr/interrupt.h>
#define F_CPU 16000000UL
#include <util/delay.h>


volatile int state, tone;
char f_table[8] = {17, 43, 66, 77, 97, 114, 117, 137};


ISR(TIMER0_OVF_vect)                               
{
	 PORTB ^= 1 << 4;

     TCNT0 = f_table[tone];
}

int main()
{
	DDRD = (0x00 << 7);
             int i=0;
             DDRB = 0x10;                    
             TCCR0 = 0x03;                  
             TIMSK = 0x01;                 
        
             sei();                               
             while(1) {
				  if (!(PIND & ( 1<<PIND7 )) )//버튼이 눌러졌다면
				  {
					   tone = f_table[rand()%8]; 
					   OCR0 = rand()%255;          
				  }
                         
             };                  
}

'kernel Driver' 카테고리의 다른 글

[Atmega128]Character LCD  (0) 2019.04.30
GPIO를 이용한 I2C구현  (0) 2019.04.24

+ Recent posts