ATMEL PROGRAMLAMA 13- Sigorta ve Osilatör seçenekleri

       Şimdiye kadar yaptığımız çalışmalarda mikrodenetleyicimizin osilatör ve sigorta düzenlemeleri ile ilgili çalışma  yapmadık. Mikrodenetleyicimizde yüklü olan "default" ayarları kullandık. Şimdi ise mikrodenetleyicimizin  osilatör ve sigorta seçeneklerini istediğimiz gibi nasıl düzenleyeceğimizi anlatacağım. Aslında osilatör ve sigorta seçenekleri birbirinden farklı değil. Osilatör düzenlemesini sigorta ayarlarından yapacağız

     Atmel mikrodenetleyicilerinde sigorta ayarlaması programlarımızı yazdığımız yazılımlarda kod satırları  ile yapılamamaktadır.  Örneğin Pic'te olduğu gibi programın başında konfigürasyon ayarlaması yapamamaktayız. Atmelde bu düzenlemeleri programları yüklediğimiz  yükleme programları sayesinde yapmaktayız. Ben yükleme programı olarak avrdude kullanmaktayım. Bu nedenle mikrodenetleyicimizin sigorta düzenlemelerini  avrdude programı ile  yapacağız. Ancak burada anlatılanları diğer programlarla da yapabilirsiniz.



     Öncelikle şunu belirtmeliyimki Atmel derleyicilerin sigorta düzenlemeleri konusunda tecrübeli değilseniz , yaptıklarınızı birkaç defa kontrol ettikten ve emin olduktan sonra  denetleyicinize yükleyiniz. Aksi taktirde denetleyicinizi birdaha programlayamayabilirsiniz. Özellikle bu konuda tecrübe kazanana kadar RSTDISBL, SPIEN ve  DWEN seçeneklerinden uzak durunuz. ve bunların ayarlarını değiştirmediğinizden emin olunuz. 

    Bilmemiz gereken bir nokta da 1 ve 0'ın ne anlama geldiğidir.

                1- unprogrammed(ayarlanmamış)                      0- programmed(ayarlanmış) 

  anlamlarına gelmektedir.

     Her zaman olduğu gibi kaynak dosyamız mikrodenetleyicimizin datasheet'idir. Datasheet 286. sayfadan(28.2 Fuse Bits) itibaren atmega328p'nin sigorta seçenekleri belirtilmiştir.

      Atmega 328p'nin toplam üç byte sigorta  bilgisi vardır. Bunlar

              1- Low byte fuse
              2- High byte fuse
              3- Extended byte fuse
 
1-LOW BYTE FUSE BITS


       Atmega 328p'nin osilatör ayarlarının düzenlenmesini sağlar. Datasheet sayfa (288-289)'daki tabloda Low byte içeriği görülmektedir.

 
       

  1.1    CKSEL3..0 :  Mikrodenetleyicinin osilatör kaynağını seçmemizi sağlar. 

 

   Kristal osilatör bağlantı şekli


a)   Low Power Crystal Osilatör seçenekleri 



b)  Full Swing  Crystal Osilatör seçenekleri




c)   Low Frequency  Crystal Osilatör   : sadece 32.768 Khz'lik saat kristali kullanılır.

d)  Internal 128Khz  RC Osilatör          : Düşük güçlü 128Khz lik dahili osilatördür.

e)  Calibrated Internal RC Osialtör      : Besleme voltajı ve sıcaklığa bağlı olarak yaklaşık olarak 8.0 Mhz 'lik bir osilatördür. Besleme voltajı ve ortam sıcaklığına bağlı olarak kalibrasyonu yapılabilir.

f)  External Clock          :  Harici bir osilatör devresi kullanılmak istenirse bu seçenek seçilmelidir. bağlantı şekli ve frekans değeri aşağıdaki şekilde belirtilmiştir. (datasheet sayfa 33)





1.2 SUT1-SUT0 :  Mikrodenetleyicimizin osilatörü mikrodenetleyicinin besleme gerilimine bağlı olarak çalışır. Mikrodenetleyiciye enerji verildiği anda besleme gerilimi hemen istenilen değere gelemez buna bağlı olarak da  osilatör kararlı çalışamaz. Enerji verildiği anda osilatör,  besleme gerilimi istenilen değere gelene kadar bir süre bekletilir. Besleme istenilen değere ulaşılınca osilatör çalışmaya başlar bu şekilde osilatör kararlı çalışmış ve başlangıç için istenmeyen durum yaratılmamış olur. 
       SUT1-SUT0 bitleri bu süreyi düzenler. 

örneğin Low power kristal osilatör için bu süreler ve SUT1-SUT2 değerleri (datasheet sayfa 29)

 

Yukarıdaki tablodan da görüleceği gibi CKSEL0 biti  bu sürleri belirlemek için kullanılmaktadır.

diğer osilatör seçenekleri için de datasheette bu değerler mevcuttur.

1.3 CKOUT :  Seçtiğimiz osialtöre bağlı olarak oluşan saat sinyalimizi PB0 pininden alıp kullanabilriz. Eğer mikrodenetleyicimiz ile başka bir devre süreceksek ve senkronizasyon isteniyorsa bu pin programlanır (0 yapılır) ve mikrodenetleyicinin saat sinyali PB0 pininden alınabilir.

1.4 CKDIV8  :  Atmega 328p 'nin default ayarlarında  8Mhz dahili RC osilatör ve CKDIV8 biti programlanmış (0) olarak. gelir. CKDIV8 programlanmış ise seçtiğimiz osilatör frekansı 8'e bölünür. Buna göre Cpu çalışma fekansı 8Mhz/8 = 1Mhz'dir
              Eğer osilatör kaynağımız mikrodenetleyicinin çalışabileceği maximum frekantan daha fazla frekanstaysa bu biti programlayarak (0 yaparak) , osialtör kaynağının frekansını 8'e bölmüş oluruz. dikkat edilmesi gereken nokta 8'e bölme sonucu çıkan sonuç mikrodenetleyiciyi çalıştırabilecek bir değerde olmalıdır.
             Atmega ile düşük gerilimlerde çalışmak istiyorsak çalışma frekansımızda düşük olacaktır. Çalışma frekansımızı düşürecektir.

Atmega 328p'nin default low byte 'ı  CKSEL = “0010”, SUT = “10”, CKDIV8 = “0”

2- HIGH BYTE FUSE BITS



2.1 BOOTRST  Mikrodenetleyicimize bootloader programı yüklediğimiz zaman bu biti programlayarak (0) reset sırasında mikrodenetleyicinin  bootloader adresine gitmesini sağlarız. default değeri 1 dir.

2.2 BOOTSZ0-1  (Boot loader Size)
Program hafızasında bootloader için ne kadar yer ayrılacağını belirler.

 

default olarak BOOTSZ1=0 BOOTSZ0=1 'dır. yani 2Kbyte (1024 words=2048 byte)yer ayrılmıştır. yukarıdaki tabloda ilgili adresleri görebilirsiniz.

2.2 EESAVE (Preserve EEPROM memory)
Atmega mikrodenetleyicilere program yüklerken önce program hafızası silinir, sonra yeni program yüklenir. Program hafızası silinirken aynı zamanda Epromda silinir. Bu bit programlanırsa (0), yeni bir program yüklenirken eprom silinmez ve önceden yüklenmiş kullanıcı ayarları gibi bilgiler saklanmış olur. Default değeri EESAVE=1'dir. 
    Eğer yazdığınız yeni programın epromla bir işi yoksa EESAVE programlanmalıdır. Çünkü epromun  bir yazma / silme ömrü vardır. Boşuna Epromun ömrünü kullanmış oluruz.   

2.3 WDTON (Watchdog Timer Always On) Watchdog (bekçi köpeği)'u aktif veya pasif yapmak için kullanılır. 
    Normal durumda Watchdog belirli sürelerde mikrodenetleyici tarafından sıfırlanan bir timer'dır. Eğer mikrodenetleyici programı istenildiği gibi yürütülmezse watchdog sıfırlanmaz ve mikrodenetleyiciyi resetler. Böylece mikrodenetleyici istenilmeyen durumlardan kurtarılmış olur.
    Watchdog yazılımla da aktif edilebilir. Default değeri 1(programlanmamış)'dir.
 
2.4 SPIEN (Enable Serial programming and Data Downloading) Atmega mikrodenetleyicileri genellikle seri programlayıcılar ile programlanırlar. Seri programlayıcılar SPI protokolünü kullanırlar. SPIEN biti 0 ise seri programlama yapılabilir. aksi halde seri programlayıcı ile programlama yapamazsınız. Sigorta ayarları yapılırken en  dikkatli olunması gereken bittir.. Yanlışlıkla 1 yapılırsa bir daha seri  programlayıcı ile mikrodenetleyicinizi programlayamazsınız. Tekrar programlama için yüksek gerilimli paralel/seri  programlayıcı kullanmalısınız.
   default değeri SPIEN=0'dır.
 
2.5 DWEN (debugWIRE enable)  Dikkat etmemiz gereken diğer bir bit. DWEN aktif yapılırsa reset pini (pc6) reset özelliğinden çıkar ve debug için haberleşme pini haline gelir.  Bizim kullandığımız SPI programlayıcılar reset pinine ihtiyaç duyuyorlar. Reset pini kullanılamazsa SPI programlayıcı ile tekrar programlama yapamayız. 
     Normalde debug işlemi simülasyon üzerinden yapılır. Atmel mikrodenetleyicilerde On-chip-debugging (OCD) özelliği mevcuttur.  Program gerçek ortamda yani chip üzerinde yüklü olarak debug edilebilir. Gerçek elektrik sinyalleri ve zamanlama ile debug yapılır. Fakat her programlayıcı bu özelliği desteklemez. Sadece  AVR Dragon programlayıcınız varsa bu özelliği kullanabilirsiniz.. 
      Default olarak DWEN=1 dir. ve böyle kalmasında yarar vardır.

2.6 RSTDISBL (External reset disable)  RSTDISBL biti de dikkat edilmesi ve pek değiştirilmemesi gereken bir bit.  Aktif edilirse reset pini (pc6) reset özelliğini kaybeder ve normal I/O pini gibi davranır. Tekar programlama yapamayız.
    default olarak RSTDISBL=1'dir. ve böyle kalmasında yarar vardır.

 3. EXTENDED FUSE BITS  Bu sigorta ayarları sadece  brown-out detection  (BOD) seviyesini programlamak için kullanılır.. 

 

  Atmega 328p mikrodenetleyicisi belli gerilim degerlerinde stabil çalışır. Bu gerilim değerleri sağlanamazsa istenilen şekilde çalışamaz.  Brown-Out Detection aktif olduğunda bu gerilim değerlerini kontrol edilir. İstenilen gerilim değerleri dışına çıkılırsa denetleyicimiz resetlenerek çalışması durdurulur ve istenmeyen, önceden tahmin edilemeyen sonuçların çıkması engellenmiş olur.

 

 4. ATMEGA 328P DEFAULT SİGORTA AYARLARI 

     Low fuse = 0x62 (B01100010)
     High fuse = 0xDB (B11011011)
     Extended fuse = 0xFF (B11111111)


Yorumlar

  1. Açıklamalar için teşekkürler.ardunio programlama ilgili onca yazı makale okudum.fuse bit konusu hiç bir türkçe kaynakta geçmiyor.tesadüfen bir yazıda fuse bit kelimesini görüp sigortanin yazılımla ne alakası var diye araştırınca önümde kocaman bir buzdağının olduğunu gördüm.konu bayağı derin.Bakalım ellerinizle saglik

    YanıtlaSil
  2. Paylaşım için teşekkürler. Elimde atmega8 e ait kaynak kod var hex dosyasıda var kaynak kodda sigortalar için aşağıda ki açıklama yapılmış

    Crystal Clock High Frequency CKSEL - 1111
    WatchDog Always On WDTON Fuse Programmed

    bu açıklamaya göre pony progda sigorta ayarları nasıl olmalı

    örnek 1: https://s9.postimg.org/vtzjyry9r/image.png

    örnek 2: https://s9.postimg.org/pt1v1pysv/image.png

    YanıtlaSil
    Yanıtlar
    1. hocam iyi günler verdiğiniz bilgiler çok güzel benim bi sorunum var fuse bitleri bi türlü yazdıramıyorum yardımcı olursanız sevinirim şimdiden tşk ederim.

      Sil
    2. Gökhan bey
      https://bariscincorop.blogspot.com.tr/2016/01/atmel-avr-14-usbasp-avrdude-ile-sigorta.html burası size yardımcı olacaktır. ama dikkatli olun. sigorta ayarlarıyla oynamak dikkat istiyen bir konu.

      Sil
    3. pony prog içinde : https://bariscincorop.blogspot.com.tr/2016/01/atmel-avr-14-usbasp-avrdude-ile-sigorta.html konuyu incelerseniz cevabı bulacaksınız. gerekli olan bitleri programda işaretleyip write tuşuna basmanız lazım. Ama dikkatli olun sigorta ayarları atmega da dikkat isteyen bir konu. birkaç defa tekrar tekara kontrol ettikten sonra yazdırma işlemi yapın.

      Sil
  3. Bu konu ile ilgili bir video çekebilirseniz çok iyi olur hocam

    YanıtlaSil
    Yanıtlar
    1. evet aklımda ama zaman bulamıyorum, bu konularla fazla ilgilenemiyorum artık.

      Sil

Yorum Gönder