_delay_ms seltsames Verhalten

OP #1408992
Hallo

Ich nutze die delay-Funktion beim LED-Blinken.

Nun ist es so, dass die LED beim Aufruf meiner Funktion mit 256 als 
Speed noch blinkt, ab 255 ist aber Schicht im Schacht, denn ab da und 
drunter leuchtet die LED die ganze Zeit.
Hängt ja offensichtlich mit 8 Bit zusammen. Aber ich hab ja mit unsigned 
int genügend Platz.
Werdet ihr daraus schlau?
1
void LED_EVENT(unsigned int Speed){
2

3
    LED_PORT |= (1<<PD4);     
4
    _delay_ms (Speed);
5
    LED_PORT &=~ (1<<PD4);
6
    _delay_ms (Speed);
7
}
Gast #1409015
_delay_ms() ist ein Macro, das verträgt nur Konstanten, wie Holger schon 
sagte. Vom Compiler werden die Float-Berechnungen eliminiert - das 
klappt nicht, wenn Du Variablen benutzt. Rtfm.

Einfache Lösung:

int i;
for(i=0;i<Speed;i++) _delay_ms(1);
#1409022
Die Rechnung ist die gleiche, ob konstant oder nicht, und bei 
Wartezeiten in sichtbaren Sphären spielt die Rechenzeit für die 
Fliesskommaberechnung keine massgebliche Rolle mehr. Und wenn du noch 
genug Platz im ROM hast, dann sind auch die KB für die 
Fliesskommaroutinen kein Problem.
Gast #1409033
>Und wenn du noch
>genug Platz im ROM hast, dann sind auch die KB für die
>Fliesskommaroutinen kein Problem.

Für unbenutzes Flash bekommt man ja auch kein Geld zurück ;)

@ Johannes

Wie groß ist dein Miniprogramm denn jetzt so?
#1409161
Johannes Hofmann schrieb:
> Hallo A.K. Könntest du mir deinen Post bitte noch etwas näher ausführen?

Die Berechnung an sich dauert immer ungefäähr gleich lang. Sagen wir 
einfach mal 1ms.
Ist deine Wartezeit 5000ms, dann sind diese zusätzlichen 1ms zu 
vernachlässigen. Kein Mensch kann mit freien Auge sehen, ob das jetzt 
5.0 oder 5.001 Sekunden sind.
Ist deine Wartezeit aber 10ms, dann sind die zusätzlichen 1ms durch die 
Berechnung nicht mehr zu vernachlässigen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 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.