eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaATmega, jak zaprogramować narastanie wartości sygnału, bez użycia operacji zmiennoprzecinkowych?Re: ATmega, jak zaprogramować narastanie wartości sygnału, bez użycia operacji zmiennoprzecinkowych?
  • Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
    atman.pl!news.supermedia.pl!news.nask.pl!news.nask.org.pl!news.internetia.pl!no
    t-for-mail
    From: Michoo <m...@v...pl>
    Newsgroups: pl.misc.elektronika
    Subject: Re: ATmega, jak zaprogramować narastanie wartości sygnału, bez użycia
    operacji zmiennoprzecinkowych?
    Date: Tue, 09 Oct 2012 12:50:29 +0200
    Organization: Netia S.A.
    Lines: 40
    Message-ID: <k50vrk$8lg$1@mx1.internetia.pl>
    References: <5073652e$0$26682$65785112@news.neostrada.pl>
    <k50k2t$hv3$1@mx1.internetia.pl>
    <5073fa4b$0$26703$65785112@news.neostrada.pl>
    NNTP-Posting-Host: 83.238.197.12
    Mime-Version: 1.0
    Content-Type: text/plain; charset=ISO-8859-2; format=flowed
    Content-Transfer-Encoding: 8bit
    X-Trace: mx1.internetia.pl 1349780148 8880 83.238.197.12 (9 Oct 2012 10:55:48 GMT)
    X-Complaints-To: a...@i...pl
    NNTP-Posting-Date: Tue, 9 Oct 2012 10:55:48 +0000 (UTC)
    In-Reply-To: <5073fa4b$0$26703$65785112@news.neostrada.pl>
    X-Tech-Contact: u...@i...pl
    User-Agent: Mozilla/5.0 (X11; Linux i686 on x86_64; rv:10.0.6esrpre) Gecko/20120817
    Icedove/10.0.6
    X-Server-Info: http://www.internetia.pl/
    Xref: news-archive.icm.edu.pl pl.misc.elektronika:636340
    [ ukryj nagłówki ]

    On 09.10.2012 12:19, Robbo wrote:
    > Czas będzie zawsze liczony od zera. Prąd początkowy także będzie
    > narastać od zera.
    > Więc jeśli I(S0) = 0, S0 = 0. Zatem powyższe formuły można uprościć do:
    > I(s) = I(Se) * (s/Se)
    > I(s) = I(Se)/Se*s
    Dokładnie. Ale tak długo jak zmiany są liniowe to wystarcza raz policzyć
    iloraz różnicowy.

    >
    >> Przekształcasz to sobie na:
    >> I(t)=I(T0)+t*dI
    >> I(t)=I(t-1)+dI
    >>
    >> Raz wyliczasz iloraz różnicowy dI, potem masz w każdym cyklu jedno
    >> dodawanie i jeden shift.
    >
    > Tu bym prosił o wyjaśnienie. Mało spałem i chyba nie do końca myślę,
    > dlatego proszę o wybaczenie.
    >
    > Czy dI będzie wartością zmiennoprzecinkową?
    Stałoprzecinkową, np. o 16 bitach części całkowitej i 16 po przecinku:

    uint16_t I=0;
    uint32_t I_accu=0;
    uint32_t dI;
    time_t last_time=0;

    void new_setting(/**/){
    dI=(I_target<<16)/time_slices;
    }
    void calc(time_t t){
    I_accu+=dI*(t-last_time);
    I=I_accu>>16;
    last_time=t;
    }

    --
    Pozdrawiam
    Michoo

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: