microcontroller ve random numbers

Başlatan Karamel, 29 Ağustos 2014, 13:40:35

Karamel

merhaba. elimizde en ilkel microcontroller lardan birisinin oldugunu hayal edelim. stmlerdeki gibi random generator u yok. adc si yok. disaridan yardim alabilecegi herhangi bir devre bagli degil. sadece osilatoru ve beslemesi ile minimum calisma sartlarinda sadece calisabiliyor. bu mcu ya random number nasil urettirebiliriz? 


M_B

Merhaba elinizde bulunan bu ilkel mikro kontrollere hangi dilde program yazacaksanız onun o random Komutu (fonksiyonu ) vardır.
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

parda

Selam
Random sayı üretmek ilk bakışta kolay gibi dursada çok zor bir konudur.
Yaptığınız kısıtlamalar ile sadece sonsuz uzunlukta bir sayı tablosu üretebilirsiniz. Her resette tablonun 1. elemanına, yani başa dönersiniz.
Bildiğim tek şey, hiç bir şey bilmediğimdir.

Tagli

Sisteme bağlanan bir şeyler vardır mutlaka. Herhangi bir sensör, seri port falan gibi. Bunlardan gelen veriler seed olarak kullanılabilir. Ayrıca, boşta kalan bacaklar da giriş olarak değerlendirilip buradan da rastgele bitler elde edilebilir. Veya kullanıcı girişi varsa, mesela kullanıcı bir düğmeye bastığı andaki timer değeri seed olabilir.
Gökçe Tağlıoğlu

Erhan YILMAZ

Hangi denetleyici bu? Yoksa hayali mi konuşuyoruz? Adc yok o yok bu yok. En azından bi rc osilatör(wdt) vs. varsa bişeyler yapılabilir.
http://www.ti.com/lit/an/slaa338/slaa338.pdf

Karamel

hocam derleyici yada dil vs yok. beyin firtinasi yapiyoruz sadece. bu arada tagli hocam timer ı referans alma isi mantikli geldi. 16 bit timer 65,536 farkli deger alabilir. hatta varsa 32 bit timer 4,294,967,295 farkli deger alabilir. butona basilarak ayni rakami yakalama olasiligi yok gibi birsey.

M_B

Alıntı Yap16 bit timer 65,536 farkli deger alabilir. hatta varsa 32 bit timer 4,294,967,295 farkli deger alabilir. butona basilarak ayni rakami yakalama olasiligi yok gibi birsey.
En ilkel diyip te sonra böyle açıklama yaparsanız demek ki boşuna kafa yoruyoruz.
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

Karamel

Alıntı yapılan: M_B - 29 Ağustos 2014, 15:24:04
En ilkel diyip te sonra böyle açıklama yaparsanız demek ki boşuna kafa yoruyoruz.

hocam 8 bitlik timer i olan bir mcu ile(mesela16f84) 32bitlik sayim yapilamaz mi?

M_B

Alıntı Yaphocam 8 bitlik timer i olan bir mcu ile(mesela16f84) 32bitlik sayim yapilamaz mi?
Yapılır.
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

tekosis

buton olayı olmadan direk mcu'nun rasgele değer üretmesi isteniyorsa şöyle bir şey geldi aklıma. mcu nun x pini önce çıkış yapılır, bununla bir kondansatör şarj edilir sonra pin giriş yapılır ve paralel bir direnç üzerinden bu kondansatör deşarj edilir. bu kondansatörün voltajı 5V tan 0V'a düşerken geçen süre sayılır. illaki zamanlama birbirine yakın da olsa her zaman aynı olmayacaktır. bu sayede bir sayıcı ile kondansatörün deşarj süresi ölçülür, bu değer de bir denkleme sokularak rastgele bir değer üretilebilir diyorum.
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

Burak B

"... a healthy dose of paranoia leads to better systems." Jack Ganssle

Erhan YILMAZ

İlkel mikrodenetleyici deyince de pek birşey çağrışmadı. Bu arada aynı sayı denk gelmeme ihtimali güzel rasgele sayı üretilir anlamına gelmez. Olasılık teorisi incelemek gerek biraz. Olasılık ve rastlantı değişkenleri diye geçer kapsamlı konudur. Üretilen sayıların(daha doğrusu raslantı değişkenlerinin) dağılım fonksiyonları vardır. Lineer dağılım, gausian dağılım gibi vs. En bilineni lineer dağılımdır. Örneğin rastgele sayı üretecine 1-100 arasında 1000 tane sayı ürettirdik. Her sayının adeti eşit ise bu üreteç lineer dağılıma sahiptir denir ve her değerin gelme olasılığı eşittir yani 1/100. Gausian dağılımda popülerdir. Hepsinin uygulama alanları tercih sebebleri var tam hatırlamıyorum dersten aklımda kalanları yazdım yanlışım olabilir.

Verdiğim bağlantıda msp430 denetleyiciler ile rastgele sayı üretimini anlatıyordu. Msp430larda düşük frekanslı dahili rc osilatör ile sistem ana osilatörünü kullanarak rastgele sayı üretimi yapılmış. Düşük frekanslı osilatörün 1 periyodu boyunca sistem osilatörünün kaç periyod oluşturduğu sayılıyor. Elde edilen sayı aşağı yukarı sürekli aynı olsada düşük frekanslı rc osilatörün kararsızlığından dolayı sayının tek yada çift olacağı ön görülemez. Buradan rastgelelik elde edilir.
Tekçift durumuna göre her seferinde bir bit rastgele sayı elde edilir. Bu işlem 8,16,32 kere tekrarlanarak istenilen uzunlukta rastgele sayı elde edilir.

Üreteci test etmek için 10bin 20bin kere yada istenilen sayıda rastgele sayılar üretilip sayıların dağılımı incelenebilir.

Karamel

pic18 microcontrollerlarda stm arm mcularda oldugu gibi her pic icin ozel olan bir id numarasi varmi?

iqsuz

hocam benim bildiğim random sayıyı zaten timerin o anki değerini alıp belli algoritmaya göre düzenleyerek oluşturulyor.

mesela sen 1000 ile 2000 arasında bir sayı istiyorsun.benim sayıcım 8 bitlik. 0-255 arası bir değer veriyor.ben aldığım bu ara değeri kafamdan geliştirdiğim bi algoritmayla 1000 ile 2000 arası bi sayıya çeviriyorum.

mufitsozen

Alıntı yapılan: iqsuz - 30 Ağustos 2014, 00:23:22
hocam benim bildiğim random sayıyı zaten timerin o anki değerini alıp belli algoritmaya göre düzenleyerek oluşturulyor.

mesela sen 1000 ile 2000 arasında bir sayı istiyorsun.benim sayıcım 8 bitlik. 0-255 arası bir değer veriyor.ben aldığım bu ara değeri kafamdan geliştirdiğim bi algoritmayla 1000 ile 2000 arası bi sayıya çeviriyorum.

yanlis biliyorsunuz,

sayin @Erhan Yilmazin yazdiklarini icerigini anlamaya calisarak okuyunuz.

rastgele sayi kumesinin sahip olmasi gereken ozellikler vardir, timerla, fonksiyonla filan yontem uydurulmaz, uydurulursada rastgele olmaz.
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.