Hallo Zusammen, ich habe eine Frage, denn ich würde gerne ein PWM Signal mit meinem Arduino erzeugen. Ich habe eine erzeugen können, jedoch möchte ich es so wie auf dem angehängtem Foto haben. Leider habe ich es trotz mehrmaligen Versuchen nicht hinbekommen! Kann mir jemand bitte helfen? Dann möchte ich ein Signal erzeugen das bei beginn 30 Sekunden auf Null V (Low) ist und danach konstant auf 5 Volt (High) bleibt. (Das ist aber ein seperates Programm) Weis jemand wie ich das Signal nach 30s konstant auf 5 V lassen kann? (Bild 2) Viele Grüße
Hi, Was hast du denn schon alles ? Poste mal was du alles hast. Gruß JackFrost
void setup() { pinMode(8, OUTPUT); } void loop() { // A total delay of 4 ms = 1/0.004 = 250 Hz… digitalWrite(8, HIGH); delay(2); digitalWrite(8, LOW); delay(2); }
Hi Kenne den Arduino nicht, sieht aber aus, als ob Du ein Ausgang alle 2ms wechseln lassen willst. Kann so was der Arduino nicht alleine? Selber nur ATtiny45 unter den Fingern, einen PWM kann Der in Hardware - allerdings nicht im 2ms-Takt (256µs max bei 1MHz). Das High setzen nach der Zeit X sollte sich doch dann ähnlich machen lassen: - warte oder mache sonst was, verlier dabei aber die Zeit nicht aus den Augen - nach X Sekunden HIGH Bein, sleep Was hast Du vor, was soll der µC sonst noch Alles machen, wie zeitkritisch wird Das werden? MfG
@Youssef K. (youssef_aachen) >ich habe eine Frage, denn ich würde gerne ein PWM Signal mit meinem >Arduino erzeugen. Das kann der Arduino schon allein mittels analogWrite(), allerdings ist man dabei auf eine feste Frequenz von. ca. 490 Hz festgelegt. >Ich habe eine erzeugen können, jedoch möchte ich es so wie auf dem >angehängtem Foto haben. Das ist eine sehr niederfrequenze PWM, die macht man per Software und einem Timerinterrupt. >Leider habe ich es trotz mehrmaligen Versuchen nicht hinbekommen! Dann zeig mal deinen Versuch in Form von Quelltext. >Dann möchte ich ein Signal erzeugen das bei beginn 30 Sekunden auf Null >V (Low) ist und danach konstant auf 5 Volt (High) bleibt. >(Das ist aber ein seperates Programm) Ja was denn nun? >Weis jemand wie ich das Signal nach 30s konstant auf 5 V lassen kann? digitalWrite(ledPin, LOW); delay(30000); digitalWrite(ledPin, HIGH); https://www.arduino.cc/en/Reference/Delay So ein Delay ist zwar in vielen Fällen eine eher schlechte bis unbrauchbare Lösung, wenn der Controller aber in dem Moment sonst nix weiter machen soll, ist das OK.
Youssef K. schrieb: > Dann möchte ich ein Signal erzeugen das bei beginn 30 Sekunden auf Null > V (Low) ist und danach konstant auf 5 Volt (High) bleibt. > (Das ist aber ein seperates Programm) Bedeuet Arduino wieder 'Ich kann nichts selbst lösen'? Oder 'Ich will nicht selbst denken'? Arbeite die diversen Beispiele für Anfänger ab, 30 Sekunden ist ja nun absolut trivial. Google nach 'Arduino Blink' und 'Blink ohne delay'.
Manfred schrieb: > Bedeuet Arduino wieder 'Ich kann nichts selbst lösen'? Oder 'Ich will > nicht selbst denken'? > > Arbeite die diversen Beispiele für Anfänger ab, 30 Sekunden ist ja nun > absolut trivial. > > Google nach 'Arduino Blink' und 'Blink ohne delay'. Ich möchte keine LED blinken lassen, sondern nur ein Signal mit den genannten Eigenschaften. @Falk Brunner, wie stelle ich ein das die Ausgangsspannung 5v ist?
Wenn der Arduino mit 5V versorgt wird (Normalfall), sind digitale Pins im high-Modus auch auf 5V.
Hi Hab Mal gesucht, aber nicht gefunden, daß was einzustellen wäre - bin aber kein Arduino-Jünger. Vll hilft Dir Das weiter: https://www.elv.de/controller.aspx?cid=726&detail=44820 Ist zumindest Deutsch und richtet sich an Anfänger - wie gesagt, beim Überfliegen wäre mir keine Umschaltmöglichkeit aufgefallen.
Was für ein Arduino ist das denn ? Bei einem Atmega328p kannst du für das Programm 2 den 16 Bit Timer im CTC Mode nehmen. Mit einem Prescaler von 1024 und einem System Prescaler von 16 hat der eine Durchlaufzeit von ~67s. Timer starten , in der CTC ISR Timer stoppen und Pin auf high. Vorteil das ist nicht blockierend geschrieben. Danach kannst du den System Prescaler auch wieder auf 1 nehmen. Gruß JckFrost
Youssef K. schrieb: >> Arbeite die diversen Beispiele für Anfänger ab, 30 Sekunden ist ja nun >> absolut trivial. >> >> Google nach 'Arduino Blink' und 'Blink ohne delay'. > Ich möchte keine LED blinken lassen, sondern nur ein Signal mit den > genannten Eigenschaften. Wo ist der Unterschied, ob am Ausgang des µC eine LED, ein Transistor oder ein Relais hängt? Signal ist Signal! Zeit merken (milis()), Ausgang Ein. Irgendwas anderes machen, zwischendurch immer wieder die gemerkte Zeit mit der Aktuellen vergleichen und wenn überschritten, Ausgang Aus. Das folgt genau den Grundlagen "Blink ohne delay". Wenn Du keine anderen Aufgaben zu erledigen hast, setzt Du den Ausgang und machst ein delay dahinter. Entschuldige, aber das ist nun wirklich Arduino der ersten Stunde und eine Genauigkeit besser 2ms ist mit delay(Zeit) allemal zu erreichen.
Youssef K. schrieb: > Ich möchte keine LED blinken lassen, sondern nur ein Signal mit den > genannten Eigenschaften. Dann schließe einfach keine LED an dem Pin an, sondern verwende das erzeugte Signal als deinen Ausgang. Du brauchst das weder dem Programmautor noch dem Arduino zu verraten.
posti schrieb: > Selber nur ATtiny45 unter den Fingern, einen PWM kann Der in Hardware - > allerdings nicht im 2ms-Takt (256µs max bei 1MHz). Wieso nicht? Nochmal über Timer und PWMs Gedanken machen. Hier mal ein Beispiel: ~10 ms PWM mit einem festen ~2 ms Impuls auf Timer0 beim Attiny45/85 (Auf die Schnelle aus dem Kopf runter geschrieben, ungetestet, aber so könnte es ausschaun)
1 | ...
|
2 | // Timer einstellen
|
3 | TCCR0A |= (1 << WGM00)|(1 << WGM01)|(1 << COM0B0); //Fast PWM |
4 | TCCR0B |= (1 << WGM02); |
5 | OCR0A = 156; |
6 | OCR0B = 31; |
7 | ...
|
8 | TCCR0B |= (1 << CS00)|(1 << CS01); // startet Timer mit PSC 64 und damit die PWM |
9 | ...
|
PWMs mit einigen Millisekunden (PWM-Frequenz < 40 Hz) sind selbst bei 8 MHz Systemtakt problemlos möglich. Einen Servo kann man eigentlich problemlos mit jedem AVR via Hardware-PWM ansteuern mit 1 MHz Systemtakt und die haben für gewöhnlich 50 Hz PWMs (entspricht 20 ms Periode mit 1ms - 2 ms Impuls). Man muss den Timer ja nicht mit einem Prescaler von 1 fahren ;)
Youssef K. schrieb: > Weis jemand wie ich das Signal nach 30s konstant auf 5 V lassen kann? Klar! Einfach den Pin danach nicht mehr ändern. Tipp: Wenn ich dir den Code vorkaue, bist du hinterher genauso schlau wie vorher.
1 | // https://github.com/CombiesGit/TaskMacro/
|
2 | #include <TaskMacro.h> |
3 | |
4 | const byte tPin = 13; |
5 | const byte t1t2Pin = 12; |
6 | |
7 | unsigned long t1 = 3L * 1000; // 3 Sekunden testweise |
8 | const unsigned long t2 = 60L * 1000; // 60 Sekunden |
9 | const unsigned long t = 30L * 1000; // 30 Sekunden |
10 | |
11 | Task run_t() |
12 | {
|
13 | taskBegin(); |
14 | |
15 | // Schritt 1
|
16 | digitalWrite(tPin,LOW); |
17 | taskPause(t); |
18 | |
19 | // Schritt 2
|
20 | digitalWrite(tPin,HIGH); |
21 | |
22 | // Schritt 3, halt
|
23 | for(;;) |
24 | {
|
25 | taskSwitch(); |
26 | }
|
27 | taskEnd(); |
28 | }
|
29 | |
30 | Task run_t1_t2() |
31 | {
|
32 | taskBegin(); |
33 | for(;;) |
34 | {
|
35 | |
36 | // Schritt 1
|
37 | digitalWrite(t1t2Pin,HIGH); |
38 | taskPause(t1); |
39 | |
40 | // Schritt 2
|
41 | digitalWrite(t1t2Pin,LOW); |
42 | taskPause(t2); |
43 | |
44 | }
|
45 | taskEnd(); |
46 | }
|
47 | |
48 | void setup() |
49 | {
|
50 | pinMode(t1t2Pin,OUTPUT); |
51 | pinMode(tPin, OUTPUT); |
52 | }
|
53 | |
54 | void loop() |
55 | {
|
56 | run_t1_t2(); |
57 | run_t(); |
58 | }
|
Arduino F. schrieb: > Tipp: > Wenn ich dir den Code vorkaue, bist du hinterher genauso schlau wie > vorher. Das provoziert mich immer zu unfreundlichen Bemerkungen: Irgendwas kopieren, dann im Forum schreiben "geht nicht" und hoffen, dass irgend ein Dussel das Problem löst. Selbst Denken, erstmal Grundlagen erarbeiten - scheint heutzutage aus der Mode. Da wundert es nicht, dass laut einem Artikel einer Wirtschaftszeitung "Arbeitgeber mit aktuellen Bachelor-Absolventen unzufrieden sind, weil diese nicht selbstständig agieren". Natürlich habe auch ich früher, es gab noch kein Internet, Kollegen mit Fragen gequält. Diese haben mir meist geholfen, aber bei passender Gelegenheit auch erklärt, dass ein eigener Versuchsaufbau und Studium des Datenblattes fällig sei, bevor ich wiederkommen durfte.
Manfred schrieb: > Das provoziert mich immer zu unfreundlichen Bemerkungen: Irgendwas > kopieren, dann im Forum schreiben "geht nicht" und hoffen, dass irgend > ein Dussel das Problem löst. Jahre habe ich gebraucht um nicht unbedingt so zu reagieren. Je nach Tagesform gelingt das mehr oder weniger gut. Manfred schrieb: > Selbst Denken, erstmal Grundlagen erarbeiten - scheint heutzutage aus > der Mode. Das will gelernt werden. Und die Dauer wird gerne unterschätzt. Siehe dazu: http://userpage.fu-berlin.de/~ram/pub/html_jf47ht81Ht/21-tage
Arduino F. schrieb: > Manfred schrieb: >> Selbst Denken, erstmal Grundlagen erarbeiten - scheint heutzutage aus >> der Mode. > Das will gelernt werden. Na gut, als ich Elektronik gelernt habe, gab es noch kein Internet. Ich kann meterweise Papier anbieten, zu 74xx, 40xx, Transistoren, zum 6502, MC68HCx05 ... und darin wurde tatsächlich gelesen. > Und die Dauer wird gerne unterschätzt. Ja, einen Schalter am Port A und eine LED am Port B, die leuchtet, wenn der Schalter kommt, hat mich mehrere Tage ernsthaft beschäftigt. Danach war ich stolz, dass ich Ports korrekt initialisiert und abgefragt bekomme. Tage später ein einstellbares Lauflicht, toll, ich konnte einen Timer. 2015 habe ich mir China-Unos gekauft, erstmal "Blink" erweitert auf mehrere LEDs. Ein Display dran, ein Poti dran, ein paar Taster - auch damit habe ich mehrere Tage scheinbar unsinnige Dinge bespielt und mir ein paar Grundlagen beschafft: Ich kann blinken, ich kann einen analogen Wert anzeigen, ich kann bei Spannung xx die LED einschalten, ich kann per Taste eine Zahl hochzählen, ich kann die Werte seriell zum PC ausgeben. Das war sicherlich mehr als ein Sonnabend, aber nur damit habe ich überhaupt erst die Basis, sinnvolle Dinge umzusetzen. Bin ich zu konservativ unterwegs? Ich erwarte, dass man sich selbst bewegt, bevor man hier dusselige Fragen stellt. "Ich will keine LED blinken lassen, ich muß einen Ausgang schalten" - ja verdammt, auf welcher Basis soll denn hier beraten werden?
Manfred schrieb: > "Ich will keine LED blinken lassen, ich muß einen Ausgang schalten" - ja > verdammt, auf welcher Basis soll denn hier beraten werden? Ja, das ist eine gute Frage! > "Ich will keine LED blinken lassen, ich muß einen Ausgang schalten" Mir sagt das: Der TE ist herzerfrischend Kenntnis frei. Das ist nicht schlimm. So beginnt jeder. Dem TE fehlt noch die Abstaktionsfähigkeit zwischen Ausgang(was auch immer er sich darunter vorstellt) und LED zu unterscheiden, bzw. die Gemeinsamkeiten zu erkennen. Auch das ist nicht schlimm, denn auch das kann sich ändern. - Im Arduino Umfeld schlagen Unmengen unbedarfter Leute ein. Die sollen erstmal die Grundlagen lernen! Nur leider haben die keine Ahnung, was denn überhaupt die Grundlagen sind. Der erfahrene Mensch, nimmt sich ein C++ Manual/Buch/Tutorial und die Datenblätter zu den Bausteinen. Der Anfänger muss den Schritt erst noch finden. Ich versuche da einen Umgang zu finden, so ähnlich, wie ich auch mit Kindern umgehe. Wichtig ist, aufmerksam, achtsam, und damit automatisch freundlich zu agieren. Respektvoll?!?! Ja natürlich, wird ein Anfänger meine Worte nicht sofort verstehen. Aber, das kann mich nicht verleiten, auf eine Baby Brabbel Sprache zurück zu fallen. Ein gutes Beispiel, ist der Code, von mir, ein paar Beiträge vorher. Der Code ist keine leichte Kost. Auf der Oberfläche, klar strukturiert, aber im Hintergrund, naja, wurde schon mit "gruselig" tituliert. Selbst wenn er meine TaskMacros nie nutzen wird, findet er doch auf der GitHub Seite genug Links und auch genug Google Schlüsselworte um sein Problem lösen zu können. Einem Kind hört man zu. Beantwortet die Fragen freundlich und ehrlich. Wenn das Kind auch nicht alles sofort versteht, ist das kein Drama. Unverstandenes wird erstmal ausgeblendet, irgendwann gehts mit dem Thema in die zweite Runde. -- Ich schätze mal, von den ganzen Anfängern, bleiben ca 10% über. Die andern hängen das Hobby fix an den Nagel. Begegnet man Anfängern unfreundlich, dann vertreibt man auch von den 10% noch viele. Das ist nicht in meinem Sinne! Leider gibts unter den 90% einen Teil CodeAbstauber, "Mach du mal für mich, weil ich zu doof oder zu faul bin, die Doku zu lesen". Fässer ohne Boden. Mit diesem Urteil muss man vorsichtig sein! Viele hier im Forum bekommen Pickel, wenn sie nur das Wort Arduino lesen. Haben wohl schlechte Erfahrungen mit Arduino Jüngern gemacht. Dann wird verallgemeinert. Ein Vorurteil gebaut. Und dem Nächsten wird mit genau dem Vorurteil begegnet! Egal, ob das einer aus den 10% ist, oder nicht. Eskalation und beidseitiger Frust ist die unmittelbare Folge. -- Fachlich habe ich hier schon viel gelernt. Auch wohl schon etwas helfen können.... Aber noch mehr interessieren mich die sozialen Aspekte.
Arduino F. schrieb: > Manfred schrieb: >> "Ich will keine LED blinken lassen, ich muß einen Ausgang schalten" - ja >> verdammt, auf welcher Basis soll denn hier beraten werden? > Ja, das ist eine gute Frage! > >> "Ich will keine LED blinken lassen, ich muß einen Ausgang schalten" > Mir sagt das: > Der TE ist herzerfrischend Kenntnis frei. > Das ist nicht schlimm. So beginnt jeder. Ne, nicht jeder. Nicht ganz Ironiefrei, dass sich der Rest deines Posts mit Vorurteilen beschäftigt.
THOR schrieb: > Nicht ganz Ironiefrei, dass sich der Rest deines Posts > mit Vorurteilen beschäftigt Ja, das Thema (Vor)Urteile beschäftigt mich. Die Ironie, oder besser wunde Punkt, steckt woanders! Es ist notwendig Urteile zu fällen. Ein einmal gefälltes Urteil verhindert meist wirksam neue Erkenntnisse auf dem Gebiet.
Manfred schrieb: > "Ich will keine LED blinken lassen, ich muß einen Ausgang schalten" - ja > verdammt, auf welcher Basis soll denn hier beraten werden? In der Schule hieß das "Transferleistung" (Teil-)Note:6 oder 0 Punkte
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.