PIC18f46K20 hızı nasıl 2 katına çıkıyor??

exjra

Üye
Katılım
9 Tem 2009
Mesajlar
10
Puanları
1
Merhabalar, pic mikrodenetleyiciler ile ilgili çok tuhaf sorunlarla karşılaştım ancak böylesini ilk defa görüyorum .

Bir değişkenim var unsigned int a; şeklinde deklare edildiğinde işlemci 128 MHz hıza çıkıyor. unsigned char a; yaptığımda 64 MHz. Zamanlamayı start delay den anlıyorum tam iki katı oynama var. Söz konusu değişken kesme de kullandığım bir sayaç bu hataya sebep olması mümkün değil. PLL aktif. Dahili 16 MHz osilatör x 4 = 64 MHz de çalışıyorum.

Bu nasıl mümkün olur?
 
Birşey daha farkettim a= b; şeklinde atama yaptığım bir satır var timer1 kesmesi altında. o satırı yoruma çevirince hız 64MHz , yorumu kaldırınca 128 MHz bu nasıl mümkün olur???
 
biyerde pointer kullanıyorsan ve pointera değer atıyorsan, dikkat et değer başka yerlere sızıyordur
 
Pointer kullanmıyorum ancak timer1 i kapattığımda da sorunun düzeldiğini gözlemledim. Tuhaf bir hata var ama tam olarak nerede bulamadım henüz...
 
Bazi extrem drumlarda compilerlar hatali
Kod uretebiliyorlar, bir nevi bug. Ccs nin eski bir versiyonunda bina benzer bir bug vardi ve beni cok ugrastirmisti. Yeni versiyonla ayni kodu derledigimde hic hatasiz calismisti. Anliyorsan compilerin urettigi list obj gibi ara dosyalari kiyasla, ne oluyor belki cozebilirsin
 
çözdüm! ama compiler hatası mı yoksa pic mikrodenetleyiciler için mimari bir hata / benden kaynaklanan bilgisizlik mi bilemiyorum. şimdi kesme içerisinde;

if(xxxbits.TMR1IF)
{
...
xxxbits.TMR1IF = 0;
}

yukarıdaki şekilde kesme altında kontrol ettiğim timer1 bayrağı için yazdığım if bloğunda ... bölgesinde fazladan 1 satır kod yazsam ( kodun ne yaptığı pek önemli değil) pic sapıtıyor. Hem de öyle bir sapıtma ki çalışma frekansı 2 katına çıkıyor (128 MHz). Sildiğimde düzeliyor. Bu durumda sorun kesme fonksiyonunun bellekteki uzunluğundan kaynaklanıyor gibiydi. Denemek için kesmeyi pic in HighPriorityInterrupt adresinden asm koduyla farklı bir adrese dallandırdım (örnek kod veremiyorum). Sorun çözüldü. Yani kesme alt programının uzunluğu ya da global alanda tanımladığım herhangi bir değişkenin boyutu (char:8bit unigned char: 16bit) pic in çalışmasını etkiledi. Mantık yürütebileceğim bir tepki verseydi sorun daha kolay çözülebilirdi ama neden tepkisi osilatör frekansının artması olduğuna dair hiçbir fikrim yok. Neyse ki sonuç olarak sorunu hallettim ama böyle sorunlar beni tedirgin ediyor. Yani ne algoritma hatası ne de matematiksel bir hata. Sebep - tepki - çözüm hepsi sanıyorum ki tamamen pic mimarisi ile alakalı. Belki de c18 compiler lite ile ilgilidir. microchip e yazmayı düşünüyorum daha önce benzer bir problem yaşayan oldu mu?
 
HI_TECH c kullandığım zamanda boyle birsey basima gelmisti. Yeni versiyonu yuklediğimde aynı kod normal çalışmıştı.
 

Forum istatistikleri

Konular
128,179
Mesajlar
915,658
Kullanıcılar
449,942
Son üye
Nzmtekin

Yeni konular

Geri
Üst