Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

Pic lerde User ID nedir

Başlatan NamTech, 12 Ağustos 2018, 22:23:55

NamTech

Herkese merhabalar,

Pic lerde User ID alanı olduğuna rastladım, konu hakkında bilgi sahibi arkadaşlar açıklama yapabilirler mi?

Bu user id ile her pic e seri numarası verebilir miyim diye merak ediyorum? dolayısı ile eğer yapılabilir ise yolu CCS C'de nasıl olmalıdır?

Herkese işlerinde başarılar.
Kim Ne Derse Desin Alelade Birisi.

Tagli

User ID denilen kısım, gönlünce doldurabileceğin bir boş alan. Ama senin de dediğin gibi, sanırım daha çok seri numarası için düşünülmüş.

MPLAB IPE'nin ayarlarında sisteme bir SQPT dosyası gösterebiliyorsun. Ayrıntılarını hatırlamıyorum ama özünde bu içinde seri numaraları olan bir text dosyası. MPLAB IPE kullanarak arka arkaya programlama yaparken, bu dosyadaki seri numaralarını sırayla User ID alanına (veya tercihe göre başka bir bölgeye) yazabiliyor.

MPLAB IPE içinde SQTP dosyası oluşturma özelliği var. Ama seçenekler sınırlı. Yani orada dosyayı oluşturup sonra yine bu dosyayı MPLAB IPE'ye gösterebilirsin. Bir ara denemiştim. Ama ben seri numaramın özel anlamları olan hanelerden oluşmasını istediğim için SQTP dosyasını oluşturmak için basit bir C kodu yazmıştım. Ve galiba User ID alanına değil de program memory'nin bir yerine gömmüştüm bu değeri. Şimdi net hatırlamıyorum ama galiba SQTP dosyasının içinde seri numaralarının yanı sıra, bunların gömüleceği adres de oluyordu. Dosya formatı .hex koduna benziyor, nasıl çalıştığını anlamak ve C kodunu yazmak için biraz kafa patlattığımı hatırlıyorum.

Seri numarasının User ID veya Program Memory alanında olması arasında pratikte nasıl bir fark var bilmiyorum.
Gökçe Tağlıoğlu

NamTech

Bir kaç programda ileriye dönük kontrol ve başka amaçlarla seri numarası kullandım halende kullanmaya çalışıyorum fakat ana programa gömdüğüm seri numarası her işlemci için tekrar derleme yolundan geçiyor tabi ki buda biraz zahmetli oluyor ve dalgınlığa gelmiyor.
Daha kolay bir yol olabilir mi diye merakımdan araştırma yaparken rastlayınca acaba olabilir mi diye sormak istedim.
Kim Ne Derse Desin Alelade Birisi.

RaMu

User id ile her pic e seri no verilebilir.
MpLap IPE ile yapılabiliyor nette adımları var ama ben denemedim.
Kullandığın ide ve derleyici ile yani direk yazdığın kodun içerisinde bu numara verilebiliyor, MpLab MpLabX için C veya ASM örnekleri nette var, bunuda denemedim,
denemiş olsam adımlarıda yazardım ama zor bir iş değil.
Bir iki kurcalasan halledersin bence.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

Tagli

Alıntı yapılan: NamTech - 12 Ağustos 2018, 22:41:55fakat ana programa gömdüğüm seri numarası her işlemci için tekrar derleme yolundan geçiyor tabi ki buda biraz zahmetli oluyor
MPLAB IPE'ye .hex kodunu ve SQTP dosyasını ayrı ayrı gösteriyorsun. Bu yüzden her seferinde tekrar derleme yapmana gerek kalmıyor. SQTP dosyasındaki değer .hex dosyasının üzerine ekleniyor gibi düşün. Bu yüzden, eğer .hex dosyası ile bir çakışma varsa SQTP dosyasındaki değerler geçerli olur. MPLAB IPE, SQTP dosyasında sıradan gidiyor ve her programlama işleminde bir sonraki numarayı veriyor. Kullandığı numaraları da satırın başına ; koyarak işaretliyor. Yani programlama işlemini tek seferde yapmak zorunda değilsin. Aynı SQTP dosyasını göstermek şartıyla daha sonra kaldığın yerden devam etmek mümkün. Dosyadaki numaralar bittiğinde de "numara kalmadı" gibi bir hata veriyor.
Gökçe Tağlıoğlu

fide

#5
Piclere seri no vermek için başka bir yöntem denedim. Pice yüklenen hex içine borda ait sabit bir ref numarası gömdüm. Bundan sonra hex dosyasını pice yazdım. Bilgisayarda yazdığım programla seri porttan pice bağlanıp bu ref noyu vermesini istedim. Ref noyu alıp buref noya ait sıradaki seri noyu hem pic hafıza yada bağlı eeproma yazdırdım. Hem de bilgisayarda veritabanına yazdım.
Bu şekilde pice verilen seri nolar bilgisayarda veritabanında tutulduğu için çakışma riski de yok. Her hex dosyası için rutin hazırlamaya da.
Aydınlatma için ürün grupları oluşturup her bir ürün grubuna bağımsız ve kendi içinde sıralı id verdim.
Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

baran123

Eğer Flash'ı tamamen doldurmuyorsanız son 4 Byte'a (Sabit adrese) seri no yapabilirsiniz.

Tagli

Ben de ona benzer bir şey yapmıştım. 4 byte olmak zorunda değil. Hatta sonda olmak zorunda da değil ama .hex kodu ile çakışmasını engellemek için en mantıklısı sona koymak. Yine de emin olmak için .hex kodunu kontrol etmekte fayda var.
Gökçe Tağlıoğlu

bulut_01

ccs bu id verme olayı nasıl oluyor?
YENİLMEZ..

baran123

#9
Datasheet okumak yeterli.

Örn PIC16F1827
http://ww1.microchip.com/downloads/en/DeviceDoc/41391D.pdf
Sayfa 47;

"Four memory locations (8000h-8003h) are designated
as ID locations where the user can store checksum or
other code identification numbers. These locations are
readable and writable during normal execution. See
Section 11.5 "User ID, Device ID and Configuration
Word Access" for more information on accessing
these memory locations. For more information on
checksum calculation, see the "PIC16F/LF1826/27
Memory Programming Specification" (DS41390)."

Bahsettiği bölüm Sayfa 111;
"Instead of accessing program memory or EEPROM
data memory, the User ID's, Device ID/Revision ID and
Configuration Words can be accessed when CFGS = 1
in the EECON1 register. This is the region that would
be pointed to by PC<15> = 1, but not all addresses are
accessible. Different access may exist for reads and
writes. Refer to Table 11-2.
When read access is initiated on an address outside
the parameters listed in Table 11-2, the EEDATH:EEDATL
register pair is cleared."

Olayın CCS ile alakası yok sadece bir kaç register erişimi yeterli.
Tabi art arda seri no vermek için @Tagli hocanın dediği gibi olacak.

bulut_01

ccs alakalı demedik bu register erişip id vermeyi ccs nasıl yapacagız  onu sormuştum.
YENİLMEZ..

baran123

Mesela şöyle register erişimi yapılabilir.
Hatam varsa bilgili olan arkadaşlar lütfen uyarsın. Uzun süredir CCS C kullanmıyorum.

#byte TRISB=getenv("SFR:TRISB") 
#bit TRISB0=TRISB.0

Burada bit'e gerek yok. Direk ilgili register'lara verileri yazabilirsiniz.

bulut_01

ben kafama göre id vermek istesem byte satırındaki parantez içindeki sfr yerine mi yazacagım id numarasını?
YENİLMEZ..