30

AĞS

2010

ICD2 Clone PIC Programmer Debugger Yapalım

Yazan: Barış Samancı
Kategoriler:PIC

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 :)

Yorumlar
Armağan YILMAZ
20 Eki 2010 Çarşamba, 09:56 tarihinde yazmış.

Merhaba Barış Bey. Bende bu devreyi yaptım lakin usb aygıtı tanınmadı diye mesaj alıyorum. Bir ara tanıdı bu seferde VPP voltajında sorun yaşadım. Sizin kullandığınız bobinin değeri nedir. Resimden anladığım kadarıyla 120uH. Yardımcı olursanız sevinirim. Saygılarım..

20 Eki 2010 Çarşamba, 11:23 tarihinde yazmış.

Merhaba, evet ben 120uh kullandım ama 150, 180 kullananlarda var.Gerilimleri değiştirmiyor. Eğer usb aygıtı tanınmadı diyorsa sırayla şunları deniyebilirsin. 18F4550 nin yazılımını birdaha yükle. USB bağlantılarını kontrol et. 18F4550 nin kristalindeki kapasitelerin değerini değiştir (edaboard forumunda bazı kullanıcıların sorununu çözdüğünü hatırlıyorum). İlk aklıma gelen bunlar. Driverı MBLAB altından otomatik buluyor. Kurulunca aygıt yöneticisinde gözükmesi lazım.

Armağan YILMAZ
21 Eki 2010 Perşembe, 20:17 tarihinde yazmış.

Teşekkür ederim Barış Bey. Şimdilik Sorun çözüldü gibi ama hala sorunlar var. MCLR VPP high hatası alıyorum. 14..15V civarında bir değer. Ben 34063 ü ve mcp41010 u devre dışı bıraktım sistemi 5 v usb ile VPP yi de 12 v harici verdim gayet sağlıklı oldu. Ama işte harici beslemeden kurtulmam lazım.

Kaan Oğlakçı
05 Kas 2011 Cumartesi, 00:27 tarihinde yazmış.

armağan bey merhaba bende ıcd2 programmer topladım ama sizin söylediğiniz gibi bendede aygıt algılanmadı hatasını veriyor bu konu için bana yardımcı olabilirmisiniz saygılarımla.

Adınız *:
e-Mail Adresiniz *:  ??
Web Siteniz:
Yorumunuz *:
Kalan karakter sayısı: 500
 
 

Tasarım ve Programlama Barış SAMANCI
Her hakkı saklıdır.
barissamanci.net  ©  2010-2018