 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
Highlag Član


Pridružen-a: Pet 23 Jan 2004 20:42 Prispevkov: 4034 Aktiv.: 17.03 Kraj: Črnuče
|
Objavljeno: Ned Okt 30, 2005 6:04 pm Naslov sporočila: Generiranje naključne vrednosti |
|
|
Se je s tem že kdo ukvarjal?
Recimo če PIC nima A/D pretvornika in in možno podatkov pripeljati od zunaj.
Ne rabim ravno kode me pa zanima kako bi se lotili zadeve? _________________ If at first you don't succeed, destroy all evidence that you tried. |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Ned Okt 30, 2005 7:47 pm Naslov sporočila: |
|
|
Ali bos v aplikaciji sploh imel kaksen zunanji vhod (ja, sem videl del o "nic podatkov od zunaj" ... a to je zelo sirok pojem - morda si imel ti v mislih le vnos nakljucnih vrednosti od zunaj, ne pa opazovanje dogodkov okrog mikrokontrolerja) ? Ce bo temu tako, potem definitivno izkoristi prostotekoci timer v navezavi s spremembo stanja vhoda (UART, port na katerem so tipke, nakljucni interrupti, ki spremenijo casovno zaporedje izvajanja programa, itd.). Sicer obstajajo algoritmi za generacijo psevdo-nakljucnih stevil, a nic od tega ni tako dobro, kot "zaresne" nakljucne vrednosti (recimo da uporabis isti generator, a mu z nakljucnimi vrednostmi, ki jih dobis vsakic, ko nekdo od zunaj casovno-nakljucno vpliva na sistem, lahko spremenis "pozicijo" - to so potem prave nakljucne vrednosti in ne le "zelo dolgo in za cloveka neintuitivno zaporedje").
Ce ne rabis pravih nakljucnih stevil, potem je nesmiselno komplicirati in uporabi preprosto predpripravljeno tabelo in pobiraj vrednosti iz nje. Ce tvoj program uporablja prekinitve, ki niso vezane na timer, bos ze z uporabo enega timerja kot zamika (offset) za indeks v tabelo prepripravljenih vrednosti dobil prakticno nepredvidljive (= nakljucne) rezultate, saj se bo vrednost timerja (in s tem indeksa) kdaj spremenila za cisto malo med dolocenimi ukazi, kdaj pa zelo veliko (ko bo vmes vrinjena in izvedena prekinitev), vsakic na razlicnih mestih. |
|
Nazaj na vrh |
|
 |
Highlag Član


Pridružen-a: Pet 23 Jan 2004 20:42 Prispevkov: 4034 Aktiv.: 17.03 Kraj: Črnuče
|
Objavljeno: Ned Okt 30, 2005 8:26 pm Naslov sporočila: |
|
|
Ja v bistvu sem mislil popolnoma brez vhodov predvsem zaradi enostavnosti.
Timer in tabela sta verjetno res najboljša izbira, ker bi za neko res naključje rabil kakšno specijalno vezje.
Mogoče bi stvar še malo zakompliciral in imel dva timerja, drugi bi bil recimo posredno odvisen od prvega, s tem da bi drugega porabil še za izbiro kakšne matematične funkcije, ki bi se izvedla na izžrebanih podatkih. _________________ If at first you don't succeed, destroy all evidence that you tried. |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Ned Okt 30, 2005 9:01 pm Naslov sporočila: |
|
|
Ne poznam arhitekture PICov, tako da ti konkretnejsega nasveta ne morem dati, je pa tako, da brez uvedbe nakljucnih vplivov v postopek generiranja zagotovo ne bos dobil ven kaksnih hudih (= tezko predvidljivih) psevdonakljucnih stevil.
Dveh timerjev v bistvu niti ne rabis, ce bosta tekla oba odvisno od samo enega zunanjega dogodka (kar je ponavadi reset mikrokontrolerja in stevilo ukazov od reseta do zagona timerja). Tudi en sam je najbrz povsem neuporaben, ce bo aplikacija ves cas tekla v eni predvidljivi zanki, brez zunanjih prekinitev, brez vejitev, brez zunanjih vhodov (to pomeni tudi UART), itd. Lahko uporabis recimo dvojno indeksiranje v tabelo, indeksiranje z vrednostjo iz tabele (se recimo z kaksnim stevcem kot offsetom), itd. Kakorkoli ze, v vsakem primeru se bo zaporedje ponavljalo povsem enako vsakic, ko bos program pognal. Ce nimas nobenega zunanjega vpliva na izvajanje, potem je to bolj tako-tako; povsem neuporabno je to recimo za zascito, uporabno pa recimo za npr. kaksne priblizne (Monte Carlo) "izracune", kjer do zadovoljive resitve prides tako veliko hitreje.
Vsak algoritem za generiranje psevdonakljucnih stevil bo zacel niz po dolocenem casu ponavljati, niz pa bo predvidljiv (nekateri imajo pa se napake in je mozno ugotoviti v katerem delu - sicer zelo dolgega - niza se trenutno nahajajo, torej efektivno delujejo z manjso locljivostjo od nazivne).
Se nekaj o "specialnih vezjih": tudi cisto majhen (8 bitni v stilu 74x193) zunanji prostotekoci stevec z nestabilnim oscilatorjem kot vhodom (tukaj ti to za razliko od vecine primerov neenakomerno delovanje oscilatorja koristi in ne skoduje) bi bil cisto dovolj za vrednost "seeda" za generator, a si napisal da noces priklopa nobenih zunanjih stvari. Tudi prostotekoci stevec v PICu, ki ga lahko na kaksen nacin zadrzi zunanji vpliv (pritisk tipke recimo) bi bil funkcionalno identicen.
Nazadnje urejal/a Sokrat Tor Nov 01, 2005 12:33 pm; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
 |
twom Član


Pridružen-a: Ned 26 Okt 2003 0:37 Prispevkov: 986 Aktiv.: 4.16 Kraj: Ljubljana
|
Objavljeno: Tor Nov 01, 2005 11:53 am Naslov sporočila: |
|
|
Microchip AN544 vsebuje tudi Pseudo Random Number Generator.
Ima pa kašne omejitve, kot so zgoraj omenjali.
Lp,
Peter |
|
Nazaj na vrh |
|
 |
Highlag Član


Pridružen-a: Pet 23 Jan 2004 20:42 Prispevkov: 4034 Aktiv.: 17.03 Kraj: Črnuče
|
Objavljeno: Pet Nov 04, 2005 12:14 am Naslov sporočila: |
|
|
Hvala bom pogledal tudi AN544 _________________ If at first you don't succeed, destroy all evidence that you tried. |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 492 dni
Powered by phpBB © 2001, 2005 phpBB Group
|