Algoritmicka - pocitanie impulzov
Martin Záruba
swz na volny.cz
Středa Únor 7 11:17:46 CET 2024
A nebo ještě lepší:
Založím proměnnou POCET_PULZU a vynuluji ji.
Založím proměnnou byte BUFFER a vynuluji ji.
Založím proměnnou byte INDEX a vynuluji ji.
Založím byte POLE[300] a vynuluji ho.
Náběžnou hranou pulzu vyvolám přerušení a v něm bude BUFFER++;
Každých 10mS vyvolám druhé přerušení a v něm bude:
POCET_PULZU-=POLE[INDEX];
POCET_PULZU+=BUFFER;
BUFFER=0;
INDEX++;
if (INDEX > 300) INDEX=0;
Nic nemusím sčítat, nic nemusí jít synchronně, není tam žádná smyčka. V
POCET_PULZU je stále výsledek.
Martin Záruba
Dne 7.2.2024 v 10:52 Martin Záruba napsal(a):
>
> A nebo vylepšení:
>
> Udělám pole 300 byte.
>
> Náběžnou hranou pulzu vyvolám přerušení a v něm bude zvýšení 1 byte
> bufferu o 1.
>
> Každých 10mS vyvolám druhé přerušení a v něm bude zvýšení indexu o 1 a
> pokud je 300, vynulování. Dále uložení obsahu bufferu z 1. přerušení
> na pozici indexu a vynulování bufferu.
>
> V hlavním program cyklicky sčítám věechny buňky v poli.
>
> Rozlišení na 10mS zůstane zachované, ale v každ´m 10mS taktu může být
> až 255 pulzů. Nyní se už těžko něco ztratí.
>
>
> Martin Záruba
> Dne 7.2.2024 v 9:56 Martin Záruba napsal(a):
>>
>> Fpga neznám, tak nevím, zda by šlo použít tento algoritmus:
>>
>> Vím, že pulzů může být maximálně 10 za sekundu.
>>
>> Udělám pole 300 bitů.
>>
>> Nevím, jak je pulz dlouhý, takže musím reagovat na náběžnou hranu.
>>
>> Náběžnou hranou pulzu vyvolám přerušení a v něm bude zápis 1 do
>> bufferu na 1 bit.
>>
>> Každých 10mS vyvolám druhé přerušení a v něm bude zvýšení indexu o 1
>> a pokud je 300, vynulování. Dále uložení obsahu bufferu z 1.
>> přerušení na pozici indexu a vynulování bufferu.
>>
>> V hlavním program cyklicky počítám kolik je 1 v poli.
>>
>> Má to jedinou vadu: Pokud bude sice za sekundu do 10-ti pulzů, ale
>> třeba dva přijdou za sebou rychleji, než za 100mS, pulz se ztratí.
>>
>> Martin Záruba
>> Dne 7.2.2024 v 7:50 balu napsal(a):
>>> Takto na stredu by som mal algoritmicku otazku. Potrebujem najst
>>> nejaku inspiraciu na zaciatok. Jednu metodu uz mam predvymyslenu,
>>> ale viac inspiracie nikdy nue je na zahodenie.
>>> Majme impulzy, ktore prichadzaju s maximalnou frekvenciou 10Hz, cas
>>> medzi nimi je ale nahodny a nie su synchronizovane na ziadne hodiny
>>> spolocne s vyhodnocovacim obvodom.
>>> Potrebujem pocitat pocet impulzov za poslednych 30 sekund. Musi to
>>> ale byt plavajuce okno, za poslednych 30 sekund. Nie fixne okno raz
>>> za 30 sekund.
>>> Komplikacia je, ze sa to ma implementovat do fpga, takze sa nedaju
>>> pouzit operacie typu for slucka a prejst cez pole niecoho.
>>> Ako na to?
>>> b.
>>>
>>>
>>> _______________________________________________
>>> HW-list mailing list - sponsored bywww.HW.cz
>>> Hw-list na list.hw.cz
>>> http://list.hw.cz/mailman/listinfo/hw-list
>>
>> _______________________________________________
>> HW-list mailing list - sponsored bywww.HW.cz
>> Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
>
> _______________________________________________
> HW-list mailing list - sponsored bywww.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20240207/91f3afa8/attachment.htm>
Další informace o konferenci Hw-list