microcontroller ve random numbers

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

Erhan YILMAZ

Alıntı yapılan: Karamel - 30 Ağustos 2014, 00:15:35
pic18 microcontrollerlarda stm arm mcularda oldugu gibi her pic icin ozel olan bir id numarasi varmi?

Sonradan yeni seri mikrolar çıkarmadıysa yok diye hatırlıyorum. Varsa da kılavuzunda yazar. Zaten çıkarsaydı microchip bangır bangır reklamını yapardı.

Tagli

Alıntı Yaptimerla, fonksiyonla filan yontem uydurulmaz, uydurulursada rastgele olmaz.
Yalancı-rastgele (pseudo-random) olur ama. Çoğu uygulamada bu yeterli olur. Algoritma için gereken başlangıç (seed) değeri timer veya boşta bırakılmış bacaktan alınan A/D dönüşümü ile falan elde edilebilir.
Gökçe Tağlıoğlu

OG

ADC gibi destekleriniz yok ise ilk seed siz olmak zorundasınız.
Ben pic eeprom'unu kullanıyorum.

ilgili eeprom alanı 3 byte, 2 byte ı seed için ( adres 1 ve 2 olsun ), 1 byte ı ( adres 3 olsun ) ilk işlem yapılıp yapılmadığını sorgulamak için
Cihaz enerjilenince adres 3 e bakıyorum, burası boş ise cihaza ilk defa enerji verildiğini anlıyorum.

Cihaz butonlu bir şey ise,
Ve cihaza ilk defa enerji veriliyor ise herhangi bir buton basılasıya kadar 16 bit lik timer çalıştırıyorum, yoksa 8 bitlik timer.
Butonun birisine basıldığı anda timer değerini alıyorum ve adres 1 ve 2 ye kaydediyorum. 8 bitlik timer ise kendisi ile çarpıp 16 bite çevirmiş oluyorum. Adres 3 e de bir değer yerleştirip ilk işlem yapıldığını işaretlemiş oluyorum.

Cihazda buton falan yok ise
programlama anında adres 1 e kendim rastgele bir değer yazıyorum. Çok sayıda programlama için bu biraz zor oluyor.

Normal çalışma;
Cihaz çalıştığında adres 1 e bakıyor, oradaki değer kadar ms bekliyor, bekleme sonunda TMR0 okunuyor. Elde edilen değer adres 1 ve 2 ile çorba bir şekilde karıştırılıyor (çarp böl çıkar gibi) sonuç tekrar adres 1 ve 2 ye yazılıyor. Her enerjilenmede bekleme ve çorba değer olan bu değerler değişmiş oluyor.

Sonra uygun bir şekilde bu değeri seed olarak kullanıyorum. Random komutu ile elde edilen değeri de TMR şartları uygun yani mümkün ise her zaman 8 bitlik veya 16bitlik TMR ile yine çorba şekilde mix ediyorum.

Bu yöntem işe yarıyor.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

mufitsozen

 :)
Alıntı yapılan: Tagli - 30 Ağustos 2014, 09:37:19
Yalancı-rastgele (pseudo-random) olur ama. Çoğu uygulamada bu yeterli olur. Algoritma için gereken başlangıç (seed) değeri timer veya boşta bırakılmış bacaktan alınan A/D dönüşümü ile falan elde edilebilir.

burada anahtar  "Çoğu uygulamada bu yeterli olur"!  :)

Burdan sonra tartisma "benim cogum senin cogunu dover"e gider. Sadece bir sonraki degerin ne olacaginin predict edilememesidir "randomness" deyip Ben olsam ornegin kripto uygulamalarinda PNG kullanmazdim diyeyim, sizde ama SSLde kullaniyorum bir problemde cikmadi deyin filan derken birde bakmisiz OG ikimizinde kulagini cekene kadar "uzun ince bir yoldayiz ..."  :P
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

OG

Üstad, ayıbettiniz ve mahçup ettiniz  :o
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

Karamel

hocam timer ile yapilan random number lar ongorulebilir hatta hesaplanabilir. butonunuza bir mcu baglayip bu mcu nun da herhangi bir timer ini kullanip her ilk enerjilendirilme sonrasında hep ayni anda butona basarim ve hep ayni kodu yada o koda cok yakin kodlari urettiririm. aktivasyon meseleleri icin bu tarz yontemler mufit hocamin dedigi gibi yanlis. Erhan yilmaz in yontemi hesaplanamaz ve ongorulemez. yanliz bunu pic ile yapmayi denemek lazim. ben pic mcu ile ilk kez calistigimdan konuya pek hakim degilim. keske pic mcularin icersinde armlarda oldugu gibi her mcu icin ozel bir bir id numarasi olsaydi. ben konuyu daha farkli bir amac icin acmistim ama bu konudan cok sey ogrendim. Erhan ve Mufit hocama cok tesekkur ederim.  ::)

mufitsozen

#21
Alıntı yapılan: OG - 30 Ağustos 2014, 15:01:16
Üstad, ayıbettiniz ve mahçup ettiniz  :o

hocam maksadim sizi uzmek yada mahcup etmek değil, sadece sizdeki o kizilcik sopasi varya degdigi yeri yakiyor, dikkat edelimde polemige girmeyelim diye yazmistim.

Kusuruma bakmayin, fazla dusunmeden yazdim, malum sicak hava nem yuksek .. ozur dilerim.
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

OG

Estağfirullah ağa, teknik polemiklerden bana ne.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

tekosis

Arkadaslar bir önceki sayfada anlatmıştım kondansatör tekniği fikrimi. Sizce bunun uygulanabilirligi nedir?
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

hasankara

og hocanın yazdıklarını ayrıntılı okumasamda rastgelelik yok gibi geldi bana. belki şöyle olur eeproma veri yazıp okuma süresinden yola çıkılabilinir.

1. timer 0la 2. eeproma veri yaz 3. veri yazma bitince timer oku 4. okuduğun deger tek ise, sonuç değişkeninin ilk bitini set et değilse temizle ...

şeklinde for döngüsü içerisine alıp, atıyorum for u 8 kez döndürerek 1 byte uzunluğunda rastgele sayı elde edilebilir. dahili rc osilatör fikri daha güzel gibi eeprom la yapılan işleme göre daha hızlı olur. fiziksel pine bağlanan kondansatör de anlamlı ve hızlı sonuç verebilecek çözümlerden bir tanesi. bilinmesi gereken anahtar nokta rastgele elde edilebilecek 1 bit olmasının, istenilen uzunlukta rastgele sayı elde etmede yeterli olacağını görebilmek diye düşünüyorum. en sağlıklısı da 1 bitten yola çıkılarak kurulan algoritmalar olabilir. ucu boş bırakılan adc den okunan rastgele 10 bitlik tek sonucu, 10 bitlik rastgele sayı olarak kabul etmenin oluşturabilecek sorunları sanırım anlamakta güçlük çekmeyiz. 10 kez okunan adc değerinin sadece ilk bitlerinden beslenerek, elde edilebilinecek tüm sonuçların 1/(2^10) ihtimal ile gelme olasılıklarının  eşitliğine güvenebiliriz.

Erhan YILMAZ

Alıntı yapılan: Karamel - 30 Ağustos 2014, 16:15:09
hocam timer ile yapilan random number lar ongorulebilir hatta hesaplanabilir. butonunuza bir mcu baglayip bu mcu nun da herhangi bir timer ini kullanip her ilk enerjilendirilme sonrasında hep ayni anda butona basarim ve hep ayni kodu yada o koda cok yakin kodlari urettiririm. aktivasyon meseleleri icin bu tarz yontemler mufit hocamin dedigi gibi yanlis. Erhan yilmaz in yontemi hesaplanamaz ve ongorulemez. yanliz bunu pic ile yapmayi denemek lazim. ben pic mcu ile ilk kez calistigimdan konuya pek hakim değilim. keske pic mcularin icersinde armlarda oldugu gibi her mcu icin ozel bir bir id numarasi olsaydi. ben konuyu daha farkli bir amac icin acmistim ama bu konudan cok sey ogrendim. Erhan ve Mufit hocama cok tesekkur ederim.  ::)

Rica ederim faydalı olduysa ne mutlu. Benim yöntemim değil yalnız TI'in yöntemi :) Msp430ların özelliğine göre böyle bir yöntem geliştirmişler. Diğer mikrolarda da benzer yöntemler vardır illaki.

Gökhan BEKEN

Eğer hassas(örn. 12 bit) bir termometre sensör varsa, sıcaklıktaki kararsızlığından faydalanılabilir.
Eğer kullanıcının bir butona basması ile sayı üretilecekse, butondaki ani piklerin kararsızlığından faydalanılabilir.
Eğer sırf bu iş için bir devre kurulacaksa, rastgele sayı üretme sırasında bir motor çalıştırılıp, gürültüsünden faydalanılabilir.
Mikrosaniye hassasiyetinde RTC kullanarak o anın benzersiz bir zaman olması da tekrarlanabilirliği azaltıcı bir etken olarak kullanılabilir.

Eğer çok basit ise, daha önceden bilgisayardan ürettiğimiz X tane sayı üretip bunu MCU'da bir diziye yazmak, devre çalşırken, bir döngü ile 0 ila x arasında bir döngü kurularak(veya butona her basılışta) x adet rastgele sayıyı LCD'ye sırasıyla yazdırabilirsiniz. Kullanıcı daha önceden bilmiyor nasıl olsa.
Özel mesaj okumuyorum, lütfen göndermeyin.

mufitsozen

Alıntı yapılan: meftun - 31 Ağustos 2014, 14:30:44
Eğer hassas(örn. 12 bit) bir termometre sensör varsa, sıcaklıktaki kararsızlığından faydalanılabilir.
Eğer kullanıcının bir butona basması ile sayı üretilecekse, butondaki ani piklerin kararsızlığından faydalanılabilir.
Eğer sırf bu iş için bir devre kurulacaksa, rastgele sayı üretme sırasında bir motor çalıştırılıp, gürültüsünden faydalanılabilir.
Mikrosaniye hassasiyetinde RTC kullanarak o anın benzersiz bir zaman olması da tekrarlanabilirliği azaltıcı bir etken olarak kullanılabilir.

Eğer çok basit ise, daha önceden bilgisayardan ürettiğimiz X tane sayı üretip bunu MCU'da bir diziye yazmak, devre çalşırken, bir döngü ile 0 ila x arasında bir döngü kurularak(veya butona her basılışta) x adet rastgele sayıyı LCD'ye sırasıyla yazdırabilirsiniz. Kullanıcı daha önceden bilmiyor nasıl olsa.

bu son konuda microchip ve maxim vb chipler bile yapmis icinde random uid olan(ornegin 32 bit)
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.