Haberler:

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

Ana Menü

Manufacturer Kodu??

Başlatan X-Fi, 03 Mart 2009, 10:39:12

X-Fi

Arkadaşlar yazdığım programda pice random bir ID vermek istiyorum bu kodu kendim girmek yerine picin içindeki manufacturer kodunu kullanmak istiyorum C de bu konu okumanın bi yolu var ama ben asm de bulamadım deneyimli arkadaşlar hangi register da tutulduğunu ve nasıl okuyabileceğim hakkında bir örnek gösterebilirseniz çok sevinirim  :oops:
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

Tagli

Söz konusu PIC'in modeli nedir? Konu hakkında pek bilgim yok ama bildiğim kadarıyla bahsettiğin bilgi program hafızasında saklanıyor, yani doğrudan ulaşılabilir bir yerde değil. Belki kendi program hafızasını okuma yeteneğine sahip modellerde bu veriye erişmek mümkün olabilir. Aksi taktirde bu bilgiye ancak harici bir programlayıcı ile erişilebilir (gerçi bu bilgisayar gerekeceği anlamına gelmez).
Gökçe Tağlıoğlu

X-Fi

taglı hocam ilgin için teşekkürler pic16F628 kullanıyorum C de bu 28 bitlik kodu okuyabiliyorum ama programı asm de yazdığım için nasıl okutulduğunu keşfedemedim bu forumda pic16f84 üzerine yazılmış bir program gördüm bazı register adreslerini define satırında MCODE_0,1,2,3 olarak tanıtmış kod aynen şöyle acaba pic16f628 üzerinde bu kodun kayıtlı olduğu adresi bilen vamı datasheet e baktım ordada bulamadım başlığa 50 kişi bakmış kimsenin yorum bile yapmaması garip geldi bana ben acemiyim ustalarımdan yardım bekliyorum bunda yanlış bişey yokdur umarım

;========================================================================================
; MODIFYABLE PROGRAMMING DEFINE
;========================================================================================

#DEFINE KEY_METHOD 1            ; MUST BE 1 IF NORMAL KEY GENERATION METHOD TO BE USED
                                ; MUST BE 0 IF SIMPLE KEY GENERATION METHOD TO BE USED
                                ; (ENCRYPTION KEY= MANUFACTURER KEY)

#DEFINE HCS30X  1               ; MUST BE 1 IF PROGRAMMING HCS300-301,
                                ; MUST BE 0 IF PROGRAMMING HCS200

#DEFINE MCODE_0 0xCDEF          ; MANUFACTURER CODE, LSWORD
#DEFINE MCODE_1 0x89AB
#DEFINE MCODE_2 0x4567
#DEFINE MCODE_3 0x0123          ; MSWORD

#DEFINE SYNC    0X0000          ; SYNCRONOUS COUNTER

#DEFINE SEED_0  0x0000          ; 2 WORD SEED VALUE
#DEFINE SEED_1  0x0000 
#DEFINE ENV_KEY 0x0000          ; ENVELOPE KEY                  ( NOT USED FOR HCS200)
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

arslan74

Alıntı yapılan: "X_Fi"Arkadaşlar yazdığım programda pice random bir ID vermek istiyorum bu kodu kendim girmek yerine picin içindeki manufacturer kodunu kullanmak istiyorum C de bu konu okumanın bi yolu var ama ben asm de bulamadım deneyimli arkadaşlar hangi register da tutulduğunu ve nasıl okuyabileceğim hakkında bir örnek gösterebilirseniz çok sevinirim  :oops:

Merhaba,

Kast ettiğin "Unique ID" vermek ise. C ile bir alakası yok, hatta yapmak istediğin de C ile alakası yok. C işin yazılımsal kısmı gercek dünya ile doğrudan ilişkili değil. Gercek dünya ile doğrudan ilişkisi PIC'e yüklendikten ve çalıştırıldıktan sonra başliyor. O zamanda zaten bir ID vermiş oluyor.

Eğer Sen yükleme esnasinda özel bir alanda olan ID numarasını her defasında farklı yüklemek istiyorsan bunu yapabilen bir programlayıcıya ihtiyacın var. Bu kısım kodla ilgili değil. Bazi programlıyıcıların öyle desteği var. Mesela Galep gibi, yanlış hatırlamiyorsam EPIC'de de o özellik olması lazım.

Random sayı, rastgele üretilen herhangi bir sayı demektir. Rastgele üretildiği için hangi sayının geleceği bilmiyor, aynı sayıyın rastgelme olasılığıda var. Bu durumda aynı ID ye sahib bir başka chip olabilir. Ama "Unique ID" adi üzerinde anlaşılacağı gibi tek bir sayıyı ifade eder ve aynı koddan bir başka chip yoktur.

Selamlar

X-Fi

arslan hocam merhaba ben CCS dilinde yazıyorum o kodu programda veriyor olabilir bilemiyorum arka planda neler oluyor, ancak eğer anladığım doğruysa senin dediğine göre hex in oluşturulma tarihini, tekrarlanması zor bir manufacturer kodu gibi bilgileri pic e derleyici yazıyor olmalı çünkü ben bunları CSS de kullanıyorum

benim isteğim şu yönde sizinde dediğiniz gibi rastgele yani tekrarlanması milyonda milyarda bir gibi bi kod bulmam lazım(bu güvenlik yeterli bana) ve her pic için ayrı ayrı hex oluşturmak zorunda kalmıyım istiyorum yani tek bir hex oluşturayım her attığım pic kendi kodunu yüklesin bu mümkünmüdür Unique ID dediğiniz kod ile bunu yapabilirmiyim peki bu kodu nasıl okuyup kullanabilirim?
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

arslan74

Alıntı yapılan: "X_Fi"arslan hocam merhaba ben CCS dilinde yazıyorum o kodu programda veriyor olabilir bilemiyorum arka planda neler oluyor, ancak eğer anladığım doğruysa senin dediğine göre hex in oluşturulma tarihini, tekrarlanması zor bir manufacturer kodu gibi bilgileri pic e derleyici yazıyor olmalı çünkü ben bunları CSS de kullanıyorum

benim isteğim şu yönde sizinde dediğiniz gibi rastgele yani tekrarlanması milyonda milyarda bir gibi bi kod bulmam lazım(bu güvenlik yeterli bana) ve her pic için ayrı ayrı hex oluşturmak zorunda kalmıyım istiyorum yani tek bir hex oluşturayım her attığım pic kendi kodunu yüklesin bu mümkünmüdür Unique ID dediğiniz kod ile bunu yapabilirmiyim peki bu kodu nasıl okuyup kullanabilirim?

Merhaba,

Siz ne kadar zamandır kod yaziyorsunuz bilemiyorum. Ama size şöyle bir soru sorayım. Senin kullandiğin derleyici Adi her ne olursa olsun. Nihayetinde Hex kod üretecek. Bu hex kodundan sadece bir tane var. Programlarken de sen bütün pic lere aynı kodu atacaksin. CCS farklı id verebilmesi için tekrar derlemesi lazım. O zamandan sen her işlemci için yeniden derleme yapman demektirki, bu iş programlarken ID bilgisini elle girmekten daha zahmetli yapar. Kaldı ki bunu bir başkası yüklemesinin yapması gerektiğinde nasıl olacak?

Oluşan tek dosyayı her pic yüklediğinde, her pic nasıl kendine bir başka pic benzemeyen id alacak. Mutlaka kendisine bir yerden referans alması gerek. Onuda gelişmiş donanıma veya özelliklere sahib bir Pic yapabilir. Mesela içinde veya harici bir RTC sahib bir pic olabilir. Zaman süresi değişeceği için bu zaman bilgisinden üreteceği random sayida farklı olacaktır. Ancak öyle yapabilirsin.

Yada sana önerdiğim yöntemlede yapabilirsin.

Selamlar

X-Fi

kusuruma bakmayın acemi sayılırım daha 2 yıla yakın zamandır programlamayla uğraşıyorum udea nın modüllerini kullanıyorum programlarımı bunun üzerine yazmaktayım sorunu zaten anlamışsınız ben sabit bir hex oluşturmalıyım ve montaj elemanının bile program atabilmesi lazım çünkü bazen yüzlerce pice yükleme yapmak gerekebiliyor hepsine tek tek ID gir derle yükle başa dert olacaktır hex dosyasını sabit tutacağımıza göre değişken sayıyı pic de aramak lazım manufacturer kodu da burdan çıktı kimisi yapılabilir diyor kimisi yapılamaz CCS de bu kodun bulunduğunu biliyorum çünkü serdar çiçek kitabında bu programlama tarihi ve üretici koduyla ilgili örnek yayınlamış büyük ihtimalle derleme esnasında üretilen bi koddu buda kodun değişmesi için tekrar derleme kapısına çıkar yine olmadı...

dijital çalışan bir sistemde random oluşturmak ne zormuş hakketten dışardan baz alacağım bir analog değerde yok ona göre açılışda bir kereye mahsus hesaplatsam diye düşünüyorum ama yok biri çıkıp deseki manufacturer kodu var pic in içinde rahatlıcam bu işin kesin çözümü olmalı bence hala yardım bekliyorum?
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

Tagli

Bildiğim kadarıyla büyük çaplı işlerde Microchip firmasına program veriliyor ve onlar istenilen sayıda PIC'i programı yüklenmiş ve her birinde farklı Device ID olacak şekilde teslim ediyorlar. Gerçi buna gerek olacağını sanmıyorum.  @arslan74 hocamızın da dediği gibi bazı programlayıcı programlar (ben kullanmadım ama galiba winpic 800'de vardı sanki) her programlamada bu sayıyı bir arttırıp ona göre işlem yapıyorlar. Yani kod olarak yapılacak bir iş değil, kodla yapılan bir işte ortaya bir adet hex dosyası çıkar.

Bir diğer mesele de bu ID'nin nerede kullanılacağı. Açıkçası bu konudaki bilgilerim pek net değil, program hafızasını okuyabilen PIC'ler Device ID alanına erişebiliyor mu bilmiyorum. Ama zaten 16F628'in böyle bir özelliği yok. Yani bu alanda bulunan bir ID program tarafından kullanılamaz, ancak programlayıcı tarafından okunabilir. Program tarafından kullanılabilmesi için söz konusu değerin Data EEPROM denilen alanda olması gerekir.

Belki sorun bu ID'yi Data EEPROM'da saklayarak ve özel bir programlama yazılımı kullanılarak çözülebilir. Veya basit bir program girdi olarak bir hex dosyası alır ve bundaki EEPROM'la ilgili kısmı 1 arttırıp dosyayı güncelleyebilir. Böyle bir programı yazmak zor olmasa gerek, sadece hex dosyası biçiminin iyi bilinmesi gerekir, ki bu internetten kolaylıkla bulunabilecek bir bilgi.

Bu arada, PIC'in kendi içinde iyi kötü rasgele bir sayı üretmesi timer'lar ile sağlanabilir. Mesela bir düğmeye basıldığında timer'ın o anki değeri alınır ve ona göre işlem yapılabilir, örneğin 16 bitlik bir timer değeri ID olur.
Gökçe Tağlıoğlu

X-Fi

taglı hocam bir arttırma metodunu düşündüm ama her pic bir arttıracağı için bütün ID ler aynı çıkacak sorun orda zaten timer rasgele üretebilir ama dışarıdan butona benim basmam gerekecek bunu şöyle düşündüm bu cihaz zaten el terminali olarak dizayn ediliyor montajdan sonra ilk enerji aldığında bir kereliğine herhangi bi butonun basılmasını bekliyeceğim ilk basışda ID yi belirleyip EEprom a yazıp ana programa başlamasını sağlıyabilirim...

bunu deneyeceğim teşekkürler...  :idea:
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

X-Fi

tamamdır sorunu çözdüm taglı hocamın dediği gibi yaptım ama timer ları kullanmadım programsal olarak yazdım iki tane değişkeni bilindik zaman gecikmesi metoduyla saydırıp butonları test ediyorum butona basıldığında döngüden çıkıp say,1,2 yi eproma yazıyorum sabahdan beri pek çok kez test ettim her seferinde ayrı bi kod el de ettim döngü 1 sn de tamamen kendini sıfırlıyor buda 1 sn içerisinde 65536 olasılık demek tekrarlanması yeterince zor ve bana yeterli herkeze teşekkür ediyorum

;-----------------------------------
ID_BELIRLE
	MOVLW h'FF'
	MOVWF SAY1
DONGU7
	MOVLW h'FF'
	MOVWF SAY2
DONGU6
   CALL      TEST     ; BUTONLARI TEST ET 
	DECFSZ SAY2,F
	GOTO DONGU6
	DECFSZ SAY1,F
	GOTO DONGU7
	GOTO  ID_BELIRLE
;-----------------------------------
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)