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

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • 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.