如何正确设置PWM寄存器,以控制LED的亮度? c/arduino uno

发布于 2025-02-04 09:39:30 字数 1552 浏览 4 评论 0 原文

const int photo_resistor PROGMEM = 0;
const int red_pin PROGMEM = 6; 

void setup(){
    TCCR0A = 0;
    TCCR0B = 0;
  
    // output for traffic light led
    SET_BIT(DDRD, red_pin);
    
    //photo resistor
    CLEAR_BIT(DDRC, photo_resistor);
    
    //adc topic 10
    SET_BIT(ADCSRA, ADEN);
    SET_BIT(ADCSRA, ADPS2);
    SET_BIT(ADCSRA, ADPS1);
    SET_BIT(ADCSRA, ADPS0);
    SET_BIT(ADMUX, REFS0);
    
    //pwm with timer 0 Red & Yellow Led
    //prescale
    CLEAR_BIT(TCCR0B, CS01);
    SET_BIT(TCCR0B, CS02);
    SET_BIT(TCCR0B, CS00);
    //Compare for red
    CLEAR_BIT(TCCR0A, COM0A0);
    SET_BIT(TCCR0A, COM0A1);
    Serial.begin(115200);
    //WGM-Fast PWM
    SET_BIT(TCCR0A, WGM00);
    SET_BIT(TCCR0A, WGM01);
    CLEAR_BIT(TCCR0B, WGM02);
}
/////////////////////////////////////////////////
void process(){ 
    //sensor
    char sensor_buffer[64];
    SET_BIT(ADCSRA, ADSC);
    while(ADCSRA & (1 << ADSC) ) {}
    uint16_t sensor_data = ADC;
    itoa(sensor_data, (char *)sensor_buffer,10);
    Serial.println(sensor_data);
    //always on green
    OCR0A = sensor_data/4;


}
/////////////////////////////////////////////////
int main(){
    setup();
    for (;;){
        process();
    }
}

我的代码的逻辑正在起作用,但不确定我缺少什么。光孔仪正在工作,并为我提供了从969到49的值。在这里,我正在使用ADC转换数据,以便我可以通过PWM控制LED的亮度。我在做什么错?这是Tinkercad中Arduino的图像。

const int photo_resistor PROGMEM = 0;
const int red_pin PROGMEM = 6; 

void setup(){
    TCCR0A = 0;
    TCCR0B = 0;
  
    // output for traffic light led
    SET_BIT(DDRD, red_pin);
    
    //photo resistor
    CLEAR_BIT(DDRC, photo_resistor);
    
    //adc topic 10
    SET_BIT(ADCSRA, ADEN);
    SET_BIT(ADCSRA, ADPS2);
    SET_BIT(ADCSRA, ADPS1);
    SET_BIT(ADCSRA, ADPS0);
    SET_BIT(ADMUX, REFS0);
    
    //pwm with timer 0 Red & Yellow Led
    //prescale
    CLEAR_BIT(TCCR0B, CS01);
    SET_BIT(TCCR0B, CS02);
    SET_BIT(TCCR0B, CS00);
    //Compare for red
    CLEAR_BIT(TCCR0A, COM0A0);
    SET_BIT(TCCR0A, COM0A1);
    Serial.begin(115200);
    //WGM-Fast PWM
    SET_BIT(TCCR0A, WGM00);
    SET_BIT(TCCR0A, WGM01);
    CLEAR_BIT(TCCR0B, WGM02);
}
/////////////////////////////////////////////////
void process(){ 
    //sensor
    char sensor_buffer[64];
    SET_BIT(ADCSRA, ADSC);
    while(ADCSRA & (1 << ADSC) ) {}
    uint16_t sensor_data = ADC;
    itoa(sensor_data, (char *)sensor_buffer,10);
    Serial.println(sensor_data);
    //always on green
    OCR0A = sensor_data/4;


}
/////////////////////////////////////////////////
int main(){
    setup();
    for (;;){
        process();
    }
}

My code's logic is working but, not sure what I'm missing. The photoresistor is working and providing me a value from 969 to 49. Here I'm using ADC to convert the data so I can control the LED's brightness with PWM. What am I doing wrong? Here is an image of the arduino in tinkercad.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文