12F675 Internal Osilator Ayarları ve Kalibre Edilmesi

Başlatan sarikayamusa, 25 Mart 2008, 14:22:37

sarikayamusa

12F675 ve 12F629 da internal osilator kalibrasyon işinin nasıl yapıldıgını anlatıyorum.

1.) 12F675 veya F629 piclerde diger piclerden farklı olarak internal oscillator fabrikasyon olarak 4Mhz e kalibre edilir ve romda 0x3FF adresinde saklanır. 628 de bu durum boyle deildir degistirmene izin vermez. (Bu yuzden ccs de
setup_oscillator(OSC_4Mhz);
komutu işe yaramaz) Dikkat edilecek husus;  Programlayıcıda programlarken kalibrasyon degeri degistireyimmi diye sordugunda korumak yani üzerine yazmamak! Yada  her ihtimale karsı bu 3FF adresindeki 34 ile baslayan datayı biryere  yazmak. Cunku bu deger her yonga icin farklı.

Biraz #fuse ayarlarından bahsedeyim:
intrc_io:
internal osilator kullan ve clockout kullanma. Yani kristal pinlerini IO olarak kullanabilirsin.
intrc:
internal osilator kullan ve GP4 ten clock cıkısı ver demektir. Bunu kullandıgında pinden OSC/4 yani tam olarak 1Mhz lik kare dalga alırsın. İşte kalibrasyon icin referansı buradan alabilirsin.
nomclr:
mclr pinini IO olarak kullanmak için mclr devre dısı bırakır.

Kalibrasyon: Programlayıcıda programlarken o degeri degistireyimmi diye sordugunda degistir dersen kalibrasyon ayarını bozmus olursun ve artık osilatorun 4Mhz değil %20lere varan toleranslarla calısır bu ise sana hassas timer, seri iletişim vs uygulamalarında koddan emin oldugun halde calısmama ve sac bas yolma seklinde geri doner.

Peki böyle bir durum oldugunda yani kalibrasyon degeri bozuldugunda ilk olarak  kodda fuse config ayarlarında intrc_io yerine sadece intrc yazmak derlemek sonra GP4ten bir osiloskop ile frekansa bir bakın bakalım kac gosteriyor? Eger 1Mhzden farklı gosteriyorsa  programlarken programlayıcı software'de romda 0x3FF adresindeki 34 ile baslayan yere mesela 80 yazın bu haliyle programlayın. Deneme yanılmayla tam 1Mhzi yada en yakın degeri bulmaya calısın biraz zamanınızı alacaktır ama bir kerelik bunu yapın. Boylece en optimum degeri bulmus olacaksınız. Bulduktan sonraki programlamalarınızda degerin üzerine yazayımmı diye sordugunda izin vermeyin...

Kodda ise:
#byte OSCCAL = 0x90
OSCCAL = 0x80
komutlarını kullanmayın zira her pic için bu deger gecerli deildir. Picinizin kalibre datasını tekrar bozmus olursunuz.

Saygılarımla...

muratdu

Katkı olması amacıyla buldugum bir link,anladigim kadarıyla kesin degeri buluyormuş.

http://picprojects.org.uk/projects/recal/recal.htm