나는 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 |
댓글