www.mikrocontroller.net

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


Autor: Matthias Bock (Firma: DLR ___ www.dlr.de) (silverhawk84)
Datum:

Bewertung
0 lesenswert
nicht 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.
    PORTC |= (1 << PC5);
    _delay_ms(250);
    PORTC &= ~(1 << PC5);
    _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.
ICR1 = 0x4E20;        // Periodendauer
OCR1A = 100;          // High-Pegel dauer
    PORTC |= (1 << PC5);  // LED AUS
for (i = 0; i < 1400; i++) 
{  
      OCR1A = OCR1A+1;
   _delay_ms(10);
   if (i==25)
    PORTC &= ~(1 << PC5);  // LED AN
}
   while( 1 )
    ;  
}

Autor: klausy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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();
   }
}

Autor: Roland Praml (pram)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, klar, i ist ja nur einmal 25. Entweder mit modulo
for (i = 0; i < 1400; i++) 
{  
  OCR1A = OCR1A+1;
  _delay_ms(10);
  if (( i % 25) == 0) {
    PORTC ^= (1 << PC5);  // LED Togglen
  }
}
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:
for (i = 0; i < 1400; i++) 
{  
  OCR1A = OCR1A+1;
  _delay_ms(10);
  j++;
  if (j >= 25) {
    j = 0;
    PORTC ^= (1 << PC5);  // LED Togglen
  }
}
Gruß
Roland

edit: klausy war schneller

Autor: Matthias Bock (Firma: DLR ___ www.dlr.de) (silverhawk84)
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.