Picproje Elektronik Sitesi

DERLEYİCİLER => PICBasic => Konuyu başlatan: dideco - 25 Aralık 2002, 11:51:21

Başlık: PicBasic de random komutu
Gönderen: dideco - 25 Aralık 2002, 11:51:21
Arkadaslar,

İşlemci

(16F84) ile ilk açılışta (reset sonrası) rastgele bir sayı üretmek ve bu sayıyı kullanarak devam etmek istiyorum. Ancak Random(x)

komutu sürekli aynı rakamı üretiyor.

Değişken rastgele rakamlar üretebilmek için ne yapılabilir.  Bu konuda tecrübesi

olan var mı?
Başlık: PicBasic de random komutu
Gönderen: yufuk - 25 Aralık 2002, 12:04:33
eğer mikronun içinde tarih yada saat rutini oluşturursan,

rast gele oluşturulacak sayıyıda bu rutini baz alarak oluşturursan sanırım istediğini elde edebilirsin.
Başlık: PicBasic de random komutu
Gönderen: dideco - 25 Aralık 2002, 16:47:21
16F84'de veya 12x508 serisinde tarih veya saat rutini

olusturmak pek mumkun olmasa gerek?
Başlık: PicBasic de random komutu
Gönderen: yufuk - 25 Aralık 2002, 16:56:17
bu becerine bağlı...
RTC entegreleride işini görebilir.
Başlık: PicBasic de random komutu
Gönderen: showtime - 25 Aralık 2002, 20:43:24
Random komutu ana loop içinde değildir umarım.
Başlık: PicBasic de random komutu
Gönderen: dideco - 26 Aralık 2002, 10:53:44
Yaptığım devrenin çalışmaya ilk başladığında 1 ile 10

saniye arasında rastgele bir süre bekledikten sonra açılmasını ve çalışmasını istiyorum. Bu nedenle random komutu döngü içinde

değil, en başta bir yerlerde...
Başlık: PicBasic de random komutu
Gönderen: yufuk - 26 Aralık 2002, 11:24:14
Bildiğim kadarıyla RC osilatörler pek kararlı çalışmazlar.

Eğer girişlerden birine böyle bir osilatör yapıp bağlarsan ve bunun 1sn'deki pals sayısını ölçersen her seferinde değişik bir rakam

elde etmiş olursun. Bunuda bilimum çarpma bölme işlemlerine sokarak oldukça farklı değerler elde edebilirsin.
Başlık: PicBasic de random komutu
Gönderen: showtime - 29 Aralık 2002, 04:14:26
anladığım kadarıyla random komutun pic resetten sonra

yani çalışmaya başlar başlamaz saı üretecek. eğer öyleyse zaten pic çalışır çalışmaz bir defa sayı üretir. sen de devamlı o değişkene

baktığın için aynı sayıyı görürsün.
yanlış anlamamışımdır umarım
Başlık: PicBasic de random komutu
Gönderen: AlundrA - 29 Aralık 2002, 06:05:54
aklıma şöyle bir fikir geldi pic ilk çalışmaya başladığında

ürettiği sayı kullanılır ve bu sayı eeproma kaydedilir bir dahaki açılışta pic eepromu kontrol eder ve daha önce kaydedilen sayıyı yeni

random sayıyı üretmek için baz alır böylelikle her seferinde yeni bir sayı üretilmiş olur.

sizce işe yararmı böyle bi şey  :)
Başlık: Random komutu
Gönderen: passwordc - 29 Aralık 2002, 13:02:57
"random" komutu her döngüde tekrar

icra edilirse değişik sayılar üretebilirsin. Ama denetleyicinin initialize esnasınsa sadece bir defalık çağırıyorsan değişkeni üretip

birdaha çalışmayacaktır. Eğer belirli zaman aralıklarında değişken üretmesini istiyorsan interrupt kulanabilirsin.
Başlık: PicBasic de random komutu
Gönderen: dideco - 30 Aralık 2002, 18:13:24
İlk açıldığı andan itibaren (reset sonrası) arka arkaya hep

aynı sayıları üretiyor. Bu nedenle ilk üretilen sayını eeprom'a yazmak da bir çözüm değil. Orneğin arka arkaya arada random

ürettiğiniz sayı kadar "pause" verseniz bile hep aynı rakamlar üretiliyor...
Başlık: PicBasic de random komutu
Gönderen: showtime - 30 Aralık 2002, 20:37:09
Dostum şu kodları buraya paste etsene bi bakalım. valla

hayret
Başlık: PicBasic de random komutu
Gönderen: baba - 01 Ocak 2003, 14:27:29
fikir yürütmek ve öneride bulunmak için kodları

görmeliyiz.
Başlık: PicBasic de random komutu
Gönderen: dideco - 02 Ocak 2003, 19:03:37
Programın ilk satırları aşagıdaki gibi:

abc VAR

WORD  'abc degiskenini 16 bit tanımla
random abc         'abc degiskenine random sayı ata
serout ..abc.......  ' abc

degerini seri cıkış olarak bilgisayara gönder


Bu şekilde her reset sonrası random oluşturulan sayı aynı rakam. Her

ne yaparsanız yapın bir sekilde aynı sırayla rakamlar üretiliyor. Örneğin random üretilen sayı kadar süre bekletin ve tekrar sayı

üretin, yine aynı rakam çıkıyor!
Başlık: PicBasic de random komutu
Gönderen: baba - 02 Ocak 2003, 20:23:07
peki o rakam nedir,bunu biliyor muyuz?
belki serout

komutunu yanlış kullanıyor ya da seri protocol hatası yapıyorsan ne olacak.çünkü random komutu bildiğim kadarıyla çalışıyor ve

emin olmak için eve gidince deneyeceğim.
kaynak yazmakta sıkıntın var anlaşılan biraz daha açık olsan belki boşuna

debelenmeyiz gibi geliyor.ne dersin.burada herkesin amacı yardım etmek, ederken de öğrenmek değil mi arkadaşlar.korkmaya gerek

yok.
örneğin include dosyalarında verdiğin "abc" sembolik değişkeni "reserved words"lerden olabilir.değişken adını

değiştirip deneyebilirsin.

tabi kaynak kodu açık yazmadığın için amiral battı oynuyoruz.
özellikle ilgileniyorlar diye

şüpheyle bakmamanı rica ederim.bu bizim başımıza da gelebilirdi diye düşündüğümüz için yardım etmeye çalışıyoruz.
kolay

gelsin.
Başlık: PicBasic de random komutu
Gönderen: byka - 02 Ocak 2003, 22:03:39
sevgili dideco bu yazıyı takip ediyorum gercekten basına

gelen bu mesele bir tecrube olacak ilgilenen herkese artık bizleri daha fazla ezme ver lutfen su codeları da sende bizde rahatlayalım :)


iyi calısmalar
Başlık: PicBasic de random komutu
Gönderen: dideco - 03 Ocak 2003, 12:32:23
Arkadaşlar,

Ben PIC ba sic pro'da ki

"random" komutundan bahsediyorum. Seri iletişim ile ilgili bir problemim yok, çünkü muhtelif defalar PC ile seri iletişimi başarı

ile kullandım.

Benim burada vurgulamak istediğim ve hem bilgilenmek, hem de yardımlaşmak istediğim konu random

komutunun her zaman gerçekten ratgele sayı üretemediği...

Şöyleki: mikro reset olduktan sonra sürekli aynı değişkenleri

kullandığı için sürekli aynı sayı dizisini sözde random (ratgele) gibi çıkarıyor. Oysaki üretilen sayılar dizisi sırası random. Mikro da

hep aynı sürede bu sayıya baktığı için sayı dizisindeki aynı rakam karşıma çıktı.  Ama her zaman aynı sayı ile başladığı için aslında

rastgele bir sayı üretilemiyor.

Bir baska deyişle ihtiyaç suradan doğdu: Mikro ilk enerji verildiğinde 1-10 saniye arasında

rastgele bir süre beklesin ve sonra çalışmaya başlasın. Oysayi taa programın başında random komutu konursa, sürekli aynı sayıyı

ürettiği için aslında ortada rastgelelik kalmıyor.

Internet baglantımın oldugu yer ile çalışmalarımı gerçekleştirdiğim

mekan farklı olduğu için tüm programı ayrıntılarıyla buraya yüklemedim. Ama yazdığım üç satır basic derleyicisi programının ilk

üç satırı. Üretilen rastgele sayının ne olduğunu görmek için de seri iletişim ile PC'ye gönderiyorum. Zaten programın kalan

kısımları - sadece üretilen random sayı ile pause döngüsü dışında-  üretilen random sayı ile ilgili değil.

Denemek isteyen

arkadaşlar birkaç satırlık programı deneyebilirler. Her reset yapışınızda seri porttan ekrana aynı rakamın gönderildiğini

göreceksiniz.

Sanıyorum konuyu ve problemi yeterince açıklayabildim.

Yardımcı olamaya çalışan ve ilgilenen

arkadaşlara teşekkür ediyorum.
Başlık: PicBasic de random komutu
Gönderen: ise - 03 Ocak 2003, 17:57:12
tüm program dillerinde random aynı işler.
misal   c de

bir program
i=rnd();
printf("%s",i);
böyle bir programsda her açmada aynı sonuç alınır basic te aynıdır pascalda

delphide
işlemci değişmezse  sonuç aynı olur  
interruptla yapılırsa ancak sonuç değişir
Başlık: PicBasic de random komutu
Gönderen: AlundrA - 04 Ocak 2003, 09:52:56
iyi ama c'deki  random komutuna bir seed değeri verip her seferinde seed değerine göre değişen bir sayı üretmek mümkün. evet random komutu pseudo (sahte) random değerler üretir çünkü sayılar hernekadar random şekilde gelsede sıraları hep aynı olduğundan aynı anda aynı sayı çıkar ve bu komut bu özelliğinden dolayı aslında faydasız bir komuttur fakat c'deki (ve eminim diğer dillerdede vardır) srand(seed) fonsiyonuyla değişik seed (başlangıç) değerleri verilerek her seferinde değişik bir sıra üretmesi sağlanır aslında bu komutta olaya tam çözüm getirmez ama seed değeri olarak her seferinde farklı olduğu kesin değerler verilirse sonuçta tamamen random olur bunun için en güzel örnek "zaman"dır devre her çalıştığında farklı bir zamanda çalışacağından  seed değeri olarak zaman verildiğinde kesinlikle birbirinden farklı sayılar üretilecektir . fakat picte saat bulunmadığından ben her açılşta bulunan random değerini eeproma kaydederek bir dahaki açılışta bunun seed olarak kullanılmasını teklif etmiştim çok iyi bir çözüm olmasada istenilen amaca ulaşılabileceğini düşünüyorum. dideco arkadaşım pic basicten pek anlamadığım için kesin bişey söyleyemiyorum fakat picbasicte random komutu varsa random seed değeri verebilceğin bir yol mutlaka olmalı çünkü dediğin gibi bu komut bu şekilde hiç bi işe yaramaz  :)
Başlık: PicBasic de random komutu
Gönderen: dideco - 06 Ocak 2003, 11:31:39
AlundrA arkadaşım,

PIC basicde "seed" degeri vermek mumkun değil. Fakat random sayı ürettirmeden önce mikroyu "pause" komutuyla bekletince adeta diğer dillerdeki seed komutu gibi görev görüyor. Yani random sıralı sayı dizisinin farklı bir yerinden sayıyı üretiyor, çıkartıyor.



Arkadaşlar,

Bu durumda benim aklıma gelen çözüm: Programın ileri aşamalarında birtakım dışarıdan rastgele zamanlarda tetiklenen girişler ile rastgele rakam üretmek, üretilen bu rakamı eeproma yazmak, ve açılışta düşündüğüm rastgele bekleme süresini eepromdaki rakamdan yararlanarak belirlemek.

Sonuç olarak, random diye üretilen rakamlar aslında birbiriyle matematiksel ilişkisi olmayan rastgele sayı dizisi... Ama her seferinde aynı rakamlardan oluşan sayı dizisi üretiliyor, bu nedenle de mikrodan "reset" sonrası eğer her seferinde aynı süre sonrası random sayı üretmesi isteniyorsa (random komutuyla) ortaya her seferinde aynı rakamlar çıkıyor. Bu nedenle PIC basicteki random komutunun her seferinde rastgele sayı üretmesini beklememeliyiz. Mikronun eğer xt osilatör ile çalışıyorsa, dış uyaranlar ile tetiklenmeden ürettiği rakamların her zaman rastgele (random) olmasını beklememek gerekiryor, çünkü başka çözümü yok gibi görünüyor.

Diğer arkadaşların da önerdiği gibi bir saat çipi veya RC osilatör kullanmak veya mikronun watchdog timer'ini çalıştıran RC osilatörden faydalanmak da diğer olası çözümler olabilir...

Kodları kimseden saklamıyorum, eğer hala ilgilenen kişiler varsa kendilerine gönderebilirim. Ancak, kodlarda ilgilenecekleri kısım yukarıda verdiğim birkaç satırdan öteye gitmeyecektir.

Benim burada böyle bir tartışma açmaktaki amacım, karşılaştığım bir sorunu hem paylaşmak, hem çözüm bulmak hem de bu tartışmayı okuyan arkadaşların bilgilenmesini sağlamaktı.

Teşekkürler
:)  ;)
Başlık: PicBasic de random komutu
Gönderen: showtime - 09 Ocak 2003, 00:52:09
bu random işini bu hafta sonu ben de deneyeceğim. eğer dediğin gibi ise bi çözüm de benden olabilir:
Timer/counter a rastgele bakmak. zannetmiyorum ama belki olabilir.