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


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.

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.