2014-01-12 28 views
0

在调试我使用类似Arduino的电路板和ATmega328的硬件原型之后,我注意到RF库VirtualWire禁用了引脚D10中的PWM信号。 这是为什么?为什么VirtualWire与Arduino/ATmega328引脚D10中的PWM信号冲突?

如果我注释掉的下面的代码比特,analogWrite(PWM)上销D10工作再次:

setup() { 
    ... 
    vw_set_rx_pin(2); 
    vw_setup(2000); // Bits per sec 
    vw_rx_start();  // Start the receiver PLL running 

    analogWrite(10, 180); 
    ... 
} 

回答

1

VirtualWire经由OCR1A,其中两个完全禁用OC1A PWM操作(在计时器1使用CTC在D9)和OC1B(在D10上),并防止OC1A自由运行。 OC1B仍然可用,但只能在CTC规定的模式下以VirtualWire编程定时器的速率进行。

+0

很高兴知道这一点,谢谢!有没有什么办法可以解决这个问题,我的意思是改变VirtualWire并重新编译它,以便释放这两个引脚?我应该把它作为一个单独的问题吗? – Ricardo

+1

不幸的是没有。 VirtualWire需要一个16位定时器,ATmegaXX8只有1个可用。您需要切换到具有多个设备才能移动的设备。 –