Instrkce na libovolné číslo??

no ale tak pokud bude pracovat jen s těma osmi bitama jako já tak je to jen 0-255 a co se náhodnejch čísel týče no tak prostě mi na port P1 skáčou různý čísla a to mi stačí

Vrele doporucujem si pozriet odkaz, ktory uvadza Freshman.

Je to velmi poucne nie len ako generovat nahodne cisla, ale autor velmi exaktne realizoval i matematicku statistiku, do akej miery je nahoda nahodou. A ak niekto robi losovacie zariadenie, asi by mal mat nejaky exaktny vysledok, ze vsetky cisla sa generuju aspon priblizne s rovnakou pravdepodobnostou.

to kyberbob: Odkial ti na port P1 “skacu” cisla? Ako tozabezpecujes?

tímhle kodem

 MOV P1,A                    ;přesuň data na P1 

pošlu data na p1 jestli jsem pochopil dotaz

Nepytal som sa ako data z P1 prenesies “z programu”,
ale ako zabezpecujes, aby na P1 ako pises

Ako zabezpecujes tu nahodnost?
to by mohlo byt dost zaujimave i pre inych, ako generovat RANDOM data.

no tak z kodu je vidět že v A je 1 R7 je 53, no a já stále opakuji funkci ADD která je součet dvou čísel takže z tohoto:

cyklus:
ADD A,R7
jmp cyklus  ;A a R7 secti a uloz do A

je tohle:
A=1, R7=53
1+53=54 A=54 > opakovat
A=54, R7=53
54+53=107 A=107 > opakovat
A=107, R7=53
107+53=107 A=160 > opakovat

a takhle je to furt dokola, když je to A větší než 255 tak se vynuluje a počítá to od 0 “asi”, to číslo 53 jde změnit za jine a bude to zase tvořit jiná šísla je to prostě nej posloupnost sčítání což jde i změnit :smiley: v atmelu jsem to ještě neměl ale simulační program snad nelže, viz graf, v budoucnu se na port P1 přenesou data jen vyvoláním přerušení aby to bylo vic náhodné, pokud dělám chybu tak se fšem omlouvám mě to takhle stačí :slight_smile:

Jasne :slight_smile:
To kyberbob:
omluvam sa, ze som si dobre nepozrel program z 28.1., respektive som ho nespojil s Tvojim menom. Nejak som omylom nadobudol dojem, ze sa jedna o nejaky iny princip. Z toho Tvojho sw je to predsa jasne :slight_smile:

Zdravim!

Tu je jeden odkaz dhservis.cz/rutiny_soubory/nahoda.htm

Igor

Rutina na náhodná čísla zde: (Ověřeno, funguje - a dobře ):
dhservis.cz/rutiny_soubory/nahoda.htm
:slight_smile:
EDIT: tys mě předběh Igore! :smiley:

Pro správný random generátor by měly být splněny nasledující požadavky:

  1. Pravděpodobnost výskytu každého generovaného čísla ze zvoleného intervalu musí být stejná při nekonečném množsví vzorků.
  2. Generování nesmí být periodické. Žádná větší posloupnost čísel se nesmí opakovat.
  3. Žádná další hodnota z generátoru nesmí být předvídatelná.
  4. Dvě stejná zařízení se stejným SW nesmí generovat stejnou posloupnost čísel.

Jinými slovy, random generátor se musí chovat jako zdroj bílého šumu.(obsahuje všechny fekvence se stejnou amplitudou).

Kupříkladu funkce:
Y(t) = sin(at) + sin(bt)
kde t je čas a a a b jsou reálná čísla nemající celý společný násobek je neperiodická. Zdálo by se, že to lze pro random gen. použít, ale nespňuje podmínky 3 a 4.
Aby to fungovalo, musí být do výpočtu zavlečen jistý fyzikální jev, jež je jedinečný pro to které zařízení. Už zde bylo vzpomenuto měření teploty nebo šumu z ADC.

Napadlo mě docela jednoduché řešení vycházející z výše uvedené funkce. Není třeba počítat siny, ale stačí vzít 2 nezávislé frekvence, které přirozeně budou nesoudělné. Jejich součet by dal neperiodický signál. Jednou frekvencí může být krystal MCU a druhou frekvencí sít nebo RTC.
Pak stačí spustit 1 timer, jehož inkrementování je odvozeno od krystalu MCU a druhá frekvence generuje přerušení např. od síťové frekvence. V přerušení se odečte okamžitý stav timeru. Takto získané vzorky mohou posloužit jako parametry nějaké funkce či polynomu pro výpočet náhodného čísla.

V jednoduším případě lze vytvořit přerušení od timeru v pravidelných časových intervalech a přečíst si v něm hodnotu PC registru, což je vlastně návratová adresa v zásobníku. Protože k přerušení může docházet v libovolné části programu, získáme tak posloupnost pseudonáhodných čísel ale jen tehdy, není-li hlavní program nějak synchronizován s tímto timerem.

Technik: Jseš řek bych velký detajlista, ale máš pravdu, že náhodná čísla se většinou odvozují od časově závislých funkcí. I PC to tak dělá.
Nepročítal jsem toto téma podrobně, ale “jak moc” musí být ta generovaná čísla náhodná? (otázka pro autora tématu)

Jako kompliment to moc nezní, ale když jsem si pročítal zdejší příspěvky, tak má poci, že mnozí podléhají jisté iluzi.
Jeli náhodné číslo generováno funkcí
y = f(a++)
kde a je vnitřní proměnná typu static a inkrementuje se s každým použitím této funkce, nemůže jít o generování náhodných čísel. Už si přesně nepamatuju terminologii z matematiky takže se asi dopustím asi pojmové chyby. Funkce je zobrazením množiny A do množiny Y. Tzn. že každému prvku a z množiny A je jednoznačne přiřazen prvek y z množiny Y. Přičemž 2 různým a může být přiřezen tentýž prvek y. Z toho plyne, že jakákoli funkce zařídí pouze záměnu pořadí generovaných čísel, ale jejich poslounost se bude periodicky opakovat. Je to stejné, jako když vezmete paměť EEPROM, do ní nahrajete “zázračná” data, na adresové vodiče připojíte čítač, který se inkrementuje s každám použitím funkce a z datových vodičů odeberet “náhodné” číslo. Nic na tom nezmění ani obsah paměni, ani záměna datových nebo adresových vodičů. Pouze to bude mít vliv na generování pořadí čísel, ale pořád je to systametický periodický generátor čísel. nikoli náhodný.

Jednoduchá ukázka praktického použití randomgenerátou, kde záleží na tom, aby opravdu generoval náhodá čísla, je tzv. zasněžení grafické plochy pomocí kreslení pixelu. Pixely se vykreslují např. do obdelníku tak dlouho, až pokryjí celou plochu. Jeho souřadnice X,Y se počítají z randomgenerátoru. Pokud to nejsou opravdu náhodná čísla, tedy nesplňují 4 výše uvedené podmínky, místo zaplnění celé plochy se nakreslí prapodivné obrazce a určitá místa se nikdy nevykreslí.

Nemá smysl uvažovat o funkci y = f(a++) a hledat zázračné algoritmy typu XOR, SWAP, ROL nebo přičítání 53, jak je zde nabízeno, protože funkce má jedinou vnitřní proměnou a, kterou když vynulujeme, bude generovat vždy sejnou poloupnost čísel. Musí obsahovat ještě další patametr, jež se mění nezávisle na chodu MCU, jako je šum ADC, frekvence sítě, frekvence RTC, doba stisknutého tlačítka atd. atd.

blablabla…dej pokoj kazdymu vyhovuje neco a kdyz jsi tak chytrej tak napis programek pro 89c2051 aby se dal použít jako podprogram volaný instrukcí call… no šup šup čekám ty inteligente :wink:

Tak tohle je vrchol arogance jakou bych mohl čekat tak akorát od Ratha. Když už si žádal o pomoc, slušné je poděkovat. Napiš si to sám, práci za tebe dělat nebudu, nebo si to můžeš někde objednat za peníze.

mrkni se na začátek debaty ignorante, já se ptal jestli je instrukce pro 8051 a ne stořádkovej popis jak to vymyslet

Pokud sem si všiml správně, pane ignorante, tak už minimálně 2x sem byl poslán ukázkový kód (navíc tentýž), který je přesně co požaduješ. Rutina volatelná přes call, a psaná v 8051 instrukcích.
S tím nadáváním bych si dával dobrý pozor, komu nadáváš, obzvlášť admini, moderátoři ale i ostatní to nemají rádi!

jsem vinen zastřelte mě :wink:

Tak sa pozri do datasheetu k x51 a ak ju tam najdes, tak tam je a k nie tak nie je.

:imp:

Tu sa ti moze dostat velmi kvalitnych a vycerpavajucich odpovedi s i teoretickym podkladom (ten je na to, aby aplikacii riesenia pytajuci sa aj porozumel, nie iba opapagajoval ho). Je ale celkom mozne, ze davka poznania nad urcitu hranicu moze byt pre niektorych jedincov dusevnemu zdraviu skodliva. Inak si neviem reakciu na Technikov prispevok vysvetlit.

Lebo ak niekto zo vsetkych uvedenych prispevkov NEPOCHOPIL, ze:

  • taka instrukcia nie je,
  • ze “jej” funkcia je nahraditelna generovanim pseudonahodneho cisla (nesplna vsetky Technikove body, ale casto dostacuje)
  • alebo generovanim za pomoci generatora bieleho sumu (splna vsetky podmienky na nahodne cislo)
  • zdrojovy kod pre generovanie pseudonahodneho cisla dostal na tanieri (dokonca ho sam uvadza)

pravdepodobne sa bude jednat o vyskyt tohto vzacneho druhu postihnutia.

kyberbob: Server mcontrollers.com tu je proto, aby vytvořil komunitu lidí se společným zájmem. Nikdo z uživatelů není povinen pro tebe psát programy, za které by jinak dostal dobře zaplaceno. Doporučuji ti se v následující době chovat slušně, protože to jinak budu řešit (BANem, ne kulkou).

já chtěl jen odpověď “ne, takova instrukce neni” :confused: a ne že mi tu nejakej chytrák napiše že moje sčítání dvou čisel je směšný :angry:

Raději téma zamknu, technická část je vyřešena osobní část je off-topic. Kdyby se ještě někdo chtěl vyjádřit k technické části, napište mi prosím PM nebo email a téma odemknu.

:arrow_right: administrator: téma bylo zamčeno