Forum: Compiler & IDEs verständnisproblem: delay-funktion


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von pierre (Gast)


Lesenswert?

hallo
ich habe mir das buch c für mikrocontroller ausgeliehen und bin auf ff.
quelltext gestoßen, den ich mir nicht erklären kann. der autor
verwendet einen 4Mhz-AVR. und nun der quellcode in c:

void delay(unsigned int time_us)
{
     time_us/=17;
     time_us*10;
     while(--time_us);
}

time_us soll als zeit in us der funktion übergeben werden.
nun meine frage: wieso wird zurerst durch 1,7 geteilt? hat das
irgendwie mit der zeitumrechnung zu tun?
kann man nicht einfach sagen, dass bei einem 4Mhz-quarz, eine periode
2,5*10^-7 us dauert und dann die gewünschte zeit (in mikrosekunden)
durch 2,5*10^-7 us dividiert und dann erhält man die anzahl der takte,
die der controller warten muss?

danke pierre

von pierre (Gast)


Lesenswert?

hab mich vertippt, es muss

time_us*=10;

heißen.

gruß pierre

von Werner Hoch (Gast)


Lesenswert?

void delay(unsigned int time_us)
{
     time_us/=17;
     time_us*=10;
     while(--time_us);
}

wenn du 1us und 4Mhz und den Faktor 1,7 miteinander verrechnest,
dann kommt raus, daß der Buchauthor davon ausgegangen ist, daß der
Controller für while(--time_us) 6,8 Takte ;-) benötigt.

Alles klar?

mfg
werner
PS: die Annahme von 6,8 Takten ;-) hat der Author des Buches sicherlich
dem ASM-Listing entnommen, oder er hat solange probiert bis es gepaßt
hat.

von Joerg Wunsch (Gast)


Lesenswert?

...wobei die Berechtigung dieser Annahme im Einzelfall nachzuweisen
wäre.  In aller Regel wird die Wahrscheinlichkeit, daß das so
funktioniert, nahe 0 liegen.

Besser die Macros aus <avr/delay.h> benutzen.

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]
  • [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.