logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Różnica między funkcjami opóźniającymi..

rav1989 27 Mar 2011 22:13 1571 5
REKLAMA
  • #1 9331126
    rav1989
    Poziom 11  
    Witam

    Chciałbym się zapytać jak się ma funkcja _delay_loop_2 do funkcji _delay_ms lub _delay_us? Czyli jaki jest przelicznik z hmm... licznika _delay_loop_2 na milisekundy lub mikrosekundy, oczywiście domyślam się, że jest to obliczane względem częstotliwości czyli np. _delay_loop_2(1200); to 4000 cykli zegara dla częstotliwości 8MHz w takim razie dla częstotliwości 16MHz powinno być _delay_loop_2(2400); czyli 2 razy więcej tak?
    Czyli dla 8MHz 4000 cykli wykona się w 0,0005 sek. (500us) a dla 16MHz w 0,00025 sek. (250us). Czyli zapis _delay_loop_2(1200); jest równoznaczny z zapisem _delay_us(500); oraz _delay_loop_2(2400); to _delay_us(250);

    Czy dobrze myślę ??
  • REKLAMA
  • #2 9331254
    dondu
    Moderator na urlopie...
    Witaj,

    Jak zapewne zauważyłeś opóźnienie funkcji _delay_loop_2() zależy od F_CPU
    ponieważ przeliczanie F_CPU jest w funkcji nadrzędnej _delay_ms().

    Cytat:

    Delay loop using a 16-bit counter \c __count, so up to 65536
    iterations are possible. (The value 65536 would have to be
    passed as 0.) The loop executes four CPU cycles per iteration,
    not including the overhead the compiler requires to setup the
    counter register pair.

    Thus, at a CPU speed of 1 MHz, delays of up to about 262.1
    milliseconds can be achieved.



    Sposób obliczenia jest podany w definicji:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod



    Drugą parą są funkcje _delay_us() i _delay_loop_1().

    Wszystkie funkcje znajdziesz w delay.h oraz delay_basic.h

    W jakim celu chcesz korzystać bezpośrednio z _delay_loop_2() ?
  • REKLAMA
  • REKLAMA
  • #4 9331387
    dondu
    Moderator na urlopie...
    OK, to daj 2 razy większe parametry tej funkcji i powinno być prawie dobrze.
    A co do wykorzystania delay_ms i us to zerknę na kod funkcji....

    Dodano po 2 [minuty]:

    Nie znam tego protokołu, ale znalazłem coś takiego:
    http://mikerey35475.tripod.com/sirc.html
    http://www.dragarti.cba.pl/artykuly/72-sirc

    czasy podane w µs - czy to załatwi sprawę?
  • REKLAMA
  • #5 9331478
    rav1989
    Poziom 11  
    OK :D pobawię się tym jeszcze :)
REKLAMA