Forum: Mikrocontroller und Digitale Elektronik befehl nach jedem 25ten Element der If Schleife


von Matthias B. (Firma: DLR ___ www.dlr.de) (silverhawk84)


Lesenswert?

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
}

von klausy (Gast)


Lesenswert?

nimm doch ne zweite Variable:
int k;

for (i = 0; i < 1400; i++)
{
      OCR1A = OCR1A+1;
   _delay_ms(10);
   if (k++==25)
   {
    k=0;
    toggle_LED();
   }
}

von Roland P. (pram)


Lesenswert?

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

von Matthias B. (Firma: DLR ___ www.dlr.de) (silverhawk84)


Lesenswert?

Ja, super! darauf hätt ich auch kommen können doh
vielen dank für die schnelle hilfe!

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.