6 Temmuz 2012 Cuma

Bir başka PIC

Sayıca en fazla satın aldığım devre elemanlarını sıraladığımda muhtemelen birinci sırada her işe koşulan BC548 sonrasında LEDler ve daha önemlisi üçüncü sırada PIC16F84A gelir. Başlıkta kastettiğim aslında PC'lerin programlanabilir kesme denetleyicileri (Programmable Interrupt Controller) yerine Microchip firmasının ürettiği ve açılımı Peripheral Interface Controller olan mikrodenetleyici serisi. PC'lerin PIC'lerine dair birşeyler daha sonra da ekleyeceğim.

PIC serisi mikrodenetleyicilerin adını birçok kimse duymuştur. Mikrodenetleyiciler, kabaca sade yapıya sahip mikroişlemcilerin aksine üzerlerinde paralel ve seri I/O portları, ADC/DAC gibi arabirimleri hazır olarak gelen ve entegrenin içerisinde Timer, RAM/ROM gibi ıvır zıvırların da olduğu işlemciler. Bana hep mikroişlemciyle PLC arasında kalmış entegreler olarak gelmiştir. Siz programınızı geliştirip EEPROM'a aktarıyorsunuz. Devreye takıp elektriği verince kodu çalışmaya başlıyor.

16F84A denetleyicisi yurtdışında artık tükenmek üzere olan bir denetleyici. Bunun yerini ucuza maledilen hem de daha yetenekli ve pin uyumlu 16F628 modeli alıyor [ http://www.finitesite.com/d3jsys/16F628.html ] ancak 16F84A için internette hala deli gibi amatör tasarımlar bulabilmek olanaklı.

16F serisiyle tanışmam yaklaşık on sene öncesine rastlasa da son bir senedir aktif olarak kullanıyorum. Aslında bunun nedeni ilk aldığımdaki programlayıcının çalışmayıp beni deli etmesiydi. Bu nedenle programlayıcılara ileride biraz değineceğim. Bundan önce tesadüfen gördüğüm ve yanda resmini eklediğim hazır kitten bahsedeyim. Bunu piyasadaki dükkanlarda bulabilirsiniz. Ben üzerinde çok fazla tersine mühendislik gerçekleştirdiğim için kendim tasarlamış kadar hakimim ancak ticari bir ürün olduğundan detaylarının tamamını vermeyeceğim.

Uzun bir aradan sonradan programlayıcısı yüzünden beni kendine küstüren 16F84 denetleyicisiyle barışmaya karar verip bu kiti aldım. Her kit alışımdaki gibi heyecanla eve geldim. Devre elemanlarını yerleştirip lehimlemeye başladım. (Kitin hazır lehimlenmişi de satılıyor ancak ben kendim kurduklarımı tercih ediyorum.) Herşey bittiğinde kesin lehimlerken yaktım dediğim transistörlerin hiçbirini yakmadığımı, devrenin sorunsuz çalıştığını görünce önce sevindim. Devreyi çalıştırdım; zamanı kurup geri sayımı başlattım; süre dolduğunda röle çekti. Hepsi bu kadar. (Ya ne olacaktı?) Her kiti yaptıktan sonra, satın alıp eve gelirkenki heyecanın tam tersi orantılı bir hayalkırıklığı yaşıyorum, çünkü yapılacakları yaptım herşey bitti. Oynayacak bir şey yok çünkü amaç belli.

Bir kaç gün sonra bari kodu inceleyeyim diyip kendi programlayıcımı yapmaya koyuldum. Elimde iki farklı programlayıcı şeması vardı. Biri JDM Programmer olarak bilinen ve benim de zamanında kendisini yada çok benzerini satın aldığım model, diğeri de görece çok daha basit ve beslemesi dışarıda olduğundan gereksiz kablo kalabalığı yaratan başka bir model. Birinci modelde sanıyorum elektrik beslemesi, seri port üzerinden gelen akımın bir kondansatörde depolanıp 5V'a yakın bir zener üzerinden entegreye verilmesiyle sağlanıyor, böylece dışarıdan bir besleme gerekmiyor.

İkinci model basit olduğundan önce onu protoboard'a kurdum. Besleme katını yapmaya üşendiğimden beslemeyi doğrudan adaptörden aldım. Devreyi bağladıktan sonra donanım denetlemesinde programlayıcıyı görüyordu ancak programlarken on sene önce olanlar tekrar oluyordu. Neyse diyip ikinci programlayıcıyı kurdum. Sonuç yine aynı. Derken birşeyi fark ettim; ilk denemede adaptörü 9V'a ayarlamışım ama entegrenin besleme gerilimi 5V. Dolayısıyla büyük olasılıkla PIC'i daha okuyamadan yaktım. Bu arada PIC'lerde Code Protect (CP) diye bir özellik var. CP'yi set ederek yazdığınızda kodunuz okunamıyor. Büyük olasılıkla benim kod da öyleydi ama artık yanmış zaten ne önemi vardı ki.

Bu sırada kullandığım yazılımdan şüphelendiğimden programlayıcıyla birlikte üç ayrı yazılımı denedim. Bu yazılımlar sizin yazıp derleyiciyle ikili koda dönüştürdüğünüz dosyaları alıp seri port üzerinden entegrenin EEPROM'una aktarıyorlar. Seri portu kullandıklarından bir sıkıntı daha var: Windows NT tabanlı sistemlerde donanıma doğrudan erişemediklerinden çok yavaş çalışıyorlar ve hatta çalışmıyorlar. Bu nedenle bütün bu işleri yapabilmek için biryerlerden P2 sistem bulup (anakartında ISA slotu bile var.) Windows 98 kurdum. Bu üç programların adları şöyle:
  1. IC-Prog: Daha önceden de bunu kullanmıştım. Basit bir kullanımı var üstelik dökümanlarında JDM programmer'i tanıyabildiğini söylüyor.
  2. WinPIC: Piyasadaki bir çok programlama devresini tanıyor ve yaygın olarak kullanılıyor.
  3. pgm84: JDM Programmer'in tasarlayan adamın pascal'da geliştirdiği açık kaynak kodlu yazılım. Programın komut satırı parametrelerini anlamak için kaynak kodunu incelemem gerekti ama başarılı buldum. [ http://www.jdm.homepage.dk/newpic.htm adresinde bulunabilir ancak ben tavsiye etmiyorum. ]
Entegreleri yaktığım için gidip boş bir tane daha 16F84A satın aldım. JDM programmer hala protoboard'da kuruluydu. pgm84 ile sağdan soldan bulduğum basit bir hex dosyasını yazdım. Sonuç: Başarılı. Ancak hala IC-Prog'da sorunlar çıkıyordu. Bundan sonra JDM'in elemanlarını alıp tekrar poşetine kaldırdım. İlk tasarıma geri dönüp, besleme katını düzgünce yaptım. Üstelik bu olaydan sonra kullandığım bütün 16F84 devreleri için aynı yada çok benzeri bir besleme katı kullandım. Programlayıcıyı bitirip IC-Prog ile denedim; sorunsuz çalıştı. Bahsettiğim programlayıcının şemasını aşağıya da ekledim. Yalnız şemada bir YANLIŞLIK yapılmış, buna dikkat edin: LM7805'in GND bacağı 3 değil 2, yani ortadaki bacak; Vout da 2. değil 3. bacak.



LM7805'in doğru pin şemasını şuradan bulabilirsiniz. Google resimlerde aratınca zaten binlercesi çıkıyor.

JDM'in programlayıcı devresi, yukarıda verdiğim bağlantıda var. Doğrudan bağlantı şu şekilde: http://www.jdm.homepage.dk/newpic22.gif

Bundan sonra 16F84A'nın assembly'sini öğrenip birşeyler geliştirebilirdim. Bozduğum zamanlayıcıyla başlamak zaten kafamdaydı. Ancak zamanlayıcıyı nasıl tamir ettiğimden daha sonra bahsedeyim.


Hiç yorum yok:

Yorum Gönder