Pic12F675 C sorunu?

Başlatan X-Fi, 22 Temmuz 2009, 20:32:37

X-Fi

Öncelikle herkeze merhaba hi-tech C ye yeni başladım çok garip bir sorunla karşılaştım işin içinden çıkamıyorum

sorunum şu basit bir led yak söndür programı yazdım similasyonda çalışıyor 675 e de yükledim çalışıyor ancak 675 i 3-4 kez daha programladığımda birden pic çalışmaz hale geliyor artik C de hangi kodu derlesem atsam çalışmıyor aynı pic e asm de yazdığım başka bir program atıyorum sorunsuz çalışıyor ama C de yazdığım programlarda bidaha çalışmıyor yeni hiç kullanılmamış 675 aldığımda ilk yüklememde çalışıyor ancak birkaç seferden sonra aynı şey ondada yaşanıyor elimde böyle çalışmıyan 10 tane 675 oldu bozuk değiller çünkü hepside asm programlarda çalışıyorlar böyle bir sorunla karşılaşan oldumu acaba hi-tech derleyicisi 9.65 idi 9.60pl4-pl3-pl2, 9.63 birsürü versiyon değiştirdim kürekledim gene olmadı (8,05pl2 bulamadım) config ayarlarını alabilecek bütün olasılıklarda denedim gene olmadı 675ler çalışmıyor.

denemelerde kullandığım programı paylaşıyorum benimde görmediğim bir hata varsa düzeltin veya bilmediğim bir config ayarımı var bir türlü çözemedim yardımcı olursanız sevinirim
 
#include	<pic.h>
#include	<stdio.h>
#include	"delay.h"


__CONFIG(INTIO & WDTDIS & PROTECT & MCLRDIS & PWRTEN & BOREN ); 


void main(void) 
{
	ANSEL    = 0; 
	CMCON  = 7;
	TRISIO  = 0b00001011;
	OPTION = 0b00000000;
	GPIO=0;  

	#define  led GPIO2

	while (1) {		
		led = !led;
		
		DelayMs(250);
		DelayMs(250);
		DelayMs(250);
		
	}

}


Derleme sonucu:
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

3ddark

__CONFIG(INTIO & UNPROTECT & BORDIS & MCLRDIS & PWRTDIS & WDTDIS)


Bütün sigortaları kapat sadece osilator seçimi ve power up timer açık olsun birde öyle dene. Birde devrede parazit için kondansatör varmı 5V hattında geçen gün benim başıma geldi saçma sapan davrandı işlemci gerçi asm ile çalışıyor diyorsun ama sen yine kondansatör yoksa ekle

BGHIGH bunun ne işe yaradığı bende bilmiyorum.

Yada sigorta sorunu diyorsan yazdığın asm kodu bir winpic800 yada icprog a yükle sigorta ayarlarının nasıl olduğunu gör sonra asm deki ayarları aynen c de uygula.               Kolay gelsin
Yapılacak çok şey var

X-Fi

evet besleme kondansetörleri ve 100n lar var onda sorun yok config ayarlarını asm koddakinin aynısını yüklesemde olmuyor

BGHIGH demişsin bu kısmını anlamadım eklemem gereken bir kod mu acaba halen elimdeki picler hi-tech kodlarda çalışmıyor başka bir arkadaş verdiğim led programını derleyeilirmi derleyicide sorun olduğunu düşünmeye başladım  :?
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

buiba

dahili osilator kullanıyorsan 12f675 lerde ilk aldıgınızda yanı sıfırken fabrıka tarafından bır kalıbrasyon byte'ı bulunuyor buda picin flash belleginin son adresinde tutuluyor,sıfır pici programlamadan once okutun ve son adresteki degeri bır kenara not edın sonra programınızı programcınıza attıktan hemen sonra bu son bayt'a not ettiginiz kalıbrasyon degerını tekrar yazın ve programlayın.eger hassas bır uygulama veya picin hızıyla ılgılı bır sorun varsa bundan kaynaklanabılır.

X-Fi

hassas bir uygulama değil ancak bu baytın silinmesi acaba birdaha picin çalışmamasını sağlarmı hi-tech bu veriyi siliyor olabilirmi acaba bugün işyerinde değilim yarın bunu deniyeceğim ayrıca bu picleri harici osc ilede hiç denemedim onuda deniyeceğim çok teşekkürler
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

Tagli

Benim de bu konuda daha geçenlerde deneyimim oldu ilk kez, 12F675 ile. O değerin korunması programlayıcı yazılıma bağlı. IC-Prog bunu yapıyor, PIC'i programlarken önce okuyor, sonra da "Sen bana 3FFF yaz demişsin ama burada öncesinde 3430 vardı, eski değeri mi tutayım yenisini mi yazayım?" diyor. Eski değeri tutunca sorun kalmıyor. Yine de ne olur ne olmaz bu değeri bir yere kaydetmekte yarar var (her PIC için değer farklı tabi). Bu değer yanlış olursa PIC yine çalışır, ama zaman konusunda biraz kayma olabilir. Zaten başlangıçta ilgili register'da 0 var, assembly'de kod yazarken bu adresten değeri okuyup OSCCAL'a yazmak gerekiyor. Sanki forumda bir yerde okumuştum PicKit2 (veya belki de başka bir programlayıcı idi) bu değerin silinmesi durumunda kalibarasyonu kendisi yapıp bu değeri tekrar oluşturabiliyordu.

Benim anlamadığım bu tür bir kalibrasyona 16F628 veya 18F2550 (ve eminim daha pek çok örneği vardır) gibi PIC'lerde neden ihtiyaç olmuyor? Bunlara daha kaliteli osilatör mü takıyorlar yoksa 12F675'in daha hassas işlerde kullanılabileceğini düşünüp ince ayar imkanı mı vermişler?
Gökçe Tağlıoğlu

X-Fi

sorun çözüldü programlayıcıdan kaynaklanıyormuş osccal ayarını birkaç programlamadan sonra kaybediyor manual olarak ayar yapınca düzeldi



new osc from hex file seçeneği var ama hex dosyasından kalibrasyonu ayarlayamadım

OSCCAL=0xFF;


kodunu ekledim ama olmadı ve pic sanki biraz yavaş çalışıyor gibi geldi bana  bu kalibrasyon ayarını hex dosyasından yüklemek hakkında bilgisi olan varmı?
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

arslan74

Alıntı yapılan: "X_Fi"

OSCCAL=0xFF;


kodunu ekledim ama olmadı ve pic sanki biraz yavaş çalışıyor gibi geldi bana  bu kalibrasyon ayarını hex dosyasından yüklemek hakkında bilgisi olan varmı?

Merhaba,

Bu yaptığın yanlış birşey, OSCCAL değerini sen yüklediğin picden almalısın,kendi kafana göre bir değer girmemelisin. PIC en son adresinde bu bilgi vardır. Normalde programlayıcılar INTOSC modeller yükleme yaparken önce pic'in içindeki OSCCAL değerini alır sonra yüklenecek hex koduna bu değeri yazar öyle programlar.

"keep old OSCCAL" seçersen bu dediğim olayı yapması gerek.


Bu değeri değiştirirsen PIC çalışma hızı tam 4Mhz olmaz ya daha hızlı yada daha yavaş çalışır. Zamana dayalı işlerde programın hatalı çalışır.

Selamlar

ahmet2004

*Tagli*

Alıntı YapPicKit2 (veya belki de başka bir programlayıcı idi) bu değerin silinmesi durumunda kalibarasyonu kendisi yapıp bu değeri tekrar oluşturabiliyordu.

Evet doğru Tagli Pickit2 kalibrasyonu olmayan pic'in içine önce bir program

atıyor sonra bu programı çalıştırıyor osc kalibrasyon değerini buluyor

ve onaylıyor yerine yazıyor.Ama pic'te sorun varsa kalibrasyonu yapamadığını belirtiyor.

İmkanlar dahilinde Microchip'in programlayıcılarına geçmek en mantıklı olanı.

X-Fi

ahmet hocam kullandığım programlayıcıdada bu özellik var önce okuyor eski değeri sonra siliyor sonra o değeri tekrar ekliyor teorik olarak aşşağıdada programlama ekranını screen çektim ancak geliştirme aşamasında olduğum için zırt pırt program atmam gerekiyor ilk sefer sorun yapmasada birkaç programlamadan sonra bu değeri bozuyor demekki kullandığım programlayıcı çok pahalı bir cihaz değil zaten sorun bu yüzden çıktı



arslan hocam keep old seçeneğini seçtiğim zaman pic çalışmıyor sorunun en başına dönüyoruz illede manual ayarlamam lazım hex dosyası içinden bunu yapamazmıyız diye sormuştum datasheetde osccal değerinin 0b111111xx ile 0b000000xx arasında bir değer olması gerektiği yazılı o yüzden osccal FF yükledim hızlı yavaş çalışması şu an için sorun değil pic çalışsın yeterli peki hex file içerisinden bu kalibrasyonu nasıl ayarlayabiliyoruz?
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

arslan74

Alıntı yapılan: "X_Fi"

arslan hocam keep old seçeneğini seçtiğim zaman pic çalışmıyor sorunun en başına dönüyoruz illede manual ayarlamam lazım hex dosyası içinden bunu yapamazmıyız diye sormuştum datasheetde osccal değerinin 0b111111xx ile 0b000000xx arasında bir değer olması gerektiği yazılı o yüzden osccal FF yükledim hızlı yavaş çalışması şu an için sorun değil pic çalışsın yeterli peki hex file içerisinden bu kalibrasyonu nasıl ayarlayabiliyoruz?

Merhaba,

Daha öncede dediğim gibi Hex içersinde bunu yapamassın. Zaten senin kodunda bunu set eden kod yok. main in başına aşağıdaki gibi bir kod eklemelisin.

void
main(void)
{

	OSCCAL = _READ_OSCCAL_DATA();

	GPIO =   0b111111;
	TRISIO = 0b001100;
	
	CMCON = 0x07;		// Disable analog pins on TRISIO.
	ANSEL = 0;


Bu kodu eklersen en son adreste yazılı olan OSCCAL değerini alır ve OSCCAL registerine atar. Eğer daha önceleri programlayacağın pic'i yanlış programladıysan o zaman eklediğimiz bu kod programın çalışmamasına neden olur.

Programlayıcının bu değeri koruyup korumadığını anlamanın çok basit bir yolu var. Programlamadan önce Read yaparsın ve en son adresteki değeri okursun ASM komutu olarak RETLW xx şeklinde bir değer olmalı ve eğer yok ise bu alanı yanlış programlayarak bozmuşsun demektir, o zaman hiç programlanmamış bir PIC'le dene. Sonra kendi kodunu PIC'e yükle ve tekrar okuma yap. Eğer en son adresteki değer değişmemiş ise programlayıcı düzgün çalışıyor demektir. Ama tekrar geri okuyabilmek için programlamadan önce CP yi off yap.

Selamlar