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, 21:31
Beitrag #9
RE: Bit-banging PWM ohne delay?
...und was bekommt der Arduino als Input?

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, 22:01
Beitrag #10
RE: Bit-banging PWM ohne delay?
(20.09.2014 21:31)Thorsten Pferdekämper schrieb:  ...und was bekommt der Arduino als Input?

Ein Sketch, was in einem Ablauf verschiedene Ausgänge dimmt...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.09.2014, 12:57
Beitrag #11
RE: Bit-banging PWM ohne delay?
Hallo,

babe den Code in meinen Sketch implementiert. Im Moment habe ich noch 2 offene Punkte.

1. Beim Runterdimmen wird die LED nicht komplett ausgeschaltet und glimmt noch ein wenig.

2. Beim zweiten Hochdimmen geht die LED auf ganz 100% und beginnt danach zu dimmen?

Mein Code fürs hochdimmen:


Code:
if((brightness1 < 255) && (now - last_fi_1 > interval_fade))
  {  
    brightness1 = brightness1 + fadeAmount;  // in den Schritten wie oben definiert    
    //analogWrite(LED1, brightness1);          // erhöhe die Helligkeit der LED ->
    last_fi_1 = now;
  }
  time_on = map(brightness1,0,255, 0 ,10000);      
    time_off = 10000-time_on;

    if(state){
      time = time_on;
    }
    else{
      time = time_off;
    };

    if(now1- last > time) {
      state = ~state;
      digitalWrite(LED1, state);
      last += time;

}
Mein Code fürs runterdimmen:
Code:
time_on = map(brightness1,0,255, 0 ,10000);      
    time_off = 10000-time_on;

    if(state){
      time = time_on;
    }
    else{
      time = time_off;
    };

    if(now1- last > time) {
      state = ~state;
      digitalWrite(LED1, state);
      last += time;

}

if((brightness1 < 255) && (now - last_fi_1 > interval_fade))
  {  
    brightness1 = brightness1 + fadeAmount;  // in den Schritten wie oben definiert    
    //analogWrite(LED1, brightness1);          // erhöhe die Helligkeit der LED ->
    last_fi_1 = now;
  }

Und der komplette Code:

Code:
unsigned long last1;                    // Flag last Heartbeat1
unsigned long last2;                    // Flag last Heartbeat2

unsigned long interval_fade = 100;       // Zeitraum zwischen Fadingstufen
const int fadeAmount = 5;               // Stufen im Fadingraster

unsigned long last_fi_1;                // Flag last Fade in LED1
unsigned long last_fi_2;                // Flag last Fade in LED2
unsigned long last_fi_3;                // Flag last Fade in LED3

unsigned long last_fo_1;                // Flag last Fade out LED1
unsigned long last_fo_2;                // Flag last Fade out LED2
unsigned long last_fo_3;                // Flag last Fade out LED3

int potpin1 = 0;                        // Anschluß Poti 1
int potpin2 = 1;                        // Anschluß Poti 2
int potpin3 = 2;                        // Anschluß Poti 3

int LED1 = 9;                           // Anschluß LED1
int LED2 = 10;                          // Anschluß LED2
int LED3 = 11;                          // Anschluß LED3

int interval_fi;                        // Frequenz Heartbeat1
int interval_fo=8000;                   // Frequenz Heartbeat2

int interval_HB;

int beat1;                              // Heartbeat1
int beat2;                              // Heartbeat2

int brightness1;                        // Wert Helligkeit LED1
int brightness2;                        // Wert Helligkeit LED2
int brightness3;                        // Wert Helligkeit LED3

unsigned long last = 0;
int state = LOW;
unsigned long time_on;
unsigned long time_off;
int time;

//________________________________________________________________________________​________________________________________________________
void setup()
{
  pinMode(LED1,OUTPUT);
  pinMode(LED2,OUTPUT);
  pinMode(LED3,OUTPUT);

  Serial.begin(115200);



}




//________________________________________________________________________________​________________________________________________________
void loop()
{
  unsigned long now = millis();
  unsigned long now1 = micros();

  Heartbeat1(now,now1);
  Heartbeat2(now,now1);

}




//________________________________________________________________________________​________________________________________________________
void Heartbeat1(unsigned long now, unsigned long now1)
{  
  if(now-last1 >= interval_fi)
  {
    interval_fi=8000;
    beat1=beat1+1;
    if(beat1 >= 5)
    {
      beat1=1;
    }
    last1=now;
  }

  switch (beat1) {

  case 1:


time_on = map(brightness1,0,255, 0 ,10000);      
    time_off = 10000-time_on;

    if(state){
      time = time_on;
    }
    else{
      time = time_off;
    };

    if(now1- last > time) {
      state = ~state;
      digitalWrite(LED1, state);
      last += time;

}

if((brightness1 < 255) && (now - last_fi_1 > interval_fade))
  {  
    brightness1 = brightness1 + fadeAmount;  // in den Schritten wie oben definiert    
    //analogWrite(LED1, brightness1);          // erhöhe die Helligkeit der LED ->
    last_fi_1 = now;
  }



    break;


  case 2:
    if((brightness2 < 255) && (now - last_fi_2 > interval_fade))
    {  
      brightness2 = brightness2 + fadeAmount;  // in den Schritten wie oben definiert    
      analogWrite(LED2, brightness2);          // erhöhe die Helligkeit der LED ->
      last_fi_2 = now;  
    }
    break;


  case 3:
    if((brightness3 < 255) && (now - last_fi_3 > interval_fade))
    {  
      brightness3 = brightness3 + fadeAmount;  // in den Schritten wie oben definiert    
      analogWrite(LED3, brightness3);          // erhöhe die Helligkeit der LED ->
      last_fi_3 = now;  
    }
    break;


  case 4:
    if((brightness2 < 255) && (now - last_fi_2 > interval_fade))
    {  
      brightness2 = brightness2 + fadeAmount;  // in den Schritten wie oben definiert    
      analogWrite(LED2, brightness2);          // erhöhe die Helligkeit der LED ->
      last_fi_2 = now;  
    }
    break;
  }
}






//________________________________________________________________________________​________________________________________________________
void Heartbeat2(unsigned long now, unsigned long now1)
{
  if(now-last2 >= interval_fo)
  {
    interval_fo=8000;
    beat2=beat2+1;
    if(beat2 >= 5)
    {
      beat2=1;
    }
    last2=now;
  }


  switch (beat2) {
  case 1:
    time_on = map(brightness1,0,255, 0 ,10000);      
    time_off = 10000-time_on;

    if(state){
      time = time_on;
    }
    else{
      time = time_off;
    };

    if(now1- last > time) {
      state = ~state;
      digitalWrite(LED1, state);
      last += time;

    }
  
  
    if((brightness1 > 0) && (now - last_fo_1 > interval_fade))                                        
    {  
      brightness1 = brightness1 - fadeAmount;  // in den Schritten wie oben definiert
      //analogWrite(LED1, brightness1);          // veringere die Helligkeit der LED <-
      last_fo_1 = now;    
    }

    break;


  case 2:
    if((brightness2 > 0) && (now - last_fo_2 > interval_fade))
    {  

      brightness2 = brightness2 - fadeAmount;  // in den Schritten wie oben definiert    
      analogWrite(LED2, brightness2);          // erhöhe die Helligkeit der LED ->
      last_fo_2 = now;  
    }
    break;


  case 3:
    if((brightness3 > 0) && (now - last_fo_3 > interval_fade))
    {  

      brightness3 = brightness3 - fadeAmount;  // in den Schritten wie oben definiert    
      analogWrite(LED3, brightness3);          // erhöhe die Helligkeit der LED ->
      last_fo_3 = now;  

    }
    break;

  case 4:
    if((brightness2 > 0) && (now - last_fo_2 > interval_fade))
    {  

      brightness2 = brightness2 - fadeAmount;  // in den Schritten wie oben definiert    
      analogWrite(LED2, brightness2);          // erhöhe die Helligkeit der LED ->
      last_fo_2 = now;  

    }
    break;
  }
}

Ablaufbeschreibung:

LED1 wird hochgedimmt, bleibt 8 Sekunden an und wird runtergedimmt. LED 2 überschneidet beim Hochdimmen sich mit dem runterdimmen von LED1 und setzt das Pattern von LED fort. Die komplette Folge ist:Led1,2,3,2,1,2,3,2...usw.

Mit der normalen PWM funktioniert das perfekt, aber leider unterstützt meine externe Peripherie nur PWM mit 100Hz.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.09.2014, 06:45
Beitrag #12
RE: Bit-banging PWM ohne delay?
Hi,
Du schaltest immer in den anderen "state" um, auch wenn die nachfolgende Zeit 0 ist. Daher ist die LED zumindest ganz kurz an.
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
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Delay nurmili 2 220 10.07.2016 16:55
Letzter Beitrag: nurmili
  Problem mit Delay und Millis funnyzocker 1 462 26.06.2016 09:54
Letzter Beitrag: hotsystems
  PID ohne Library MeisterQ 5 534 01.05.2016 09:23
Letzter Beitrag: MeisterQ
  nur ein URL aufruf ohne PHP toto1975 3 613 05.04.2016 08:26
Letzter Beitrag: iks77
  Kann ich in eine For Schleife einen delay einbauen JanGamer11 6 616 05.01.2016 12:34
Letzter Beitrag: Hilgi
  Rampe ohne Delay DC-Motor de_flexus 3 1.945 22.11.2015 13:07
Letzter Beitrag: frank2000
  Doppelblitz ohne Delay cleko 3 863 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.444 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