TEKNİK YAZI

Microchip Pic mikrodenetleyicileri için Seri Bootloader ( PIC 16F87X, PIC 16F88 veya PIC18F )

Herkese selamlar;

Sitemizi yeni kurduğumuzdan dolayı yazı sayımız fazla değil ve iş haricindeki vakitlerimizde genelde sıkıntı çekilen önemli konular üzerine yazılarımızı yazmaya devam edeceğiz. Bugünkü yazımızda ise genelde çok detaylı anlatılmamış olan Bootloader yazılımından bahsedeceğim.

Bootloader yazılımı mikrodenetleyicilere bir defaya mahsus yüklenen özel bir programdır.  Pickit serisi, MPLab ICD serisi veya piyasada bulunan anonim pic programlayıcılar ile her defasında elektronik kartımıza program atmak zorunda kalırız. Bootloader yazılımı sayesinde bu zahmetten birazcıkta olsa kurtuluyoruz.

Tabi bootlader kullanımı tüm Pic ailesi için kullanılan bir seçenek değildir.  Sadece bootstrap loader veya bootstrapping adı verilen özelliğe sahip olan 16F87X, 16F88 veya 18 serisi işlemciler üzerinde bootloader yazılımı kullanılabilir.

Şimdi teori kısmına fazla inmeden uygulama yazılımımızı anlatalım. Kullanacağımız bootloader yazılımının ismi PicPgm Bootloader.   Öncelikle Bootloader yazılımının mikrodenetleyici hafızasında nasıl yer aldığını görelim.

Bootloader memory mapping pic 18f

Bootloader memory mapping pic 18f

 

BOOTLOADER YAZILIMININ KENDİ MİKRODENETLEYİCİMİZE UYARLANMASI

PicPgm bootloader yazılımının source kodlarını bu linkten indirebilirsiniz.  Default olarak PIC 18F458 için yazılmış olan kodu 18F2585 için revize edeceğiz.

1.  bootloader.h dosyasının içeriğinin değiştirilmesi

#define BOOTLOADER_PIC18F2585
 
#ifdef BOOTLOADER_PIC18F2585
 
#include <18F2585.h>
#device adc=8
 
#FUSES HS
#FUSES NOPROTECT                       
#FUSES NOLVP                 
#FUSES NOWDT                    
 
#use delay(clock=10000000)
 
#endif

bootloader.h dosyasımızın içeriğini bu şekilde değiştiriyoruz. Tabi kendi projenizde kullandığınız #FUSES’ları örneğimizinkinden farklı olabilir, ekleyip veya çıkarabilirsiniz.

2. bootloader.c dosyasının içeriğinin değiştirilmesi

//.....
#use rs232(baud=115200,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,ERRORS)
//.....

Buradaki satırdan kullanmak istediğiniz baudrate hızını ve kullancağınız PIN’leri ayarlayabilirsiniz.

//.....
#ORG BOOTLOADER_START
void main()
{
    setup_adc(ADC_OFF);
 
    if (input(BOOTLOADER_PIN)) // BOOTLOADER_PIN > PIN_A5
    {
        printf("BOOTLOADER başladı\r\n"); //Bootloader açılırsa size bu yazıyı Rs232 üzerinden gönderebilir.
        bootloader();
    }
 
    #asm
    goto RESET_VECTOR
    #endasm
} 
 
//....

Burada gördüğünüz gibi örnek olarak PIN_A5’e bir buton bağlayacağız. Daha sonrasında sisteme elektrik verildiğinde ilk olarak bootloader yazılımımızın main fonksiyonu çalışacağı için buton basılıysa eğer hemen bootloader programımız aktif hale gelecektir ve size “BOOTLOADER başladı” yazısını göndererek göndereceğimiz hex dosyasını beklemeye başlayacaktır.

3. Kendi yazılımımıza eklenmesi gereken yeni hafıza adreslerinin girilmesi

Yukarıda hafıza adreslerinin yeniden belirlenmesi şeklinde bir şekil eklemiştik. İşte kendi kodumuzun bootloader kodunun altına yerleşmesi için aşağıdaki şekilde bir kod parçası eklememiz gerekiyor.

#include <18F2585.h>
 
#fuses HS,NOPROTECT,NOLVP,NOWDT
#use delay(clock=10000000)
#use rs232(baud=115200,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
 
//Bu alttaki iki satırı ekliyoruz.
#build (reset=0x400, interrupt=0x408)
#org 0, 0x3FF {}

 PICPgm BOOTLOADER YAZILIMI İLE HEX DOSYASININ YÜKLENMESİ

picpgm-bootloader_yazilimi

PICPgm Bootloader yazılımı arayüzü

 

 

 

 

 

 

 

Görmüş olduğunuz minik yazılımı ise bu linkten indirebilirsiniz. Programı ilk çalıştırdığınızda sistemde birkaç .dll dosyasını bulamayabilir. Bu durumda sisteminize .dll dosyalarını internetten indirip yüklerseniz program çalışacaktır. Problem yaşarsanız istediğiniz taktirde dll dosyalarını buraya yükleyebilirim. Programı çalıştırdığınızda elektronik kartınızı bağlayıp yukarıda belirtmiş olduğumuz butona basarak başlattığınızda .hex dosyasını beklemeye başlayacaktır. Browse Hex butonuna basarak yüklemek istediğiniz kendi yazılımınızı yükleyeceksiniz ve Download Hex butonuna bastığınızda kısa bir işlem sonrasında artır programınız kart üzerinde çalışıyor olacaktır. Bir sonraki farklı program yükleme isteklerinizde ise yine butona basarak sistemi açtıktan sonra PICPgm programı ile kart üzerine yeni yazılımınızı yükleyebilirsiniz.

Umarım faydalı bir yazı olmuştur. Yaşadığınız sorunları yorumlara yazarsanız yardımcı olmaya çalışırım. Selametle.

  • Hocam teşekkür ederim, güzel bir bilgi kaynağı olmuş. Boş bir vaktimde deneyeceğim. SD kart bootloader hakkında bilginiz varsa, bilgilerinizden istifade etmek isteriz.

  • Metin KOÇ

    Not alıyorum, o konuda da bir çalışma yapıp sizinle paylaşmaya çalışacağım.

  • faruk demir

    hocam picpgm programında sadece com6ya kadar destekliyor.usb rs232 dönüştürücü takınca com7 çıkıyor bende.program atamıyorum.ne tür bir öneriniz olur bu sorun hakkında

  • faruk demir

    üstte yazılan sorunu çözdüm ama programı atamadım.16f877a kullanıyorum.programı atarken a5’e basılımı tutuyoruz yada her a5’e bastığımızda program bootloader’a mı gidiyor.orasını anlayamadım

    • Metin KOÇ

      Butona basılı tutarak elektriği veriyorsunuz ve Örneğin Hyper terminalden dinlediğinizde size “BOOTLOADER başladı” yazısı gönderecektir. Sonrasında butonu bırakıcaksınız ve Hyper terminali kapatıcaksınız. Pigpgm yazılımına yüklemek istediğiniz Hex dosyasını yükleyeceksiniz ve port-baudrate ayarları seçildikten sonra Download butonuna basıcaksınız.

  • Eline sağlık abi. Devamını bekliyoruz.