Forum: Mikrocontroller und Digitale Elektronik Arduino PWM Signale Erzeugen


von Joe K. (youssef_aachen)



Lesenswert?

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

von Bastian W. (jackfrost)


Lesenswert?

Hi,

Was hast du denn schon alles ? Poste mal was du alles hast.

Gruß JackFrost

von Joe K. (youssef_aachen)


Lesenswert?

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

von posti (Gast)


Lesenswert?

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

von Falk B. (falk)


Lesenswert?

@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.

von Manfred (Gast)


Lesenswert?

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'.

von Joe K. (youssef_aachen)


Lesenswert?

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?

von Wolfram K. (proof80)


Lesenswert?

Wenn der Arduino mit 5V versorgt wird (Normalfall),
sind digitale Pins im high-Modus auch auf 5V.

von posti (Gast)


Lesenswert?

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.

von Bastian W. (jackfrost)


Lesenswert?

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

von Manfred (Gast)


Lesenswert?

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.

von Wolfgang (Gast)


Lesenswert?

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.

von M. K. (sylaina)


Lesenswert?

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

von Einer K. (Gast)


Lesenswert?

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
}

von Manfred (Gast)


Lesenswert?

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.

von Einer K. (Gast)


Lesenswert?

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

von Manfred (Gast)


Angehängte Dateien:

Lesenswert?

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?

von Einer K. (Gast)


Lesenswert?

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.

von THOR (Gast)


Lesenswert?

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.

von Einer K. (Gast)


Lesenswert?

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.

von Wolfgang (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.