Forum: Mikrocontroller und Digitale Elektronik µC mit PWM LED ansteuern (mbed controller)


von marius_1994 (Gast)


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

von spontan (Gast)


Lesenswert?

Im Unterricht ausgepaßt?
Was habt ihr da besprochen?

ADC oder so?

von reverse (Gast)


Lesenswert?


von Ralf (Gast)


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

von marius_1994 (Gast)


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);

    }

}

von marius_1994 (Gast)


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

von Miche L. (ihoid)


Lesenswert?

Hi,
lies dir mal folgendes durch:
http://mbed.org/handbook/AnalogIn

von marius_1994 (Gast)


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;
            }
        }
    }
}

von Miche L. (ihoid)


Lesenswert?

Die 2. If schleife wird niemals wahr, da sich die bedingungen 
widersprechen

von jeeeeees (Gast)


Lesenswert?

wie wär's mit:
1
led = ain

von marius_1994 (Gast)


Lesenswert?

ja ist mir jetzt auch aufgefallen aber wie könnte ich es sonst schreiben 
?

von Miche L. (ihoid)


Lesenswert?

entweder du machst es wie jeeeees oder du ersetzt > durch <

von marius_1994 (Gast)


Lesenswert?

ich hab noch nicht ganz verstanden wie jeeeees das gemeint hat...

von marius_1994 (Gast)


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;
            }
        }
    }
}

von jeeeeees (Gast)


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.

von marius_1994 (Gast)


Lesenswert?

super danke hat jetzt funktioniert.. zu Verständniss: Die LED nimmt 
jetzt immer den Wert der Eingangsspannung an ?

von jeeeeees (Gast)


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.

von jeeeeees (Gast)


Lesenswert?

marius_1994 schrieb:
> super danke hat jetzt funktioniert.. zu Verständniss: Die LED nimmt
> jetzt immer den Wert der Eingangsspannung an ?

Ja.

von marius_1994 (Gast)


Lesenswert?

stimmt völlig logisch! könnt ich es dann überhaupt so programmieren wie 
ich es versucht habe ?

von marius_1994 (Gast)


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;


        }
    }
}

von jeeeeees (Gast)


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
}

von marius_1994 (Gast)


Lesenswert?

super ganau dass habe ich gesucht :)

danke!!

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.