현재 레지스터 값으로 ORing 하기 전에 왼쪽 된 장소의 수를 1 이동 합니다. 예를 들어 COM3A0이 이미 비트 이동되지 않는 한 이 모든 명령문은 여러 명령문과 영점의 ORing을 수행하고 단일 결과를 TCCR3A에 할당합니다. 우리가 듀티 사이클을 변경하지 않기 때문에이 특정 예에서 중요하지 않습니다. 그래서 그래, 그것은 아마 루프 외부에서 수행되는 경우 더 좋을 것입니다. 아날로그쓰기 함수를 호출할 때 설정한 8비트 PWM 값: analogWrite(myPWMpin, 128); 출력 사각형 파는 8비트 카운터의 값과 비교됩니다. 카운터가 PWM 값보다 작은 경우 핀은 HIGH를 출력합니다. 카운터가 PWM 값보다 크면 핀이 LOW를 출력합니다. 위의 예에서, 핀은 카운트 0에서 127까지 높고, LOW는 카운트 128에서 255까지 높기 때문에 사각형 파가 생성되므로 동일한 시간 동안 높음이 낮습니다. 일반적으로 PWM 신호로 전기 장치를 제어하는 데 있어 PWM 주파수를 즉시 변경하는 경우는 거의 없으므로 이 모드의 일반적인 응용 프로그램은 사운드를 생성하는 것입니다. 다음 C 코드 예제에서 위상 및 주파수 올바른 PWM을 사용하여 톤을 생성했습니다. 이 PWM 모드를 사용하는 또 다른 예는이 블로그의 “PWM 프로젝트를 사용하여 AVR 반짝반짝 반짝 반짝 노래”기사에서 읽을 수 있습니다.

안녕하세요, 다른 기사주셔서 감사합니다. 나는 여기에 질문이 있습니다. 2차 코드 예제 루프에서 `OCR0 = duty`로 구성됩니다. 루프 외부에서 한 번 수행하는 대신 루프에서 반복적으로 수행하는 감각이 있습니까? 내가 뭔가를 놓치고 있습니까? 당신의 멋진 튜토리얼 주셔서 감사합니다. 나는 pWm 및 가변 주파수 (내 스테퍼 드라이버 l297 / l298)와 스테퍼 모터의 속도를 제어 할 수 있습니다. 이 작업을 수행 할 수있는 기회가 있습니까? 나는 atmega2560의 데이터 시트를 읽었지만 가변 듀티 주기 및 고정 주파수에 대해서만 가변 주파수에 대해 찾지 못했습니다. 당신은 나에게 몇 가지 힌트를 줄 수 있습니까? 빠르고 쉬운 해결책은 타이머3 lib를 다운로드하고 다음과 같은 예를 실행하는 것입니다 : 나는 ATMEGA32U4 (아두 이노 보드)를 사용하고, 나는 타이머에 문제가 직면하고있다, 나는 두 핀에 1 Hz에서 40 Hz의 신호를 생성하고 시간의 특정 기간으로 PWM 신호를 변경하려면 .