Forum: Compiler & IDEs LEDs unterschiedlich hell funktioniert geht nicht per Methodenaufruf


von partx (Gast)


Lesenswert?

Hi,
ich will 3 LEDs unterschiedlich hell leuchten lassen, dazu habe ich eine 
Methode geschrieben, wenn ich jedoch der Methode die Werte übergebe, 
leuchten alle 3 LEDs gleich hell.

Methode:
void setBrightness(uint8_t delay, uint8_t pin)
{
    PORTC &= ~(1<<pin);
    _delay_us(delay);
    PORTC |= (1<<pin);
};


 for(;;){
        // setBrightness(1,0); //diese 3 Aufrufe machen die LEDs 
gleichhell
        // setBrightness(15,1);
        // setBrightness(30,2);

        PORTC &= ~(1<<0); //dieselben Befehle der Methode mit 
eingesetzten Werten --> Funktioniert, LEDs leuchten unterschiedlich 
hell.
        _delay_us(1);
        PORTC |= (1<<0);
        PORTC &= ~(1<<1);
        _delay_us(15);
        PORTC |= (1<<1);
        PORTC &= ~(1<<2);
        _delay_us(30);
        PORTC |= (1<<2);
        // PORTC &= ~(1<<7);
    };


VG, partx

von Micha (Gast)


Lesenswert?

Welcher Controller?
Welcher Compiler?

Vermutlich siehst du dank logarithmischer Wahrnehmung keinen 
Unterschied...

von Mark .. (mork)


Lesenswert?

_delay_us() abeitet mit 'double' als Parameter. Da der Funktion 
setBrightness() ein 'uint8_t' übergeben wird, muss dieser ersmal in 
double umgerechnet werden. Diese Umrechnung dauert viel länger als der 
Delay selbst, sodass alle 3 LEDs ungefähr den gleichen Duty Cycle 
kriegen. Wenn man _delay_us mit konstanten Werten aufruft, rechnet der 
Compiler es selbst in double um, weshalb es dann auch funktioniert.

Normaleweise macht man so etwas entweder mit Hardware-PWM oder mit 
Timern, fall der Controller zu wenig PWM-Kanäle hat. Auf 
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#PWM_.28Pulsweitenmodulation.29 
gibt es eine gute Beschreibung dafür.

MfG Mark

von doc (Gast)


Lesenswert?

>    _delay_us(delay);

Das geht so nicht.
Lies mal die Doku in delay.h dazu.

Das funktioniert nur mit Konstanten.

von partx (Gast)


Lesenswert?

gut danke, dass mit dem PWM hab ich auch grade entdeckt, da entfällt 
mein Lösungsansatz^^.

von doc (Gast)


Lesenswert?

Dein Lösungansatz ist doch schon eine PWM ;-)

von Spiesser (Gast)


Lesenswert?

Ich sehe da nichtmal eine Methode. Ich denke mal du meintest Funktion...

von Klaus (Gast)


Lesenswert?

abgesehen davon, dass der Thread-Titel auf fortgeschrittene sprachliche 
Verwirrung schließen lässt...

von partx (Gast)


Lesenswert?

Ja sry, meinte Funktion, war ich Gedanken noch auf Arbeit.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.