INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Bit-banging PWM ohne delay?
20.09.2014, 14:54
Beitrag #1
Bit-banging PWM ohne delay?
Hallo,

stehe grade etwas auf dem Schlauch.

Wenn ich folgenden Code in einen Code ohne delay übersetzen möchte, brauche ich 2 unterschiedliche Blink without delay Schleifen oder kann ich das in einer kombinieren?



Code:

void setup()
{
pinMode(13, OUTPUT);
}

void loop()
{
digitalWrite(13, HIGH);
delayMicroseconds(100); // Approximately 10% duty cycle @ 1KHz
digitalWrite(13, LOW);
delayMicroseconds(1000 - 100);
}



Danke für alle Antworten.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.09.2014, 15:57
Beitrag #2
RE: Bit-banging PWM ohne delay?
Hi,
gibt es einen Grund, warum Du nicht das built-in PWM (analogWrite) verwendest?

Ansonsten:
Code:
static unsigned long last = 0;
static int state = LOW;
unsigned long now = micros();
int time = state ? 100 : 900;

if(now - last > time) {
   state ~= state;
   digitalWrite(13, state);
   last += time;
};

Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.09.2014, 16:03 (Dieser Beitrag wurde zuletzt bearbeitet: 20.09.2014 16:09 von Pippsen14.)
Beitrag #3
RE: Bit-banging PWM ohne delay?
(20.09.2014 15:57)Thorsten Pferdekämper schrieb:  Hi,
gibt es einen Grund, warum Du nicht das built-in PWM (analogWrite) verwendest?

Ansonsten:
Code:
static unsigned long last = 0;
static int state = LOW;
unsigned long now = micros();
int time = state ? 100 : 900;

if(now - last > time) {
   state ~= state;
   digitalWrite(13, state);
   last += time;
};

Gruß,
Thorsten

Hallo Thorsten,

beim kompilieren meckert Arduino das er ein ; vor dem ~ erwartet?!?


ja es gibt den Grund, das die externe Hardware nur eine PWM Frequenz von 100Hz verarbeiten kann. :-(

Habe ein Sketch geschrieben, welches die Ausgänge übereinander fadet und nun war es die Aufgabe das mit einem 230V Verbraucher zu machen.

Mal schauen ob ich weiterkomme.

Vielen Dank erstmal.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.09.2014, 18:14
Beitrag #4
RE: Bit-banging PWM ohne delay?
Hallo Thorsten,

danke für deinen Code:

static unsigned long last = 0;
static int state = LOW;
unsigned long now = micros();
int time = state ? 100 : 900;

if(now - last > time) {
state ~= state;
digitalWrite(13, state);
last += time;
};

beim kompilieren meckert Arduino das er ein ; vor dem ~ erwartet?!?

Ich habe das ~ und = getauscht und es geht zu kompilieren. Nur ist an der LED nichts sichtbar. Habe state mir mal seriell ausgeben lassen und die Variable bleibt immer 0. Kannst du mir bitte auch erklären wie die Zeile " int time = state ? 100 : 900;" zu interpretieren ist?

Kann ich den Duty Cycle auch durch variablen ändern?

Vielen lieben Dank
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.09.2014, 18:48
Beitrag #5
RE: Bit-banging PWM ohne delay?
(20.09.2014 18:14)Pippsen14 schrieb:  Nur ist an der LED nichts sichtbar.
Ich hab's mal selbst ausprobiert, es funktioniert bei mir. So sieht das komplette Coding aus:
Code:
void setup()
{
pinMode(13, OUTPUT);
}

void loop()
{
static unsigned long last = 0;
static int state = LOW;
unsigned long now = micros();
int time = state ? 100 : 900;

if(now - last > time) {
    state = ~state;
    digitalWrite(13, state);
    last += time;
};
}
Die LED leuchtet schwach. Wenn ich das Verhältnis ändere, dann ändert sich auch die Helligkeit.

Zitat:Habe state mir mal seriell ausgeben lassen und die Variable bleibt immer 0.
Wahrscheinlich dauert das Ausgeben auf Seriell länger als eine Millisekunde...

Zitat: Kannst du mir bitte auch erklären wie die Zeile " int time = state ? 100 : 900;" zu interpretieren ist?
Das ist kurz für folgendes:
Code:
int time;
if(state){
   time = 100;
}else{
   time = 900;
};

Zitat:Kann ich den Duty Cycle auch durch variablen ändern?
Klar, einfach statt 100 bzw. 900 einen beliebigen Ausdruck einsetzen.

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.09.2014, 18:55
Beitrag #6
RE: Bit-banging PWM ohne delay?
(20.09.2014 18:48)Thorsten Pferdekämper schrieb:  
(20.09.2014 18:14)Pippsen14 schrieb:  Nur ist an der LED nichts sichtbar.
Ich hab's mal selbst ausprobiert, es funktioniert bei mir. So sieht das komplette Coding aus:
Code:
void setup()
{
pinMode(13, OUTPUT);
}

void loop()
{
static unsigned long last = 0;
static int state = LOW;
unsigned long now = micros();
int time = state ? 100 : 900;

if(now - last > time) {
    state = ~state;
    digitalWrite(13, state);
    last += time;
};
}
Die LED leuchtet schwach. Wenn ich das Verhältnis ändere, dann ändert sich auch die Helligkeit.

Zitat:Habe state mir mal seriell ausgeben lassen und die Variable bleibt immer 0.
Wahrscheinlich dauert das Ausgeben auf Seriell länger als eine Millisekunde...

Zitat: Kannst du mir bitte auch erklären wie die Zeile " int time = state ? 100 : 900;" zu interpretieren ist?
Das ist kurz für folgendes:
Code:
int time;
if(state){
   time = 100;
}else{
   time = 900;
};

Zitat:Kann ich den Duty Cycle auch durch variablen ändern?
Klar, einfach statt 100 bzw. 900 einen beliebigen Ausdruck einsetzen.

Hallo Thorsten,

hatte : static unsigned long last = 0;
static int state = LOW;
unsigned long now = micros();
int time = state ? 100 : 900;

außerhalb vom Loop. Mit deinem kompletten Code funktioniert es nun.

Vielen Dank für die schnelle und kompetente Hilfe.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.09.2014, 19:20
Beitrag #7
RE: Bit-banging PWM ohne delay?
Was ist denn der Hintergrund der Geschichte? Ich meine damit: Was für ein Teil steuerst Du damit an?

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.09.2014, 20:22
Beitrag #8
RE: Bit-banging PWM ohne delay?
(20.09.2014 19:20)Thorsten Pferdekämper schrieb:  Was ist denn der Hintergrund der Geschichte? Ich meine damit: Was für ein Teil steuerst Du damit an?

Möchte ein Eltako LUD 12 steuern. Damit könnte ich die meisten 230V Verbraucher dimmen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Delay nurmili 2 219 10.07.2016 16:55
Letzter Beitrag: nurmili
  Problem mit Delay und Millis funnyzocker 1 459 26.06.2016 09:54
Letzter Beitrag: hotsystems
  PID ohne Library MeisterQ 5 532 01.05.2016 09:23
Letzter Beitrag: MeisterQ
  nur ein URL aufruf ohne PHP toto1975 3 607 05.04.2016 08:26
Letzter Beitrag: iks77
  Kann ich in eine For Schleife einen delay einbauen JanGamer11 6 613 05.01.2016 12:34
Letzter Beitrag: Hilgi
  Rampe ohne Delay DC-Motor de_flexus 3 1.942 22.11.2015 13:07
Letzter Beitrag: frank2000
  Doppelblitz ohne Delay cleko 3 857 12.11.2015 08:02
Letzter Beitrag: Bitklopfer
  LED ohne Brightnes Mathias 2 465 21.10.2015 16:33
Letzter Beitrag: Mathias
  Langes delay - wie macht man das? Gelegenheitsbastler 17 2.435 02.09.2015 20:48
Letzter Beitrag: Gelegenheitsbastler
  mal wieder ein kleines Problem mit blinken ohne delay :) Sbbfreack 6 1.734 06.07.2015 15:59
Letzter Beitrag: Sbbfreack

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste