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
Im Unterricht ausgepaßt? Was habt ihr da besprochen? ADC oder so?
> 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
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); } }
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
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; } } } }
Die 2. If schleife wird niemals wahr, da sich die bedingungen widersprechen
ja ist mir jetzt auch aufgefallen aber wie könnte ich es sonst schreiben ?
entweder du machst es wie jeeeees oder du ersetzt > durch <
ich hab noch nicht ganz verstanden wie jeeeees das gemeint hat...
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; } } } }
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.
super danke hat jetzt funktioniert.. zu Verständniss: Die LED nimmt jetzt immer den Wert der Eingangsspannung an ?
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.
marius_1994 schrieb: > super danke hat jetzt funktioniert.. zu Verständniss: Die LED nimmt > jetzt immer den Wert der Eingangsspannung an ? Ja.
stimmt völlig logisch! könnt ich es dann überhaupt so programmieren wie ich es versucht habe ?
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; } } }
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 | }
|
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.