µC mit PWM LED ansteuern (mbed controller)

Gast #2819396
Lesenswert?

Hallo,

ich arbeite mit einem mbed Controller und bin Einsteiger im Bereich µC. 
Der Controller wird mit C programmiert. Jetzt hab ich die Aufgabe eine 
LED über PWM anzusteuern. Ich soll an einen PIN ein Potentiometer 
anschließen und ums hochohmiger ich dass Poti dreh umso heller soll die 
Led leuchten.

Bitte um Hilfe.

Danke.

Marius
Gast #2819403
Lesenswert?

> Bitte um Hilfe.
Gerne:
1. Durch Poti eingestellte Spannung über ADC einlesen
2. Den Wert wenn nötig anpassen (Helligkeit ist nicht linear)
3. PWM entsprechend ansteuern
4. GOTO 1

Ernsthaft, mit deinem bisschen Info kannst du nicht mehr Hilfe erwarten.
Schonmal mit Controllern gearbeitet? C-Kenntnisse vorhanden? etc.

Je mehr Info du lieferst, desto bessere Hilfe bekommst du (abgesehen von 
fertigem Code, den macht dir keiner).

Ralf
Gast #2819404
Lesenswert?

so hab ich mir dass Programm ca. vorgestellt aber so funktioniert es 
eben nicht... was kann ich anders machen ?

#include "mbed.h"


PwmOut led(LED1);
DigitalIn poti(p5);

int main()
{
    while(1) {



        if(poti < 0.5) {
            led = 0.1f;
        }

        if(poti > 0.5) {
            led = 0.2f;
        }
        wait(0.1);

    }

}
Gast #2819410
Lesenswert?

Ich habe keine großen C-Kentnisse und ich hatte sowas auch nicht im 
Unterricht. Alles was ich kann (nicht viel) habe ich im Internet 
nachgelesen. Aber dass spielt ja auch keine Rolle, ich hatte halt 
gehofft dass ich hier ein bisschen Hilfe und Unterstützung bekomme.

Gruß
Marius
Gast #2819484
Lesenswert?

okay damit kann ich bestimmen ab welchem Wert meine LED angehen soll. 
Aber wie ich die 2. Helligkeitsstufe programmier ist mir noch unklar. 
Ich hab es mal so prbiert:

#include "mbed.h"

AnalogIn ain(p20);
PwmOut led(LED1);


int main()
{
    while (1) {
        if(ain > 0.1) {
            led = 0.1F;
        } else {
            led = 0;


            if(ain > 0.2) {
                led = 0.2F;
            } else {
                led = 0;
            }
        }
    }
}
Gast #2819504
Lesenswert?

so müsste ich ja eigentlich 2 Helligkeitsstufen haben oder nicht ?
aber die LED blinkt bei Stufe zwei jetzt wieso dass ?


#include "mbed.h"

AnalogIn ain(p20);
PwmOut led(LED1);


int main()
{
    while (1) {
        if(ain < 0.1) {
            led = 0.1F;
        } else {
            led = 0;


            if(ain > 0.1) {
                led = 0.2F;
            } else {
                led = 0;
            }
        }
    }
}
Gast #2819508
Lesenswert?

Probier mal:
1
#include "mbed.h"
2

3
AnalogIn ain(p20);
4
PwmOut led(LED1);
5

6
int main() {
7
    while(1) {
8
        led = ain;
9
    }
10
}

Ich bin kein mbeb Programmierer. Aber von dem was ich in den Handbooks 
gesehen habe, könnte das so funktionieren. Wenngleich dies ein linearer 
Verläuf wäre... Siehe Kommentar von Ralf bzgl. nicht-linearer 
Helligkeit.
Gast #2819523
Lesenswert?

marius_1994 schrieb:
Denk doch mal logisch! Die zweite IF Bedingung enspricht doch dem ELSE 
Zweig der Ersten!?! Im ELSE Zweig weist du der LED den Wert 0 zu um 
danach gleich wieder den Wert 0.2 zuzuweisen. Die Periode mit der deine 
LED dabei blinkt wird mit Sicherheit durch die Ausführungszweit des 
Vergleichs in der zweiten IF Bedingung bestimmt.
Gast #2819546
Lesenswert?

so funtionieren 2 Helligkeitsstifen:
nur mehrere können ja nicht funktionieren weil sich dann die 
verschiedene Bedinungen schneiden werden...

#include "mbed.h"

AnalogIn ain(p20);
PwmOut led(LED1);


int main()
{
    while (1) {
        if(ain < 0.1) {
            led = 0.1F;
        }

        if(ain > 0.1) {
            led = 0.5F;


        }
    }
}
Gast #2819577
Lesenswert?

Diskrete Verteilungen funktionieren natürlich auch.
1
#include "mbed.h"
2

3
AnalogIn ain(p20);
4
PwmOut led(LED1);
5

6

7
int main()
8
{
9
    while (1) {
10
        if(ain < 0.1)
11
            led = 0.0F;
12
        else if(ain < 0.2)
13
            led = 0.1F;
14
        else if(ain < 0.3)
15
            led = 0.2F
16
        else if(ain < 0.4)
17
            led = 0.4F
18
        else if(ain < 0.5)
19
            led = 0.8F
20
        else led = 1.0F
21
    }
22
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren