Skocz do zawartości
Zaloguj się, aby obserwować  
ciscoc

[C] funkcja _delay_ms i _delay_us

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?

Udostępnij ten post


Link to post
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);

Udostępnij ten post


Link to post
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ś? 🙂

Udostępnij ten post


Link to post
Share on other sites

... 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.

Udostępnij ten post


Link to post
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()).

Udostępnij ten post


Link to post
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.

Udostępnij ten post


Link to post
Share on other sites

ciscoc, napisz jaka, a najlepiej podaj cytat 😉

Udostępnij ten post


Link to post
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

Udostępnij ten post


Link to post
Share on other sites

Pisać każdy może, trochę lepiej lub trochę gorzej. Manual do AVRa ma rację.

Udostępnij ten post


Link to post
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!

Gość
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.

Zaloguj się, aby obserwować  

×
×
  • Utwórz nowe...