
나는 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 통신이 제대로 작동하지 않는다.
'공부,일 > atmega328P' 카테고리의 다른 글
| atmega328P ADC (2) 프로젝트 실습 (0) | 2021.07.28 | 
|---|---|
| atmega328P ADC (1) 개념 및 레지스터 (0) | 2021.07.28 | 
| atmega 328p PWM & timer counter (4) 실습 (Normal mode) (0) | 2021.07.27 | 
| atmega 328p PWM & timer counter (3) mode (0) | 2021.07.27 | 
| atmega 328p PWM & timer counter (2) 구조 및 레지스터 (0) | 2021.07.27 | 
 
										
									 
										
									 
										
									 
										
									
댓글