Bu yazımda ICD2 klonunu inceleyeceğiz. ICD2 microchip firmasının kendi üretmiş olduğu mikrodenetleyicileri programlamaki debug etmek için geliştirdiği bir cihazdır. edaboard forumundaki bazı kullanıcılar icd2 üzerindeki CY7C64613 entegresini PIC18F2550 ile değiştirmek istemişler ve zamanla 18F4550 kullanan çeşitli kopyalar üretmişlerdir. Ben bunlardan potyo2 versiyonunu kullanmaktayım.MPLAB IDE sine mükemmel entegre olmakta, programlama ve debug yapabilmektedir. Programlama hızı iyi olmasına karşılık biraz yavaş debug yapıyor.Uzun bir süredir kullanmaktayım ve şimdiye kadar bir sorunla kaşılaşmadım. Yaptığım devrenin fotografınını aşağıda görebilirsiniz.
Devrenin çizimlerini ve firmware dosyalarını icd2clone sitesinden indirebilirsiniz.Aynı zamanda bahsettiğim sitede bir kaç farklı klon göreceksiniz. Orjinal forum konusunu inceleyip diğer klonlarıda yapabilirsiniz.Ben potyo2 versiyonunu kullanmaktayım, diğerlerini kullanmadım. Devrede iki adet PIC kullanılmıştır.Bunlardan ilki cihazı yöneten ve USB üzerinden MPLAB ile bağlantı kuran 18F4550 dir.Diğeri ise 16F877A dır. 16F877A yerine 16F877 de kullanılabilir fakat 20MHZ frekansta çalışabilmelidir.Programlama ve debug bakımından bu piclerin çalışma hızında bir fark yoktur. Fakat işletim sistemi diye adlandırılan firmware güncellemesini yaparken 16F877A daha hızlı çalışmaktadır. Bu firmware güncellemeside programlayıcıyı ilk yaptığınızda bir kereye mahsus yapılmaktadır.
Devre çizimi eagle ile yapılmıştır.Direk kullanabilirsiniz.Yukarıdaki şekilde ek olarak benim eklemiş olduğum ICSP pinlerini görebilirsiniz.Bunu geçmişte yaptığım devrelere uyum sağlasın diye ekledim. Donanım üzerine aldığım bazı notları size aktarayım. Yukarıdaki şekilde sağ alt köşedeki jumper pinleri 18F4550 nin reset pinleridir, bu pinlere direk buton bağlayabilirsiniz. Sol üst köşedeki 3 pinli jumper ise cihazı sadece programlayıcı olarak kullanacaksanız transistör tarafına takılabilir. Debugger yada programlayıcı olarak kullanmak isterseniz jumperı LED tarafına takmalısınız. Forumlarda okuduğum kadarıyla bazı kimseler 18F4550 nin kristal osilatöründeki kondansatörlerde sıkıntı yaşamış. Ben hem 33pf ile hemde 22pf ile denedim herhangi bir sıkıntı yaşamadım.Şuan 22pf kullanmaktayım. Devreyi incelerken iki PIC arasındaki Q4 (BC237) transistörünün ters bağlandığını fark ettim ve lehimlerken yönünü değiştirip lehimledim. Emetör ucunun toprağa bağlanması gerekli, yeni kesik taraf 18F4550 ye bakmalı. Son olarakta L1 bobininden bahsedelim. Bu bobin 100uH ile 200uH aralığında bir değerde olabilir. Bu aralıktaki değerler voltaj seviyesini değiştirmeyip akım şiddetini değiştirmektedir. Ayrıca devrenin ICSP bağlantılarını ve USB kablosunun renklerinide kolaylık olsun diye verelim :) Aşağıdaki şekilde USB kablosunun renklerini gösterdiğim şekli google images te D- ve D+ pinlerinin yeri değişmiş olarak görebilirsiniz fakat doğrusu benim verdiğim gibidir. Kırmızı +5V, beyaz D-, yeşil D+, siyah GND dir.Google imagesteki şekle güvenirseniz benim gibi nerde hata var diye araken epey ugraşabilirsiniz :)
Devreyi kurup lehimledikten sonra USB kablosunu bilgisayarınıza takın. Açılan menülerden donanımı otomatik olarak yükleyi seçin. Driver MBLAB altındaki ICD2 klasöründen otomatik olarak yüklenecek. Donanımınız başarıyla yüklendiyse aygıt yöneticisinde görebilirsiniz. MBLAB ı açın ve "Programmers" sekmesi altından ICD2 yi seçin. Karşınıza kurulum sihirbazı gelecektir. Burdaki seçenekleri ihtiyacınıza göre seçin. Daha sonra "Download ICD2 Operating System" ile 16F877A ya firmware'ini download edin. Bu işlemlerden sonra Settings altında "Status" sekmesinde voltaj testlerinin başarılı olduğunu gösteren "Pass" yazısını görmelisiniz. Aynı zamanda bağlantı durumu altında "Connected" yazısını görmelisiniz. "Power" sekmesinde ise ideal gerilimler olan 5V, 12V, 12V civarı gerilimler görmelisiniz. Aşağıdaki şekillerde görülebilir.
Buraya kadar geldiyseniz artık MBLABta yazdığınız programları build iconuna tıklayarak, hiç bir değişiklik yapmadan, bir şey söküp takmadan ICSP üzerinden anında PIC'e hızlı bir şekilde atabilirsiniz.Şimdi debug işlemlerini inceleyelim. ICD2 hem programlayıcı hemde debugger olarak aynı anda çalışamamaktadır. Ama debugger olarak çalıştırdığınızda yazdığınız kodu programlayabilir.Programlayıcı ile programlayıp debugger a geçmenize gerek yok. Debugger olarak çalıştıracaksanız yazının en başındaki fotoğrafa göre sol üstteki jumper LED tarafında takılı olmalıdır.
Ben debug için elime ilk geçen PIC olan 18LF4685 i kullandım.Bu PIC için destek verilen break point sayısı 3 tür.Break point sayısı ve debug hızı PIC e göre değişmektedir.Debugger için ICD2 yi seçin. MPLAB debug araçlarını ekrana taşıyacaktır. Aşağıdaki şekilde bahsettiğim araçları görebilirsiniz.Bu yazıyı okuduğunuza göre programcılıkla ilgilenen bir kimse olduğunuzdan bu butonların anlamlarını biliyorsunuzdur, burada anlatmayacağım.
Şimdi test için bir kod yazalım. Ben anlatımda kullanmak için aşağıdaki anlamsız kodu yazdım :) Koddan görüldüğü gibi değişkenler üzerinde işlem yapılmakta ve SFR kullanılmaktadır ( PORT işlemleri).
#include<p18f4685.h>
#pragma config OSC=HSPLL, WDT=OFF, MCLRE=ON, PBADEN=OFF, LVP=OFF
void main()
{
int a=2,b=3,c;
TRISD=0;
LATDbits.LATD7=1;
c=PORTD;
c=a*b;
PORTD=c;
while(1)
;
}
Kodu yazdıktan sonra aşağıdaki noktalara breakpoint koyalım ve adım adım debug ederek a, b, c yerel değişkenlerinin değerlerini ve PORTD nin değerini kontrol edelim.
Şimdi adım adım debug yapalım. Aşağıdaki şekilden anlattıklarımı izleyebilirsiniz. Aşağıdaki şekil 4 parçaya bölünmüştür. Mouse ile değişkenlerin üzerine gittiğinizde o anki değerlerini görebilirsiniz. a ve b değişkenlerine bildirim esnasında 2 ve 3 değerleri atanmıştır, c değişkenine ise bir değer atanmamıştır, dolayısıyla c değişkeninin içerisinde çöp değer olacaktır. Aşağıdaki şekilde 0x8010 olarak gözükmektedir. Daha sonra PORTD nin pinleri çıkış olarak atanmış ve D7 pini set edilmiştir. Bu durumda PORTD nin değeri 0x80 dir.İlk break pointte görebilirsiniz. Bu esnada atama işlemi yapılmadığından c değişkeninin içerisinde halen çöp değer bulunmaktadır.Bir adım ilerlediğinizde c saklayıcısının içeriğinin 0x80 olduğunu görürsünüz. a*b işleminde durduğumuz için bu işlem henüz yapılmamıştır. Bir sonraki adımda c nin içeriği 2*3=6 olacaktır. D portunun değeri halen 0x80 dir. Bir sonraki basamakta c saklayıcısındaki a*b işleminin sonucu olan 6, D portuna atanmıştır. Değeri LATD saklayıcısının üzerine geldiğinizde görebilirsiniz.
Bir yazının daha sonuna geldik. Bu yazıda sizlere ICD2 klonu ile programlama ve debug işlemlerini anlatmış oldum, bir sonraki yazıda görüşmek üzere :)