2014-06-15 5 views
0

Je suis en train de clignoter led avec PWM sur Arduino, et je ne sais pas ce qui ne va pas. Mais ma LED ne s'estompe pas. Qu'est-ce qui ne va pas? Je pense que j'ai de mauvais paramètres de registres, mais je ne suis pas sûr. Led est connecté sur Arduino pin 11. Merci.LED de fondu PWM sur arduino

#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; 
} 
+0

Quel arduino utilisez-vous? Et pourquoi n'utilisez-vous pas simplement l'arduino sdk, et les APIs (c'est-à-dire analogWrite)? –

+0

Vous pervers! Pourquoi utilisez-vous un AVRC pur? Imho Vous devriez utiliser les méthodes Arduino à la place d'AVRC. –

+0

J'utilise arduino Uno, et c'est plus beau quand j'utilise un AVRC pur. –

Répondre

1

Avez-vous regardé le programme d'exemple '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);        
} 

Voir http://arduino.cc/en/Tutorial/Fade

+0

Oui, je l'ai fait, ça marche, mais je ne veux pas le faire de cette façon. –

1

Votre code semble correct, mais vous utilisez timer0, qui peut générer pwm sur broches Arduino UNO 5 et 6, comme indiqué dans la fiche technique. Vous devez donc définir le bit ddrd 6 avec un DDRD | = (1 < < PD6) , c'est-à-dire la broche 6 sur Arduino, pas la broche 11. Si vous voulez pwm sur la broche 11, vous devez utiliser timer2 à la place.

Questions connexes