[英]PWM fadeing LED on arduino
I`m trying to blink led with PWM on Arduino, and I dont know whats wrong. 我正在尝试通过Arduino上的PWM来眨眼,但我不知道怎么了。 But my LED is not fadeing. 但是我的LED没变。 What is wrong? 怎么了? I think that I have bad registers settings, but Im not sure. 我认为我的寄存器设置不正确,但是我不确定。 Led is connected on arduino pin 11. Thank you. LED连接在arduino引脚11上。谢谢。
#include <avr/io.h>
#include <util/delay.h>
const int delay=1000;
void initialize_PWM()
{
TCCR0A|=(1<<WGM00)|(1<<WGM01)|(1<<COM0A1);
TCCR0B=1;
DDRB|=(1<<PB3);
}
void set_pwm(uint8_t data)
{
OCR0A=data;
}
int main (void)
{
initialize_PWM();
uint8_t brightness=200;
while(1)
{
for(brightness=0;brightness<255;brightness++)
{
set_pwm(brightness);
_delay_ms(1);
}
for(brightness=255;brightness>0;brightness--)
{
set_pwm(brightness);
_delay_ms(1);
}
}
return 0;
}
Have you looked at the 'Fade' example program? 您是否看过“ Fade”示例程序?
/*
Fade
This example shows how to fade an LED on pin 9
using the analogWrite() function.
This example code is in the public domain.
*/
int led = 9; // the pin that the LED is attached to
int brightness = 0; // how bright the LED is
int fadeAmount = 5; // how many points to fade the LED by
// the setup routine runs once when you press reset:
void setup() {
// declare pin 9 to be an output:
pinMode(led, OUTPUT);
}
// the loop routine runs over and over again forever:
void loop() {
// set the brightness of pin 9:
analogWrite(led, brightness);
// change the brightness for next time through the loop:
brightness = brightness + fadeAmount;
// reverse the direction of the fading at the ends of the fade:
if (brightness == 0 || brightness == 255) {
fadeAmount = -fadeAmount ;
}
// wait for 30 milliseconds to see the dimming effect
delay(30);
}
See http://arduino.cc/en/Tutorial/Fade 参见http://arduino.cc/en/Tutorial/Fade
Your code seems correct, but you are using timer0, that can generate pwm on Arduino UNO's pin 5 and 6, as shown in the datasheet. 您的代码似乎正确,但是您使用的是timer0,它可以在Arduino UNO的引脚5和6上生成pwm,如数据表所示。 So you should set the ddrd bit 6 with a DDRD |= (1 << PD6) , that is pin 6 on Arduino, not pin 11. If you want pwm on pin 11 you should use timer2 instead. 因此,应使用DDRD | =(1 << PD6)设置ddrd位6,即Arduino上的引脚6,而不是引脚11。如果要在引脚11上使用pwm,则应改用timer2。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.