12f675 oscal

Başlatan kgguler, 27 Aralık 2011, 13:12:26

kgguler

Pic programlamak icin usb programlayıcı kullanıyorum.Yeni bir 12f675 takıp tanı dediğimde oscal  değeri olarak 82,68,100 vb sayılar gösteriyor.Pici programlayıp yeni bir proğram gönderdiğide bu sefer oscal için rakam belirtmiyor.
Hocam sizin bir yazınızda (nerede olduğunu çıkaramadım) proğramda eklenen komut ile oscal değerini kaydettiğini okumuştum.Tekrar bilgilendirir misiniz.

ete

12f675 de fabrikasyon kalibrasyon ayar değeri en son program hafızasına yani 3FF adresine fabrikada yazılıyor.
Pic'e program yazarsanız ve özel bir tedbir almaz iseniz bu adreste yer alan değer otomatikman silinir ve o pic dahili OSC si ile doğru çalışamaz. Bunu önlemek için basic de ;
DEFINE OSCCAL_1K 1  'bu komut mutlaka olacak OSCCAL değerini yeniden pice yazdırıyor
komutu kullanılıyor. Bu komut programcıya gerekli emri vererek en son adresteki kalibrasyon değerinin alınıp pic programlanırken yeniden aynı adrese yazılmasını sağlıyor.

Bazı programlayıcılar bununla ilgili uyarıda bulunuyorlar. Uyarıya dikkat edin ve OSCCAL değerinin yeniden yazılmasını sağlayın.

Ete

kgguler

Hocam ilginiz için teşekkür ederim.Oscal değeri belirsiz pic için nasıl bir sorun ortaya çıkabilir.Örneğin zamanlama ile ilgili komutlar çalışmaz mı.Yada daha kısa veya uzun süre olarak mı çalışır.

ete

#3
Bütün Timer lar ve zamanlama komutları hepsi bozuk çalışır. Bazen pic bile çalışmayabilir.
Zira genelde 3434 gibi bir değer görüyorum orada . Bunu silip programlama esnasında 3FFF gibi bir değer yazılmış olacaktır.
Bu değeri girince OSCAL registeri bu değeir alıp kullanacak tamamen yanlış bir osilasyon değeri ortaya çıkacaktır.
Bir ara yanlışlıkla sildiğim 16F675'lere doğru değerlerini yeniden yazmak için bir program yapmıştım.
Program ile OSC yi dahili osc ye ayarladım ve CLK_OUT seçeneğini seçerek osilatörün dışarıda çıkış vermesini sağladım.
Bu çıkışa bir frekansmetre bağlayarak OSCCAL değeri ile oynadım ve 4Mhz frekansa en yakın değeri alıp 03FF adresine yazdırdım.
Bu şekilde yanlışlıkla sildiğim OSCCAL değerlerini yeniden 12F675 lere yazdırmıştım.
O zaman gördümki 4000.000 Hz denilen sinyal epeyce alt değerlere düşebildiği gibi epeyce üst değerlerede çıkabiliyor idi.
Normalde siz 4 e bölünmüş değeri gördüğünüz için ben frekansmetrede 1.000.000 Hz'e yakın bir değer tutturmaya çalışıyordum.
Ama 600.000 Hz ile 1.500.000 arasında değer değiştiğini gözlemlemiştim.

Frekansmetren var ise aynı işi sende kolaylıkla yapabilirsin. Program basit bir şey zaten. İKi buton olacak birisi OSCCAL deeğrini artıracak diğeri ise azaltacak. Uygun değer ise 03FF adresine yazdırılacak.
Ete

ilave: bildiğim kadarı ile PicKit2 programlayısının OSCCAL değerini hesaplayıp yeniden yazdırma özelliği mevcut.

est32

ben de 12f629'un kalibrasyonunu bozmuştum seri haberleşme devresinde dahili osc ile bu yüzden iki işlemciyi haberleştiremedim. Mecburen kristal kullandım öyle çözüldü sorun.

zoptrik

Hocam Pickit2 nin OSCCAL hesaplama bölümü (belki de benim programlayıcıdandır) çalışmıyor. dediğiniz yöntemi düşünmüştüm fakat 3ff adresine 12f675 çalışırken bir şey yazdırmak mümkün mü? yoksa içindeki değeri bilip ona göre hesap yapıp yeni osccalı PIC e mi yazdırıyoruz? elimde bu şekilde kullanamadığım 6-7 tane 12f675 var.
Teşekkürler.
iyi forumlar...
DEHA; İMKANSIZDA MÜMKÜNÜ GÖREBİLMEK DEMEKTİR.GEMİLERİN KARADA DA YÜZEBİLECEĞİNİ SEZMEK, MEHMETLERDEN BIRINI "FATİH" YAPAR...!

ete

Bu iş için yazdığım program aşağıdadır.

'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : ETE-EROLEC-ERO]                                   *
'*  Notice  : Copyright (c) 2007 [E.T.E]                        *
'*          : All Rights Reserved                               *
'*  Date    : 15.11.2007                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                     *
'****************************************************************

@ DEVICE pic12F675                      'işlemci 16F628                               
@ DEVICE pic12F675, WDT_ON              'Watch Dog timer açık
@ DEVICE pic12F675, PWRT_ON             'Power on timer açık
@ DEVICE pic12F675, PROTECT_OFF         'Kod Protek kapalı
@ DEVICE pic12F675, MCLR_off            'MCLR pini kullanılMIYOR.
@ DEVICE pic12F675, INTRC_OSC_CLKOUT  'Dahili osilatör kullanılacak
DEFINE OSCAL_1K 1

TMR0=7
option_reg=%00000001
cmcon = 7
ansel = 0
gpio=0
trisio = %00000011
wpu=2
'----------------------değişkenler-------------------------------

sayac  var word 60
ALCAK  var word 62
YUKSEK var WORD 64
HAM    var WORD 66
SN     VAR WORD 68
ost    VAR BYTE
ILK    VAR BIT
Z      VAR BIT
OSCCAL=$34

symbol art=gpio.0
symbol azl=GPIO.1
     
BASLA:     
       IF ART=0 THEN
         OSCCAL=OSCCAL+4
         IF OSCCAL=0 THEN OSCCAL=252
         WHILE ART=0:WEND
       ENDIF
       
       IF AZL=0 THEN
         OSCCAL=OSCCAL-4
         IF OSCCAL=0 THEN OSCCAL=4
         WHILE AZL=0:WEND
       ENDIF
       
       WRITE 0,OSCCAL,OSCCAL,OSCCAL :PAUSE 10
       GOTO BASLA
'ÖNCE 675 İ OKUT VE 3FFF ADRESİNE BAK NE YAZIYOR İSE osccAL=O DEĞER DE (YUKARIDA)
'sONRA BUTONLARLA AYARLA VE TAMAM SA 675İ OKUT VE 0.cı EEPROM ADRESİNDE YAZANI 3FFF ADRESİNE YAZ       

end

Epeyce oldu bu işle uğraşalı. O tarihte program çalışırken program hafızasına bunu yazdıramamıştım. Ancak epromun ilk adreslerine bir iki adrese yazdırıp sonra pic i programlayıcıda okuyarak epromdan okuduğum değeri manuel olarak 3ff adresine yazıp pici programlamış idim. Böylece OSCCAL değerlerini yeniden piclere yazmıştım.

Yukarıdaki program OSCCAL registerine $34 değerini veriyor ve frekansmetre ile OSC çıkışına bakıyorum. Fazlaise azalt butonuna basıyorum yeniden frekansa bakıyorum. 1Mhz dolayında bir değer okumanız gerekiyor. Ben tam 1Mhz değerlerini yakalayabiliyordum. Bazılarında 10 Khz fazlalık yada eksiklik çıkıyordu onlarda önemsiz.
Programd fazlalıklar var sizi yanıltmasın. Bir başka programdan adapte etmiştim.
Ete

MS_59

hocam merhaba
merak ettiğim bişey var neden bu 12f629-675vs OSCCAL değerini silebiliyoruz veya değiştirebiliyoruz
neden mesela 16f628a daki gibi değil buna neden gerek duymuşlar
mehmet

ete

Microchip firmasının denemeleri olsa gerek. Üretim şekline bağlı olarak bazı entegrelerin dahili osc lerinin kalibrasyonunu yapıp fabrikada değer vermişler. Verilen değeride program hafızası sonuna yazmışlar. Bunun sorun olduğunu anlamışlar herhaldeki yeni nesil işlemcilerde osccal diye bir register kullanarak bu işi yaptırmışlar.
Ete

MS_59

#9
hocam bu aralar RF haberleşme ile uğraşıyorum elimde seneler önce aldığım 12F629 var bikaçtane OSCCAL nedir bilmiyordum tabi kalibrasyonunu silmişim
bununla ilgili yazılanları okudum fakat hala anlamadığım yerler var
geçen gün iki tane 629 aldım bunu programlayıcıya okuttuğumda ikiside OSCCAL 40 çıkıyor
yalnız RF için yazdığım programı pice atttığımda çalışmıyor manuel olarak OSCCAL 28 yaptığımda çalışmaya başlıyor

sorum şu bu pice fabrikada aşağı yukarı bi değer veripte mi satıyorlar sonra kullanıcı kendine göremi kalibre ediyor bunu anlamadım birde program ayarlarında bi eksiklikmi var bakabilirmisiniz hocam
@ DEVICE PIC12F629                      'işlemci 12F629                               
@ DEVICE PIC12F629, WDT_ON              'Watch Dog timer açık
@ DEVICE PIC12F629, PWRT_ON             'Power on timer açık
@ DEVICE PIC12F629, PROTECT_OFF         'Kod Protek kapalı
@ DEVICE PIC12F629, MCLR_Off            'MCLR pini kullanılMIYOR.
@ DEVICE PIC12F629, INTRC_OSC_noCLKOUT  'Dahili osilatör kullanılacak
DEFINE OSCCAL_1K 1  'bu komut mutlaka olacak OSCCAL değerini yeniden pice yazdırıyor
DEFINE OSC 4

TRISIO=%00000001       
GPIO=0                   
CMCON = 7         
AL    VAR BYTE
ROLE  VAR GPIO.1
AC    VAR GPIO.5
KAPA  VAR GPIO.4
GIRIS VAR GPIO.0
CLEAR                                                                                                                                                         
PAUSE 300

BASLA:     
    serin2  GIRIS,396,[WAIT("M","H","T"),AL]   
       IF AL=120 THEN
         AC=1
         ROLE=1
         KAPA=0
         ENDIF
       IF AL=80 THEN
         AC=0
         ROLE=0
         KAPA=1
         ENDIF
    GOTO BASLA

mehmet

ete

İkinci resmin sol tarafına bakarsan osccal source denilen bir yer var ve sende manual osccal select seçili bu muhtemelen birisine 40 değerini sen yazmış oluyorsun demektir.
Osccal değeri o işlemcinin  dahili osc si ile 4 Mhz ye en yakın değeri üretmesi için gerekli olan değerdir. Fabrikasında bunlar bir programla yapılıyor sanırım. Zira benimde yanlışlıkla sildiğim bu değeri işlemcilere yeniden yazdırmak için yaptığım bir program vardı. O programda osc sigorta ayarını bir osc pininden çıkış vererecek şekilde ayarlayıp osccal değerine beşer onar artırarak değer veip osc çıkışına bağladığım frekansmetre ile çıkan frekansı ölçme yapıp doğru değeri tespit edip epromuna yazdırıyor sonrada program hafızasının en son adresine o değeri yazdırıyordum.
Şimdi pickit2 kullanıyorum ve pickit2 bunu kendisi otomatik yapabiliyor. Oda benzer şekilde bir kaç değer deniyor ve en uygun olanını tespit edip kendisi otomatik son adrese yazıyor. Bu yüzden hep söylüyorum pickit2 kullanın diye.
Anlayacağın fabrikada rastgele değer yazılmıyor gerçek değer neyse o yazılıyor.
Ete

MS_59

hocam normalde keep old OSCCAL seçili osc 40,ta çalışmadığı için ben manueli seçtim ve 28 yapınca çalışıyor
sağ taraftaki old osccal from pic kutusu picten okuduğum kısım taktığım pic sıfır daha yeni aldım neden kendi kalibrasyonunda çalışmadı anlamadım
1. resimde sıfır picten okuduğum değerdir
programlayıcıyı bu işlere başlarken almıştım neyin ne olduğunu bilmiyordum tabi en iyisi dediğiniz gibi pickit2 almak
mehmet

MS_59

bu işle ilgili yazdığınız programı buldum ama frekans metrem yok sizin yaptığınız frekansmetreyi yapıcam inşallah çok sağolun hocam
mehmet

MS_59

hocam pickit2 ye baktımda birde pickit3 var  artı olarak ne özelliği var bunun
mehmet

ete

Çok incelemedim. Ama diğerinin programlayamadığı picleri programlıyordur.
Kart ve arayüz leride farklı zaten.
Ete

Powered by EzPortal