본문 바로가기
공부,일/atmega328P

atmega 328p PWM & timer counter (5) 실습 Fast PWM

by fromnothing1 2021. 7. 27.

fast pwm

나는 Fast PWM 의 COMmx 1:0 = 3 경우를 실습 해보겠다. 

OCnx 가 토글된 값이 나옴으로  OCR0A 가 작을수록 LED 가 밝아 진다. 

 

cli(); // 인터럽트 안일어남
sei(); // 인터럽트 일어남

잘 쓰이는 함수 

void setup()
{
  Serial.begin(9600);
  //PORTD = PORTD|(1<<6);
  DDRD = DDRD|(1<<6); // 주의
  OCR0A = 2;
  TCCR0A = 0b10000011; // 노멀모드 초기화 
  TCCR0B = 0x03; //분주비 64
  TIFR0 = 0x03;  // flag 초기화 
  TIMSK0 = 0x03; // overflow 인터럽트 발생가능
  sei();
}
void loop() {}

 

나는 timer0의 OCR0A 레지스터를 사용했으므로 OC0A port가 PWM 출력으로 사용된다. 

OC0A는 6번 port 임으로  DDRD 의 6번 bit를 set 한다. 

 

재미있는 것은 PORTD 의 6번 bit는 출력용으로 설정하든 아니든 상관이 없다. 

 

실행 몸습

 

 

- 질문 -

또한 TIMSK0를 보면 OCIE0A를 set 해줘야지 compare match 인터럽트가 발생하는데 OCIE0A set 해주면 serial 통신이 제대로 작동하지 않는다. 

 

 

 

 

댓글