12f675 pause sorunu

Başlatan veli, 24 Ağustos 2018, 12:48:57

veli

merhaba arkadaşlar 12f675 ile yaptığım devrede süre tutmuyor 45 saniye motorun calişmasını istiyorum 41 saniyede kapanıyor 1 saat beklemesini istiyorum daha erken çalışıyor ama isiste süreler tutuyor dahili osc yi kullanıyorum harivi kullansam sorun düzelirmi?

@ __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _MCLRE_OFF & _CP_OFF

DEFINE OSC 4
TRISIO=%000000

CMCON=7 
ANSEL=0

GPIO=0
SYMBOL ROLE=GPIO.0
I VAR WORD
I=0
BASLA:

HIGH ROLE
PAUSE 45000
LOW ROLE
FOR i=1 TO 7200
PAUSE 500 
NEXT



GOTO BASLA
END


F®T

@ __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_OFF
DEFINE OSC 4
DEFINE OSCCAL_1K 1  'bu komut mutlaka olacak OSCCAL değerini yeniden pice yazdırıyor

Bu şekil bir düzenleme yaparak denermisin.Osccal değerini vermediğin için osc frekansı tam istenilen değerde oluşmuyor olabilir.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

veli

Teşekkür ederim kardeşim deneyeceğim

veli

kardeşim denedim fakat bu sefer devrede tık yok hiç çalışmıyor eski kodu yüklediğimde çalışıyor :'(

@ __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_OFF

DEFINE OSC 4
DEFINE OSCCAL_1K 1
TRISIO=%000000

CMCON=7 
ANSEL=0 

GPIO=0
SYMBOL ROLE=GPIO.0
I VAR WORD
I=0
BASLA:
HIGH ROLE
PAUSE 45000
LOW ROLE
FOR i=1 TO 7200
PAUSE 500 
NEXT

GOTO BASLA
END

ete

Aslında bu söylediklerin hiç mantığa sığacak şeyler değil. Bir istisna hariç. 12F675 işlemcisinde dahili osilatör kalibrasyon değeri vardır ve bun fabrikasında test edilerek işlemcinin program hafızasının son adresine yazılır. İşlemcide bu adresten bu değeri okur ve dehili osilatörünü bu şekilde 4.000.000 Hz olacak şekilde kalibre eder. Son adreste (3F38 veya 3F43 gibi değerler) yer alan bu kalibrasyon değeri normalde işlemci programlanırken rayaüz programı tarafından önce okunur ve programlama esnasında yeniden aynı yere yazılır. İşlemciyi durduk yere silerseniz bu değerde silinir ve orada 3FFF gibi bir değer yer alır. Böylece işlemci yeni program çalıştırdığında işlemciyi verilen OSC değerinde çalıştıramaz ve sorunlar ortaya çıkar. Genelde çok yavaş çalışır dahili osilatör.
DEFINE OSCCAL_1K 1  'bu komut mutlaka olacak OSCCAL değerini yeniden pice yazdırıyor
komut satırı bu değerin okunup tekrar yerine yazılmasını sağlar. Ama daha önceden silinmiş bir işlemcide yerine yazılacak değerde siindiğinden kalibrasyon bozulmuş olur.
Sorunun çözümü için,
- ya yeni bir işlemci kullanacaksın
- ya kendin kalibrasyon yapacaksın
- yada Pickit2 programlayıcı ara yüzünde yer alan bir seçenek ile OSCCAL değerini yeniden hesaplattırıp yerine yazdıracaksın.
Kullandığın programlayıcı Pickit2 değil ise ve illaki bu bozuk işlemciyi adam edip kullanayım diyor isen kendin kalibrasyon yapmalısın.
Bunun için kısa bir program yazmak ve birde Frekansmetren olması gerekir. Bunlar var ise program konusunda yardımcı olurum.

Sonuç olarak işlemcide son adreste yer alan OSCCAL değerin silinmiş muhtemelen ve işlemcin yanlı osilatör değeri ile çalışıyor.
DEFINE OSCCAL_1K 1    komut satırı 12F675 işlemci programında mutlaka yer almalıdır. Bu sayede OSCCAL değerin okunup tekrar yerine yazdırılır değilse yazdırılmaz. Gerçi bazı programlayıcı arayüz programları bunu otomatik yapıyormuş öyle duydum.

Ete

veli

evet ete hocam dediğin gibi entegreyi değiştirdim süre tutuyor en azından 45 saniyelik bölüm teşekkür ederim
peki ne yaptımda bozuldu anlamadım yani yazmışsın aslında ama DEFINE OSCCAL_1K 1 komutunu ilk programı atarken yazmadığımdanmı gitti entegre

ete


veli

tamamdır çok teşekkür ederim

Powered by EzPortal