ilk yapmanız gereken içinde USB modülü olan bir Pic seçmek ve Pic'in modeline göre Mplab ile C18,C30 veya C32 derleyicilerinden biri/birkaçı yüklü olması gerekir. Bunların yanında microchip'in her konuda derdinize deva olabilecek "Applications Library" uygulama kütüphaneleri yüklü olmalıdır bu kütüphane aşağıdaki linkten indirilebilir.
Üye Olmadan Linkleri Göremezsiniz.
Üye Olun veya Giriş YapınŞuan için(20.06.2011) en güncel kütüphane aşağıdadır.
Üye Olmadan Linkleri Göremezsiniz.
Üye Olun veya Giriş YapınYüklediğinizde "C:\"'nin altında "Microchip Solutions" adında bir klasör oluşturur. USB bootlader dosyaları için aşağıdaki dizine ulaşın
C:\Microchip Solutions\USB Device - Bootloaders\HID - Bootloader\
Kullandığınız Pic'e en yakın klasörün içine girerek projeyi açın
Ben PIC24FJ256GB106 kullanacağım o yüzden "HID Bootloader - Firmware for PIC24FJ256GB110 Family Devices" Klasörü içindeki "HID Bootloader for PIC24FJ256GB110 Family Devices.mcw" projesini çalıştırıyorum. Hiç bir şey yapmadan içim rahat etsin diye projeyi derliyorum ileride kodları değiştirdiğimde acaba eskiden çalışıyor muydu demiyim
Tamamdır dedikten sonra gelelim kodları kendi projemize uyarlamaya
Bootlader dosyamız Pic'in içine nasıl yerleşecek Reset Vectoru, İnterrupt vectorleri nasıl düzenlenecek bunları Linker Script ayarlar. Files panelinden "Linker Script" 'e sağ tıklayarak add diyoruz.
Proje klasörü içindeki "Boot loader linker files" klasörüne girerek buradan uygun linker scripti seçiyoruz. Ben "boot_hid_boot_p24FJ64GB106.gld" dosyasını seçtim. Daha sonra
Kullandığımız Pic'in modelini seçmek için "Configure/Select Device..." 'a tıklayarak pic modelini seçip OK diyoruz.
Sıra geldi Pic'in configurasyonlarını yapmaya bunun en kolay kısmı mplab'ın bize verdiği kolaylıklardan faydalanmaktır.
Bunun için "Configure/Configuration Bits..." adımını izleyerek ayarlar tablosuna ulaşıyoruz. Bu tablonun sol üst kısmındaki "Configuration bits set in code" check box seçili olursa derleyici bu tabloyu önemsemeden sizin kodlarda gerekli konfigurasyon ayarlarını yapmanızı bekler.
Dip not: Kullanmasakta bilelim
Aplication library'de ise bütün configurasyonlar kodlarda tanımlanmıştır main.c içinde CONFIG satırlarından bu ayarları değiştirebilirsiniz._CONFIG1( JTAGEN_OFF & GCP_OFF & GWRP_OFF & COE_OFF & FWDTEN_OFF & ICS_PGx2)
_CONFIG2( 0xF7FF & IESO_OFF & FCKSM_CSDCMD & OSCIOFNC_OFF & POSCMOD_HS & FNOSC_PRIPLL & PLLDIV_DIV2 & IOL1WAY_ON)
_CONFIG3( WPCFG_WPCFGDIS & WPDIS_WPDIS) //Disable erase/write protect of all memory regions.
Ama her zaman "Configuration bits" tablosu benim kolayıma gelmiştir o yüzden ayarları kodlarla yapmıyorum. Sol üst köşedeki check'i kaldırarak CONFIG satırlarını önemsemeden ayarlarımızı yapalım.
USB haberleşmesi için gereken registerlar aşağıdadır.
Internal USB 3.3V regulator disable bit -> 96Mhz PLL Disable -> Bu register enable konumundadır disable yapılamaz cristalden gelen frekansı katlayarak 96 Mhz'e çıkartır
USB 96Mhz PLL Prescaler Select Bits -> Kullandığınız kristale göre USB haberleşme frekansı bu registerdan ayarlanır. PIC, 96 Mhz'e ulaşmak için frekansı kaça katlaması gerektiğini bu register sayesinde hesaplar. USB haberleşmesinde atlanmaması gereken registerlardan biridir.
İşin kolay kısmı bitti gelelim kodları kedimize göre uyarlamaya
Pic ilk açılışta sizin tamınladığınız koşula bakar ve Programınızın mı yoksa Bootlader kodunun mu koşacağına karar verir.
işte bunuda ana döngünün başlangıcında ki kod ile yapar
#if defined(__18CXX)
void main(void)
#else
int main(void)
#endif
{
mInitSwitch2();
if((sw2==1) && ((RCON & 0x83) != 0)) //buton basılı ise sw2'den 0 bıraktığımızda 1 döner
{
__asm__("goto 0x1400");
}
InitializeSystem();
RCON reset control registerıdır bu registerda
EXTR: External Reset (MCLR) Pin bit
BOR: Brown-out Reset Flag bit
POR: Power-on Reset Flag bit
yukarıdaki resetlerden herhangi biri oluşmamış ve Sw2 butonuna basılmamışsa koşulun içine girer ve programımız başlar. Program koşulun içine girmezse bootlader programı başlar.
Devremize göre butonun pinini değiştirmek için "HardwareProfile.h" kütüphanesinin içinde sizin picinize uygun hardware profil dosyasından gerekli düzeltmeyi yapabilirsiniz. Benim kullandığım model için "HardwareProfile - PIC24F Starter Kit.h" dosyası kullanılıyor. Bu dosya içinde led ve buton pinlerini projemize uygun şekilde düzenleyebiliriz. Eğer 2 adet uyarı lediniz yoksa tek led kullanacaksanız tanımları aşağıdaki gibi değiştirebilirsiniz.
#define mGetLED_1() ((TRISG & ~0x0180)?1:0)
#define mGetLED_2() mGetLED_1()
#define mGetLED_3() mGetLED_1()
#define mGetLED_4() mGetLED_1()
hiç led kullanmayacaksanız ise "main.c" 'de "BlinkUSBStatus(void)" fonksiyonu içindeki tanımları değiştirebilir yada silebilirsiniz.
Gerekli düzenlemeleri yaptıktan sonra programı derliyoruz bir problem yoksa pice yüklüyoruz.
Şimdi USB kablosu takılı iken tanımladığımız butona basılı tutarak işlemciye enerji verdiğimizde bootlader kodu koşmaya başlayacaktır.
Driverı otomatik tanımazsa Driver dosyalarını "C:\Microchip Solutions\USB Tools" klasöründe bulabilirsiniz.
Bootladerımız hazır artık bu kodları unutabiliriz şimdi bootlader ile yükleyeceğimiz koda gelelim. Tek yapmamız gereken bootloaderını hazırladığımız işlemci ile yapılmış herhangi bir koda Aplication Linker Script dosyası eklemek, bu dosyaya da Bootlader klasörünün içindeki "\Application Files" klasöründen ulaşabiliriz. Proje dosyanıza bu kodu ekleyerek derlediğinizde oluşan hex dosyası yüklemeye hazırdır.
Yüklemek için Microchip USB HID Bootlader programı gerekli bu programa aşağıdaki dizinden ulaşabilirsiniz.
C:\Microchip Solutions\USB Device - Bootloaders\HID - Bootloader\HIDBootLoader.exe
Programı açın
USB kablosu takılıyken Bootlader kodunu çalıştırdığınızda programda "Device Attached" yazdığını gördüğünüzde tamamdır.
"Open Hex File" Butonu ile pice yükleyeceğiniz hex dosyasını gösterin ve "Program/Verify" Butonu ile işlemi tamamlayın.
Kolay gelsin herkese
Rev 1.(29.06.2011) Configuration Bit Tanımları Eklendi.