Skocz do zawartości

[C] funkcja _delay_ms i _delay_us


ciscoc

Pomocna odpowiedź

Dla funkcji _delay_ms instrukcja AVR podaje że maksymalny czas opóźnienia wynosi 262,14 ms przy F_CPU w MHz, związku z czym proszę mi powiedzieć bo nie rozumiem tego mianowicie dla funkcji _delay_ms mogę podać czas tylko z przedziału od 0 d0 262,14 ms jeżeli wyjdę poza ten przedział to będę miał 0 ms przy częstotliwości 1 MHz. A jak mam uzyskać opóźnienie 500 ms przy częstotliwości 1 MHz? Jak to się przelicza?

Link do komentarza
Share on other sites

czyli dla częstotliwości 1 MHz mam opóźnienie maksymalne 262,14 ms tak?

co znaczy "wie funkcje _delay_ms(250) koło siebie i będziesz miał 500"

czy chodzi Ci o taki zapis

//kod programu

_delay_ms(250);

_delay_ms(250);

// kod programu

[ Dodano: 10-09-2012, 22:01 ]

a powiedz jak uzyskać 300 ms? patrząc na definicję funkcji _delay_ms() mieści się ona w przedziale od 0 do 262,14 ms dla f=1MHz.

czyli co obok siebie powinienem dać dwie funkcje _delay_ms () po 100 i 200 ms?

_delay_ms(100);

_delay_ms(200);

Link do komentarza
Share on other sites

ciscoc, fajnie, że czytasz dokumentację funkcji, to się chwali. Ale chwali się również czytanie jej całości 🙂 Co 'instrukcja AVR' podaje w następnym akapicie po tym, co napisałeś? 🙂

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

... a mógłbyś mi to wyjaśnić ustawienia dla _delay_ms() i _us()

[ Dodano: 19-09-2012, 20:26 ]

oto Ci chodzi

When the user request delay which exceed the maximum possible one, _delay_ms() provides a decreased resolution functionality. In this mode _delay_ms() will work with a resolution of 1/10 ms, providing delays up to 6.5535 seconds (independent from CPU frequency). The user will not be informed about decreased resolution.

Link do komentarza
Share on other sites

ciscoc, tak, o to mi chodzi. Jest tu wyraźnie napisane, że jeżeli pożądana przez Ciebie wartość opóźnienia przekracza tę maksymalną wartość graniczną, to funkcja _delay_ms() będzie miała ograniczoną rozdzielczość. I tylko tyle - funkcja nadal będzie działać poprawnie, a podejrzewam, że do Twojego zastosowania rozdzielczość rzędu 0.1 ms jest jak najbardziej wystarczająca.

Zatem jeśli chcesz mieć opóźnienie 500 ms to piszesz po prostu

_delay_ms(500);

i już. Co do różnych wartości częstotliwości CPU - nie ma tu żadnego przeliczania z Twojej strony, jeśli masz zadeklarowaną tę wartość w programie (a masz na pewno) to funkcja sama wylicza sobie wszystko, czego potrzebujesz. Ty tylko podajesz ilość milisekund (lub mikrosekund w przypadku _delay_us()).

Link do komentarza
Share on other sites

a myślałem że jeżeli podam zakres większy niż 262,14 dla _ms() to kompilator potraktuje to jako 0, jedna z książek do nauki AVRów tak podała, stąd moje wątpliwości były.

Link do komentarza
Share on other sites

cytat "Funkcja _delay_ms wywołuje opóźnienie liczone w milisekundach. Jej argumentem może być liczba zmiennoprzecinkowa z zakresu od 0 do 262 (dokładnie 262,14). Podanie argumentu większego niż 262 zostanie potraktowane jak podanie zera. Odpowiednikiem funkcji _delay_ms dla krótszego okresu jest _delay_us, która wywołuje opóźnienie liczone w mikrosekundach..."

Programowanie mikrokontrolerów dla każdego AVR & ARM7 str.80

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.