befehl nach jedem 25ten Element der If Schleife

OP (Firma: DLR ___ www.dlr.de) #954184
Ich möchte ein Softstart für einen Motor programmieren. Das klappt mit 
PWM auch ganz gut, aber nun möchte ich, dass solange die Pegeldauer 
erhöht wird, eine LED blinkt.
Anfangs dachte ich, ich mache es einfach mit delay, aber dadurch wird 
die ganze schleife verzögert.
1
    PORTC |= (1 << PC5);
2
    _delay_ms(250);
3
    PORTC &= ~(1 << PC5);
4
    _delay_ms(100);
also dachte ich mir, ich mache es so, dass bei jedem 25ten Element die 
LED angeht und nach 50 Elementen ausgeht. Aber ich weiss leider nicht, 
wie ich das realisieren kann.
Bisher geht sie nach dem 25ten Element an, aber bleibt danach an.
1
ICR1 = 0x4E20;        // Periodendauer
2
OCR1A = 100;          // High-Pegel dauer
3
    PORTC |= (1 << PC5);  // LED AUS
4
for (i = 0; i < 1400; i++) 
5
{  
6
      OCR1A = OCR1A+1;
7
   _delay_ms(10);
8
   if (i==25)
9
    PORTC &= ~(1 << PC5);  // LED AN
10
}
11
   while( 1 )
12
    ;  
13
}
Ja, klar, i ist ja nur einmal 25. Entweder mit modulo
1
for (i = 0; i < 1400; i++) 
2
{  
3
  OCR1A = OCR1A+1;
4
  _delay_ms(10);
5
  if (( i % 25) == 0) {
6
    PORTC ^= (1 << PC5);  // LED Togglen
7
  }
8
}
wobei Modulo bei 25 ein ziemlicher "Bräter" ist, will heißen, ein MOD 25 
ist ziemlich aufwändig, besser wäre eine Zweierpotenz z.B. 16 oder 32) 
da dies der Compiler optimieren kann und nicht die Divisionsroutine zur 
Berechnung braucht. oder du machst es über eine zweite Variable:
1
for (i = 0; i < 1400; i++) 
2
{  
3
  OCR1A = OCR1A+1;
4
  _delay_ms(10);
5
  j++;
6
  if (j >= 25) {
7
    j = 0;
8
    PORTC ^= (1 << PC5);  // LED Togglen
9
  }
10
}
Gruß
Roland

edit: klausy war schneller

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.