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
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.
...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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.