Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

RANDOM Sayı üretimi

Başlatan ferit06, 26 Mart 2009, 12:12:07

ferit06

Protonda RANDOM üretme  mantığı nedir?

Ben bir denememde RANDOM sayılar üretmek istedim. Sayıları üretiyor ancak açılıştan itibaren hep aynı sırada sayılar üretiyor.(ISIS da ve gerçek devrede)

Devrede 16F628 kullandım  dahili osilator ile...

Çözüm olarak üretilen sayıya TMR0 değerini üretilen sayının alt ve üst byte larına eklemeyi buldum.

Ama merak ettiğim RANDOM sayı üretmenin mantığı...

Asm veya diğer programlarda da aynımıdır?

Maxim

mantığını bilmiyorum ama hep aynı sıra derken neyi kastediyorsunuz?

denedim ,
gayet random sayılar üretti .

ferit06

Farklı sayılar üretiyor ancak;

gerek ISIS te gerekse de gerçek devrede
her yeniden başlatmadan sonra  ürettiği sayılar hep aynı sırada

örnek: olarak 5+1 için  sayılar üretiyorum
çıkanlar;

11 18 21 23 25 +11
3 4 26 30 32 +5
5 7 12 16 26 +5

bunlar ard arda yapılan seçmeler .. ISIS de çalışan devreyi kapatıp tekrar açtığımda  ve gerçek devrede devreye enerji verip seçmeyi yaptığımda hep aynı sırada yukarıdaki seçilmiş değerleri elde ediyorum.

Herhalde açıklayabilmişimdir.

muhittin_kaplan

Programlamada Rastgale diye bir olay yoktur. Herşey Belirlidir. Değişken olan bir durumu oraya refere etmeniz gerekir. zaman gibi

OG

Forumda random ve seed olarak aratın, önceden çok konuşuldu.

Ben random olarak üretilen sayıyı TMR0'ın anlık değeri ile topluyorum, daha iyi bir rastgelelik elde ediyorum.

Şu an kullanmadığım bir başka yöntem de eepromda sallama bazı degerler saklayıp üretilen random sayıyı bunlarla toplamak/çıkarmak/çarpmak vs.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

ferit06

Ben RANDOM komutu ile rastgele sayı üretiliyor diye biliyordum. Ama bu çalışmada tesadüfen hep aynı sıra ile sayı ürettiğini gördüm. Çözüm olarak TMR0 değeri ile alt byte ve üstbyte ları toplamış idim( TMR0 ı sıra ile iki ayrı değişkene aktarma suretiyle) ancak ikisi arasındaki sayı farkı hep 2 olarak kaldığından TMR1 değişkeni ile RANDOM fonksiyonunun ürettiği sayıyı toplayarak rastgele sayı üretebildiğime inanıyorum.

İlginize teşekkür ederim.

Ama yine de hala RANDOM fonksiyonu tüm dillerde aynı şekilde mi çalışıyor merak ediyorum. Eğer öyle ise "BİLGİSAYAR İLE KURA ÇEKTİK" ifadesi ne kadar doğru bundan şüpheleniyorum

Random ve seed için forumda arama yapmayı beceremedim...

Tagli

Sanırım bu işlem için İngilizce olarak "Pseudo-Random" deniyor. Yani gerçek anlamda rasgele değil. Tahminimce PIC'ler timer'lardan birinden aldıkları değeri matematiksel bir işlemden geçirip rasgele sayı elde ediyorlar. Yani aslında elde edilen sayıyı bir timer değeri ile işleme sokmak da pek birşey değiştirmeyecektir, özellikle de derleyicinin kaynak olarak kullandığı timer ile kullanıcının kullandığı timer aynı ise. Ama farklı olmaları durumunda bu sayı dizisinin uzunluğu ciddi ölçüde uzayacaktır. Tahminimce dizi timer'ların alabileceği değerlerin sayısı kadar uzun olacaktır. Yani 8 bit bir timer ile dizi 256 uzunluğunda olur.

Bilgisayarlardaki durum biraz daha farklı. Bilgisayarlarda genelde 01.01.1970'ten beri geçen milisaniye değeri üzerinde bir işlem yapılır. Bu sayı büyük olduğu için sanırım PIC'lerde bu yöntem kullanılmıyor (zaten bu sayının hesabı da ayrı bir dert olurdu PIC için).

PIC'te de yine aynı tarih - saat mantığından gidilerek, RTC (DS1307 gibi mesela) kullanılan bir devrede tarih - saat değeri ve belki bir kaç tane de timer'dan türetilmiş ifade karıştırılarak oldukça rasgele sayılar üretilebilir.
Gökçe Tağlıoğlu

ferit06

Son yapmış olduğum işlem ile benim işimi görebilecek rastgele sayılar üretebiliyorum.

SEED komutu ile RANDOM kullanımında ise

SEED ile  $0345 başlangıç değeri alınarak RANDOM sayı üretildiğini Help dosyasında gördüm ama bu komutlar ile kullanım yapmadım.

Önceki mesajlarımda da belirttiğim gibi RANDOM pice enerji verildikten sonra ürettirilen rastgele sayıların her açılışta aynı olmasına neden oluyor.
Büyük ihtmal ile SEED komutu Kullanınca da aynı tip sayılar üretilecek. Başlangıç değeri aynı oldu için.

Bilgisayarlarda uygulamanın değişik olması içimi rahallattı...

mech

aynı problemi ben her üretilen sayıyı eeproma kaydedip, ilk açılışta bunu okuyup seed yaparak hallettim
Bilginin Efendisi Olmak İçin Çalışmanın Kölesi Olmak Şarttır