Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d

Ana Menü

pic12f675

Başlatan coco, 04 Ocak 2025, 22:09:06

coco

Pıc12f675 ile Led yakıp söndüremiyorum kod mu hatalı  derleyicide mi sorun çözemedim
@ DEVICE_pic12F675_PROTECT_Off         'Kod Protek kapalı
@ DEVICE_pic12F675_MCLR_Off            'MCLR pini kullanılmıyor.
@ DEVICE_pic12F675_INTRC_OSC_CLKOUT    'Dahili osilatör kullanılacak
@ DEVICE_pic12F675_WDT_Off             'Watch Dog timer kapalı
@ DEVICE_pic12F675_PWRT_Off            'Power on timer kapalı 
DEFINE OSC 4
ANSEL = 0               
TRISIO=%000000       
CMCON=7                 
           
BASLA:           
 
GPIO.2=1
pause 100
GPIO.2=0   
pause 100             
                 
GOTO BASLA
 
END]


mg1980

Oscal değerini yazdırmak gerekli.. silindiyse çözümü olmayabilir..

coco

pickit2 ile otomatik yaptım led direk yanıyor

mg1980

Bundan sonrasını Ete hocam bilir..

elektronikhobi

23.satır END] yerine END mi olacak acaba.
"Yirminci asrın akıllara hayret veren keşiflerinden birisi de hiç şüphesiz transistörlerdir."


coco

ic prog ile config bitleri düzenledim çalıştı, MPASM ile doğru config bitler ayarlanmıyor demek ki

mg1980

Sondaki parantez mevcutken derlemesi enteresan..

power20

INTRC_OSC_CLKOUT

ile bir pinden osc frekansı dışarıya verilmiştir

Bu kısmı 

INTRC_OSC_NOCLKOUT

yaparak pin kurtulmuş olur.

Derleyici, End sonrasında yazılan hiç bir şeyi galiba dikkate almıyor 

coco

Denedim
galiba 64bit bilgisayar yüzünden config bitlerini tam olarak doğru derlenemiyor, sorun var
derlediğim hexi icprog ile açtığımda osilatör değeri intOSC GP4 olarak ve diğer config değerlerde çoğu kapalı olmasına rağmen Açık gözüküyor

ete

Pic 12F675 en çok sorun yaşanan işlemcilerden birisidir. Sorun aslında tek tir. Program hafızasının en son adresinde OSCAL değeri yani işlemcinin dahili osilatör ile çalışacağı zaman kullanacağı kalibrasyon değeri kayıtlıdır. Bu kayıtlı değer olmadan dahili osilatör doğru çalışmaz. Yada öyle yavaş çalışırki işlemciniz kilitlendi sanırsınız.
Şayet bu işlemciyi programlarken önce erase(silme) yaparsanız OSC değeriniz silinir. Her programlamada işlemci hafızası yeniden yazıldığı için tedbir almazsanız bu OSCAL değeriniz silinir ve işlemciniz çalışmaz hale gelir.
Basic de alınacak tedbir şudur. Programın başlarında bir yere,
DEFINE OSCCAL_1K 1  'bu komut mutlaka olacak OSCCAL değerini yeniden pice yazdırıyor
satırını eklemenizdir. Bu sayede işlemci programlanmadan yada silinmeden önce son hafızada yer alan OSCAL değeri oradan alınıp progranlamadan sonra yeniden aynı yere yazılır. Böylece işlemciyi kaybetmemiş olursunuz.
Yaşadığınız olay bu sorunu çağrıştırıyor.
OSCAL değeri kaybolmuş işlemcilerde Pickit2 programlayıcı bunu geri getirebilecek seçeneğe sahiptir. Aslında bunu kendinizde yapabilirsiniz. Ama bir frekansmetreniz olması gerekir.
Yapılan iş restgele bir OSCAL değeri ile işlemci çalıştırıp sigorta seçeneklerinden OSC pinlerinden birisinin CLK_Out yapılması ve çıkan frekansın ölçülmesine dayanır. Frekansın 4Mhz'e en yakın olduğu anda OSCAL değerinin sabitlenip tekrar yerine yazılması şeklindedir.
Şimdi yapacağınız işi şöyle açıklayabiliriz.
1. Yukarıda belirtilen Define satını programın baş kısmına ekleyin.
2. Programlayıcınızı açın ve READ komutu ile işlemci içinde kayıtlı programı program yok ise tüm program hafızasını okutun. Hafızanın enson adresine ($3FF)gidip bakın. Orada şayet 3FFF şeklinde bir bilgi kayıtlı ise bu oradaki bilginin kaybolduğunu gösterir. Orada en azında 3FFF değerinden daha küçük bir değer olmalıdır.
3. Şayet OSCAL değeriniz kayboldu ise ve elinizde pickit2 var ise TOOLS menüsünden OSCAL seçip Auto Regenerate seçeneğini seçerek yeniden oluşturmaya çalışın. Başarılı olursanız sorun yok. Olmazsanız Pic'e yüklenecek programı Pickit2 ye yükledikten sonra gidip o son adrese 34FC gibi rastgele bir değer yazın. Enazından bu değer işlemciyi belirli bir hızda çalıştıracak ve programın çalıştığını görebileceksiniz.
Progamı yazdıktan sonra BASLA satırından bir önceki satıra braz gecikme ekleyiniz. Bu gecikme miktarı en azından 200 ms dolayında olsun. Bu sayede ilk açılışta işlemci registerleri ayarlayıp gerekli yerlere yerleştirme zamanı bulacaktır. Aksihalde program rastgele değerlerle çalışmaya başlarkı bu çoğu zaman programın abuk subuk çalışmasına sebep olabilir. Pic işlemcilerde MCLR yani reset pini bulunur. Bu pin reset pini olarak kullanılıyor ise o pine bir pullup direnci bağlanmalıdır. Sigorta ayarlarından MCLR_OFF yapılarak pinin reset özeelliği kapatılabilir. Bu durumda pine bir şey bağlamak gerekmez. Ama sigorta ayarlarından belirli bir ayar vermemek için o satırı kapatırsanız default değerler işin içine girer. Bu nedenle satırları kapatmayınız.

MPASM ile derleme yaptığınızda sigorta ayarlarınız devreye kesin olarak alınır. Alınmadığını hiç gözlemlemedim.

Başkada söylenecek bir şey göremiyorum.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

coco

#10
Bu şekilde düzgün çalıştı ve C içinde PBP doyasının içindeki ilgili INC. dosyasının içideki config değerinin önüne ; gerekliymiş çalışan kod aşağıda
@ __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLR_OFF & _CPD_OFF & _BODEN_OFF & _CP_OFF
DEFINE OSC 4
ANSEL = 0
'CMCON=7 
TRISIO=%000000   
BASLA:           
 
GPIO.2=1
pause 100
GPIO.2=0   
pause 100             
                 
GOTO BASLA
 
END