아날로그 PIN에 비트 쓰기
비트 피연산자를 배우기 시작했으며 여기에 내 질문이 있습니다. 이것을하기 위해:
pinMode (13, OUTPUT);
digitalWrite (13, HIGH);
이렇게 할 수 있습니다.
DDRB |= B00100000; //set PIN13 as OUTPUT
PORTB |= B00100000; //set PIN13 HIGH
하지만 어떻게 할 수 있습니까?
analogWrite(9, 200);
DEC 번호를 BIN으로 변환하는 방법을 알고 있지만이 번호를 PWM PIN으로 보내는 방법은 무엇입니까? 웹에서 좋은 예를 찾을 수 없습니다 .. 감사합니다!
답변
사용중인 Arduino를 지정하지 않았습니다. 원칙은이 하드웨어가있는 모든 AVR 마이크로 컨트롤러에서 작동하지만 여기서는 Atmega328p 기반 Arduino (Uno, Nano, Mini)를 가정하고 있습니다.
With analogWrite()는 핀에서 비트 단위로 데이터를 보내지 않습니다. 특정 주파수 및 특정 듀티 사이클로 해당 핀을 설정하기 위해 하드웨어 타이머를 구성합니다. 따라서 analogWrite()마이크로 컨트롤러 내부에서 완전히 다른 하드웨어를 활성화합니다.
Arduino 기능없이이 작업을 수행하려면 analogWrite()먼저 어떤 방법으로 이동할지 결정해야합니다.
- 하드웨어 타이머를 통해 인터럽트를 생성 한 다음 ISR 내부의 소프트웨어로 원하는 핀을 설정할 수 있습니다 (핀을 자유롭게 선택할 수 있지만 신호에 약간의 지터가 발생 함).
- 또는 하드웨어 타이머 자체가 핀을 토글하도록 할 수 있습니다.이 핀은 실행을위한 소프트웨어를 포함하지 않습니다 (즉, 해당 타이머와 관련된 2 개의 핀 중 하나만 사용할 수 있지만 훨씬 더 안정적인 신호를 얻을 수 있음을 의미합니다) )
이를 수행하는 방법에 대한 많은 자습서가 웹에 있습니다. "arduino timer register pwm"에 대한 검색은 예를 들어 Timer1 레지스터로 PWM을 얻는 방법과 주파수를 자유롭게 선택할 수있는 방법을 설명하는 이 결과와 같은 몇 가지 유망한 결과를 제공했습니다. (즉, 3 부작, 각 타이머에 대한 한 부분이다. 타이머 0 파트 1은 여기에 당신이 그대로 타이머 0을 유지 할 수 있습니다하지만, 그래서 같은 기능이 delay()와 millis()정상적으로 여전히 일). 이 사이트에는 이러한 질문이 많이 있습니다 (예 : this one) .
하드웨어와 관련된 또 다른 매우 중요한 소스는 해당 마이크로 컨트롤러의 데이터 시트입니다. Atmega328p 인 Uno, Nano 또는 Mini의 경우 데이터 시트는 여기 마이크로 칩 사이트 에서 찾을 수 있습니다 (또는 마이크로 컨트롤러 이름을 검색 할 때).