Ders 3 - Osilatörler
Bir önceki derste Atmega328 ile basit bir LED yak-söndür uygulaması yapmıştık. Şimdi bu LED'i daha hızlı bir şekilde yakıp söndürelim.
İlk uygulamada Atmega328 içerisine çalışan, LED yakıp söndüren bir kod yüklemiştik. Fakat bu kodun nasıl ve ne kadar hızda çalıştığı hakkında pek detaya değinmemiştik.
Herhangi bir mikrodenetleyici veya işlemci içerisine yüklenen kodların işletilip çalıştırılabilmesi için muhakkak bir işaret kaynağına ihtiyaç duymaktadır. Eğer bu kaynak olmazsa, mikrodenetleyici, içerisindeki hiçbir kodu işletemez. Ve kaynak düzensiz bir dalga olsa bile işlemci çalışır fakat hızı hakkında kesin bir şey söylenemez. Genellikle kodların hatasız çalışabilmesi için kesin bir frekans üreten bir işaret kaynağına ihtiyaç duyarız.
Atmega168'de bu işaret kaynağı, birkaç farklı şekilde sağlanabilir.
- Harici RC Osilatör : Basit ve ucuz bir yöntemdir. Bir direnç ve bir kondansatörle yapılabilir. Kondansatörün şarj/deşarj oranı bu kaynağın frekansını belirler.
- Dahili RC Osilatör : Mikrodenetleyici içerisinde bulunan yine bir direnç ve bir kondansatörle yapılan işaret kaynağıdır. Ttek eksik yanı ise : istenilen frekansın tam ve kesin olarak üretilememesidir.
- Harici Osilatör : Harici bir quartz kristalinin mikrodenetleyicinin OSC pinlerine bağlanması ile elde edilir.
- Harici Resonatör : Harici osilatör gibidir. Fakat toleransı fazladır.
- Harici Clock Sinyali : Bir osilatör kullanmak yerine birkaç farklı cihazın aynı frekansta çalışması istenen durumlarda kullanılır.
Dahili RC Osilatör
Atmel firmasının ürettiği AVR serisi mikrodenetleyicilerde 1MHz ? 8MHz arası frekans üretebilen dahili RC osilatör bulunmaktadır. AVR serisi mikrodenetleyiciler, 1 komutu bir clock palsinde işleyebilirler. Bu da demek oluyor ki; 1MHz lik bir osilatörde 1MIPS(Million Instruction Per Second) hıza 12MHz lik bir osilatörde 12MIPS hıza çıkılabilmektedir. Fakat bu dahili RC osilatörün bir toleransı vardır. Dahili osilatör frekansı 8MHz iken tolerans +/- %5 olmaktadır. Yani 1.000.000 * 1.05 = 1.050.000 IPS veya 1.000.000 * 0.95 = 950.000 IPS bu tolerans değeri aslında küçük gibi görünse de işlemci hızı arttığı zaman istenilen dengenin bozulması kaçınılmaz olacaktır. Bu nedenle dahili RC osilatörünün genellikle hassas zamanlama gerektiren uygulamalarda kullanılmaması tavsiye edilir.
Harici Osilatör
Bu osilatör çeşidi aşağıda görüldüğü gibi yaygın olan tiptedir.
Quartz kristal osilatörler farklı çeşitlerde ve frekanslarda olabilirler. En yaygın; 20MHz, 16MHz, 10MHz, 4MHz gibi değerlerde kullanılırlar. Kristal değerleri küsuratlı da olabilir. Mesela 14.7456MHz, 9.216MHz, 32.768kHz. Bu küsuratlı değerler seri iletişim, zamanlama gibi uygulamalarda olmazsa olmazlardandır. Örnek vermek gerekirse ; 9600 baud hızında bir seri iletişim yapmamız gerekiyor ve 9.216MHz'lik bir kristal kullanıyoruz. 9.216.000 / 960 = 9600. Bu değer 16MHz gibi tam değerli bir kristal kullanıldığında tam sayı çıkamayacağı için seri iletişimde küçük de olsa bazı sorunlar oluşabilmektedir.
Metal kılıfın içerisinde yer alan quartz kristal parçası kesin bir frekans değeri belirlenip ona göre farklı boyutlarda kesilmektedir. Bu büyüklüğün sebebi quartz kristalinin büyüklüğü ile titreşim frekansının arasındaki ilişkiden kaynaklanmaktadır. Quartz kristalleri genellikle +/- %20ppm toleransta üretilirler. Yani +/- %20 parts per million anlamına gelmektedir. Bunu bir örnekle açıklayacak olursak; 16MHz lik bir kristalde hata payı sonucu frekans değeri 16.000.020 MHz veya 15.999.980 MHz olmaktadır. Bu, +/- %0.00000125 gibi bir tolerans değerine denk gelmektedir. Sonuç olarak bir quartz kristali, bir RC osilatörden 4 milyon kat daha kesin bir frekans üretmektedir.
Teknik Detay : Bir kristal ile bir osilatör aynı şey değildir. Kristaller ucuzdur fakat osilatörler biraz daha pahalıdır($2-$4 arası). Aradaki fark ise; osilatörler istenilen frekansı doğrudan üretirler. Kristal ise pasif bir devre elemanıdır ve bir osilatör gibi davranabilmesi için kapasitörlere ihtiyaç duyarlar. Genellikle kristalin iki ucuna bağlanmış kapasitörler bir bütün halinde mikrodenetleyiciye bağlandığı zaman gereken osilatör devresi sağlanmış olur.
Kristallerin Bazı Dezavantajları
- PCB üzerinde resonatörlerden daha fazla yer kaplarlar.
- Kristallerin çalışması için gereken ekstra kapasitörler PCB üzerinde resonatörlerden daha fazla yer kaplarlar.
- Kristaller, resonatörlerden biraz daha pahalıdır.
Harici Resonatör
Harici resonatörler aşağıdaki şekilde görüldüğü gibidir.
Resonatör, belirlenen frekansı üretecek şekilde boyutlandırılmış seramik parçasıdır. Toleransları +/-%0.5 olduğundan dahili RC osilatörlerden 10 kat daha kesin frekans değeri üretirler. Resonatörler içerisinde kapasitör de bulundurdukları için PCB'de daha az yer kaplarlar ve bu sebeple daha kullanışlıdırlar.Ve kristallerin sıcaklıktan olumsuz yönde etkilendikleri düşünülürse bazı durumlarda resonatör kullanmak daha uygun olmaktadır.
Daha önceden de bahsedildiği gibi Atmega328 içerisinde 1MHz lik dahili osilatör bulunmaktadır. Fakat bunu kolayca ayarlayıp kullanabilmekteyiz. Şimdi Atmega168'e 16MHz'lik harici kristal osilatörün nasıl bağlandığını inceleyelim.
Atmega168'in dahili RC osilatörünü yüksek frekansta çalıştırmanın yan etkilerinden biri de Vcc gerilim 2.8v veya 3.3v gibi bir değer olursa işlemcinin bu Vcc geriliminde istenen frekansta çalışmayacağıdır. Fakat bizim Vcc kaynağımız 5v olduğu için bu durum sıkıntı teşkil etmeyecektir.
Atmega328'e 16MHz lik harici bir kristal PB6 ve PB7 pinlerinden bağlanmaktadır.
Kristalin iki ayağını da 22pF lık kondansatörler üzerinden GND ye bağladığımızda Atmega168 için harici kristal işlemini tamamlamış oluyoruz. Şimdi bu kristali yazılımsal olarak nasıl seçeceğimizi öğrenelim.
Fuse Bitleri
Atmel AVR'lerin başlangıç için en kafa karıştırıcı kısmı şüphesi Fuse bitleridir. Bu işlem PIC gibi bir mikrodenetleyici ile kıyaslandığında başlangıç için oldukça zor bir işlemdir. Atmega328 için 2 bytelık Fuse saklayıcıları bulunmaktadır. Eğer Atmega168 datasheet ini indirmediyseniz buradan indirebilirsiniz. Atmega168'in datasheeti 376 sayfa fakat Fuse bitlerini ayarlamak için bu datasheetin tamamını bilmek zorunda değilsiniz.
Blink_1MHz.hex programında dahili RC osilator 1MHz olarak ayarlanmıştır. Fuse bitlerini değiştirerek dahili RC osilatör frekansını 8MHz yaparsak LED daha hızlı yanıp sönmeye başlayacaktır. Aşağıda RC osilatörün nasıl seçildiği görülmektedir.
Dahili RC osilatörünün frekansı ön tanımlı olarak 8Mhz dir. Fakat blink_1MHz.HEX programında bu ayar değiştirildiği için biz tekrar 8MHZ olarak ayarlayacağız. Bunun için CKDIV bitini set etmemiz gerekir.
Default Fuse Byte Değeri(Low) : 0b 0110 0010
Yeni Fuse Byte Değeri(Low) : 0b 1110 0010
Bu ayarı yaptıktan sonra Atmega168, 8 MHz hızda çalışmaktadır. Bu da PC0 pinine bağlı LED'in daha hızlı yanıp sönmesini sağlayacaktır.
Bu ayarlar birkaç farklı şekilde yapılabilmektedir. Diğer bir yol ise avrdude programını kullanarak bu işlemi komut istemi'nde yapmaktır. Bunun için komut istemi'ne aşağıdaki satırları yazmanız gerekmektedir.
PG1(Seri Programlayıcı)
PG2(Paralel Programlayıcı)
PG2 programlayıcı kullanıp, dahili RC osilatörü 8MHz de çalıştırmak için;
Komut İstemi'nde bu satırları yazıp Atmega168'i programladığınızda işlemci 8MHz'lik osilatörle çalışacaktır.
Atmega168'e önceden de bahsedildiği gibi harici kristal de bağlanabilmektedir. Bunun için Fuse bitlerini aşağıdaki gibi ayarlamak gerekir.
- CKDIV8 = 1
- CKOUT = 1
- SUT1 = 1
- SUT0 = 0
- CKSEL3 = 0
- CKSEL2 = 1
- CKSEL1 = 1
- CKSEL0 = 0
Avrdude programında doğrudan aşağıdaki komut satırı kullanılabilir.
16MHz lik harici osilatör için;
- avrdude -p m168 -P lpt1 -c stk200 -U lfuse :w:0xE6:m
Atmega168'i bu ayarla programlayıp, breadboard üzerindeki devrenize 16MHz kristal ve 22pF kapasitörleri eklerseniz LED'in çok hızlı yanıp söndüğünü görürsünüz. Atmega168'in maksimum hızı 20Mhz(20 MIPS) tir. İşlemciyi overclock edip bunu 30MIPS ya da 40MIPS de yapabilirsiniz. Fakat endüstriyel uygulamalarda önerilen hızın üzerine çıkmamanız önerilir.
Konuyu daha iyi kavramak açısından aşağıdaki ölçümleri yapıp sonuçlarını gözlemlemeniz önerilir.
Bu ölçümlerin hepsinde Atmega168'in ne kadar akım harcadığını gözlemleyiniz.
- pAtmega168'in reset anında = ?
- p1MHz'lik dahili RC osiltaör kullanılırken = ?
- p8MHz'lik dahili RC osilatör kullanılırken = ?
- p16MHz'lik harici osilatör kullanılırken = ?
Fuse bitlerini ayarlamak için aşağıdaki linkteki programı kullanabilirsiniz.
Yukarıdaki ölçümleri yaparken, özellikle mikrodenetleyiciyi yüksek frekansta çalıştırdığınız zaman voltaj regülatörünüzün biraz ısındığını göreceksiniz. Çünkü 5v'luk kaynaktan normalden daha fazla bir güç ihtiyacı olmaktadır. Bu gücün büyük kısmı da LM7805 üzerinde ısıya dönüşmektedir. Örnek verecek olursak;
50mA akım ihtiyacımız olsun ve bize ne kadar güç gerekiyor hesaplayalım;
(9-5) x 0.050 = 0.2W =200mW
Bu değer LM7805 i birazcık zorlamakta ve ısıtmaktadır.
Bir de 1A için hesaplama yapalım.
Fuse bitlerini ayarlamak için aşağıdaki linkteki programı kullanabilirsiniz.
http://palmavr.sourceforge.net/cgi-bin/fc.cgiYukarıdaki ölçümleri yaparken, özellikle mikrodenetleyiciyi yüksek frekansta çalıştırdığınız zaman voltaj regülatörünüzün biraz ısındığını göreceksiniz. Çünkü 5v'luk kaynaktan normalden daha fazla bir güç ihtiyacı olmaktadır. Bu gücün büyük kısmı da LM7805 üzerinde ısıya dönüşmektedir. Örnek verecek olursak;
50mA akım ihtiyacımız olsun ve bize ne kadar güç gerekiyor hesaplayalım;
(9-5) x 0.050 = 0.2W =200mW
Bu değer LM7805 i birazcık zorlamakta ve ısıtmaktadır.
Bir de 1A için hesaplama yapalım.
(9-5) x 1.000 = 4W
Görüldüğü gibi 1Amperlik bir akım ihtiyacı sonucunda ne kadar fazla güç harcanmaktadır. Ve dolayısıyla sıcaklık da buna bağlı olarak artacaktır. Bu işlem sonucunda voltaj regülatörünüz muhtemelen thermal shut-down moduna geçecektir(eğer destekliyorsa). Yani fazla sıcaklıktan dolayı kendini kapatacaktır. Ve breadboard üzerindeki LED de sönecektir. Eğer böyle bir özellik yoksa voltaj regülatörünüz büyük ölçüde hasar görecek belki de yanacaktır.
Bu sebepten dolayı eğer bağlantılarınızda herhangi bir kısa devre olmuşsa hemen anahtarı kapatmanız gerekmektedir. Çünkü voltaj regülatörünün yanması ve gerilimi regüle edememesi sonucunda diğer tüm dijital devreleriniz zarar görecektir.
Bu dersin tüm materyallerini buradan temin edebilirsiniz.
Not:Buradaki karışıklık için özür diliyorum. Çünkü programlayacağımız mikrodenetleyici Atmega168. Fakat resimlerde Atmega8 yer alıyor.
0 yorum:
Yorum Gönder