USB HID Bootloader PIC18F4550 Deney Kartı

DeneySeti_PIC18F4550_SimilasyonBootloader ile herhangi bir programlayıcı cihaz olmaksızın programlama yapılabilir. İki çeşit bootloader kullanılmaktadır. Birincisi RS232 portu ile diğeri USB Portu ile. RS232 portundan bootloader ile programlama yapmak için voltaj seviyelerinin TLL seviyesine dönüştürülmesi gerekir. Bunun için  max232 gibi dönüştürücü entegreler kullanılmaktadır.

USB HID Bootloader ise sadece USB konnektörü kullanarak yapılmaktadır. Aynı zamanda çok hızlı programlama yapmaktadır.

USB HID Bootloader ile programlama yapmak için; USB portu ve konnektörü olan USB HID Bootloader yazılımı yüklenmiş PIC ve USB HID Bootloader yazılımı yeterlidir.

Microchip firmasının kendi yazılımı ve USB HID bootloader yazılımı olmakla birlikte daha kolay ve sade olmasından dolayı mikro elektronika firmasının bootloader yazılımını ve USB HID Bootloader yazılımını tercih ettim.

USB HID Programlama için mikro Elektronikanın USB bootloader programı buradan indirilebilir. Ekran görüntüsü aşağıdadır.

usb bootloader

USB HID Bootloader ile programlama 4 adımda gerçekleşmektedir.

1. USB Bootloader yazılımı yüklenmiş PIC USB Portuna bağlandığında 5 sn süre ile USB simgesi kırmızı olur.

2. Bu 5 sn süre içinde “Connect” butonuna basıyoruz.

3. Yüklenecek .hex dosyayı seçiyoruz.

4. PIC’e yüklemek istediğimiz programı yüklüyoruz.

Artık PIC’e program yüklenmiş durumdadır. Program yüklendikten sonra PIC reset atıp 5 sn sonra yüklediğimiz programla çalışmaya başlar. Burada dikkat edilmesi gereken husus PIC’e attığımız program hemen çalışmaz. 5 sn bootloader modunda bekler.

Bununla ilgili video aşağıdadır.

Deney Kartının Adı :

USB HID Bootladerli, PIC18F4550 Deney Kartı

Deney Kartının Amacı :

PIC programlamayı  öğrenmeyi kolay, hızlı ve ekonomik olarak  sağlamak

Deney Kartının Özellikleri:

  • USB HID Bootloader ile PIC18F4550’ye hızlı program yükleme
  • Beslemeyi USB Port ile bilgisayardan alır. Ayrıca harici belemeye ihtiyaç yoktur.
  • Kart üzerinde 3.3V besleme için voltaj regülatörü bulunmaktadır. Böylece 3.3V ile çalışan uygulamalar yapılabilir.
  • Bütün pinler sıra soketlere taşınmıştır. Dolayısı ile kablo ile breadborda kolaylıkla taşınabilir.
  • PIC ile PC arasında en hızlı iletişim olan USB portu kart üzerinde bulunmaktadır. Böylece program yüklemenin yanında  PIC’ten bilgisayara veya bilgisayardan PIC’e veri  transferi yapılabilir.
  • Kart üzerinde Reset butonu bulunmaktadır. Reset butonu ile program yeniden başlatılabilir veya yeni program yüklemesi yapılırken USB kablo sök/çıkar işlemine gerek kalmadan daha hızlı bir şekilde yükleme yapılabilir.
  • Kart üzerinde kullanıcı butonu bulunmaktadır. Bu buton RB0 pinine pull-up direnciyle bağlanmıştır. Buton uygulamaları, kesme uygulamaları, sleep moddan uyandırma uygulamaları yapılabilir.
  • Kart üzerinde üç adet led bulunmaktadır. Bu ledler aracılığı ile program içinde durum izlemesi veya sonuç görmek için kullanılabilir.
  • Kart üzerinde 20Mhz kristal bulunmaktadır. Program içinde PLL kullanarak 48Mhz hızda kullanabilirsiniz.

Devre Şeması:

DeneySeti_PIC18F4550_Similasyon

Baskı Devresi (PCB) :

DSC_0135

Kart İle Örnek Uygulamalar:

Projenin konfigürasyon ayarları aşağıdaki gibi olmalıdır. Çünkü bootloader ona göre derlenmiştir.

Uygulama 1:

Bu uygulamada en basitinden bir led’in yanıp sönmesini yapacağız. RE0 pinile bağlı Led’i blinking (Yak/söndür) yapacağız.

#define LED_0  LATE0_bit
void main()
{
  TRISE=0;
  PORTE=0;
  while(1)
  {
     LED_0=~LED_0;
     Delay_ms(1000);
  }
}

Yukarıda görüldüğü gibi çok sade basit bir program. Bu programla RE0 pinine bağlı led 1 sn yanacak 1 sn sönecek.

Uygulama 2:

Bu uygulamada bcd olarak 8’e kadar sayan bir sayıcı yapacağız.  Kullanıcı butonuna her bastığında bcd olarak ledler sayıyı gösterecek.

#define BUTON PORTB.B0

unsigned char sayi=0;

void main()
{
  ADCON1=0x1F; // Analog girişler kapalı- Bütün analog pinler dijital-
  TRISB=1; // Buton giriş diğerleri çıkış
  TRISE=0; // PORTE çıkış
  LATE=0x07; // Bütün ledler ON
  Delay_ms(1000); // 1 sn yanık kalsın
  LATE=0; // Bütün ledler OFF
  do
  {
    if(!BUTON)
    {
       Delay_ms(180);
       sayi++;
       if(sayi==8) sayi=0;
       PORTE=sayi;
       while(!BUTON);
    }
  }while(1);
}

Uygulama 3:

Bu uygulamada bcd olarak 8’e kadar sayan bir sayıcı yapacağız.  Ancak sayma işlemi kesme içinde gerçekleşecek. Ana programda herhangi bir satır yok. Kullanıcı butonuna her bastığında bcd olarak ledler sayıyı gösterecek.

#define BUTON PORTB.B0

unsigned char sayi=0;
//---------------------------------
void interrupt()
{
  if(INTCON.INT0IF)
  {
    INTCON.INT0IF=0;
    sayi++;
    if(sayi==8) sayi=0;
    LATE=sayi;
  }
}
//--------------------------------------
void main()
{
 ADCON1=0x1F; // Analog girişler kapalı- Bütün analog pinler dijital-
 TRISB=1; // Buton giriş diğerleri çıkış
 TRISE=0; // PORTE çıkış
 //----Kesme Ayarları----------
 INTCON.GIE=1; // Global kesmeye müsade et
 INTCON.INT0E=1; // INT0 kesmesine izin ver
 INTCON.INT0IF=0; // Kesme oluştu bayrağını temizle
 INTCON2.INTEDG0=0; // düşen kenar kesme
 //----------------
 LATE=0x07; // Bütün ledler ON
 Delay_ms(1000); // 1 sn yanık kalsın
 LATE=0; // Bütün ledler OFF
 do
 {
    // Ana prg boş
  }while(1);
}

Bu programda RB0 pinine bağlı olarak INT0 kesmesi kullanılmıştır. Kesme ayarları programda gösterilmiştir. Daha ayrıntılı bilgi için önceki kesmelerle ilgili yazılarıma bakılabilir.

Bu uygulamaları deney kartı üzerinde yapalım.

Kodların derlendiğini .hex dosya oluşturulduğunu varsayarak sırayla işlemleri yazalım;

– PC’de USB HID Bootloader programını açıyoruz.

– Kartı USB porta taktığımızda hemen (5 sn içinde) “Connect” butonuna tıklıyoruz.

– “Browse for HEX” butonuna tıklayarak yüklemek istediğimiz .hex dosyayı seçiyoruz.

– Son adım olarak “Begin Uploading” butonu ile PIC’e programı yüklüyoruz.

Görüldüğü gibi mikro saniyeler içinde program yüklenecek ve PIC tekrar başlıyacaktır. yaklaşık 5 sn sonra PIC’e yüklediğimiz program çalışmaya başlayacaktır.

Daha sonraki programı yüklemek için RST butonuna basıyoruz ve yukarıdaki adımları tekrarlıyoruz.

(NOT: Burada derleyici olarak Mikroc kullandık. Başka bir derleyici ile yapılan program da aynı şekilde yüklenebilir. )

Uygulamaların videosu :

Uygulama 4: USB HID Sayıcı

Bu uygulamada USB Hid Terminal üzerinde bir sayıcı yapacağız.  Ancak sayma işlemi kartı üzerindeki butonla yapılacak. Butona basıldığında RE0 pinine bağlı led butona basılı kaldığı müddetçe yanacak ve USB port ile PC’ye sayı bilgisi gönderilecektir.

void main()
{
  ADCON1=0x1F; // Analog girişler kapalı- Bütün analog pinler dijital-
  TRISB=1; // Buton giriş diğerleri çıkış
  TRISE=0; // PORTE çıkış
  LATE=0x07; // Bütün ledler ON
  Delay_ms(1000); // 1 sn yanık kalsın
  LATE=0; // Bütün ledler OFF
  HID_Enable(&readbuff,&writebuff); // Enable HID communication
  do
  {
    if(!BUTON)
    {
      LED_0=1;
      Delay_ms(180);
      sayac++;
      USB_Yaz(sayac);
      while(!BUTON);
      LED_0=0;
    }
  }while(1);
}

Uygulamanın USB Kısımları önceki yazılarımda anlatıldığı için onları koymadım. Sadece ana programı ekledim.

Bu uygulamada kullanacağımız USB Terminal programı mikroelektronikanın sitesinden indirilebilir. Ayrıca buradan da indirebilirsiniz.

Bu uygulamaları deney kartı üzerinde yapalım.

Kodların derlendiğini .hex dosya oluşturulduğunu varsayarak sırayla işlemleri yazalım;

– PC’de USB HID Bootloader programını açıyoruz.

– Kartı USB porta taktığımızda hemen (5 sn içinde) “Connect” butonuna tıklıyoruz.

– “Browse for HEX” butonuna tıklayarak yüklemek istediğimiz .hex dosyayı seçiyoruz.

– Son adım olarak “Begin Uploading” butonu ile PIC’e programı yüklüyoruz.

Görüldüğü gibi mikro saniyeler içinde program yüklenecek ve PIC tekrar başlıyacaktır. yaklaşık 5 sn sonra PIC’e yüklediğimiz program çalışmaya başlayacaktır.

Daha sonraki programı yüklemek için RST butonuna basıyoruz ve yukarıdaki adımları tekrarlıyoruz.

PIC tekrar başladığında bütün ledler 1 saniye yandıktan sonra sönecektir. PC’den USB HID terminal programını açıyoruz. Orada USB PIC18F4550 Deney Kiti olarak cihazı göreceksiniz.

Görüntü aşağıdaki gibi olacaktır.

usbhid terminal

Butona basıldığında RE0’a bağlı Led yanacak ve USB Terminalde sayı gösterilecektir.

Uygulama 5: PC’den Deney Kartı Kontrolü

Bu uygulamada USB Hid Terminal üzerinden göndereceğim sayı PORTE üzerindeki led’lerde görünecek.

void main()
{
 ADCON1=0x1F; // Analog girişler kapalı- Bütün analog pinler dijital-
 TRISB=1; // Buton giriş diğerleri çıkış
 TRISE=0; // PORTE çıkış
 LATE=0x07; // Bütün ledler ON
 Delay_ms(1000); // 1 sn yanık kalsın
 LATE=0; // Bütün ledler OFF
 HID_Enable(&readbuff,&writebuff); // Enable HID communication
 do
 {
   while(!HID_Read())
   {
     LATE=readbuff[0];
   }
  }while(1);
}

Uygulama 6: 7segment Sayıcı

Bu uygulamada Kart üzerindeki USER butonu ile ortak katot 4’lü mux 7 segment display ve USB Terminal üzerinde sayıcı yapacağız. USER butonuna her basıldığında birer artarak sonucu 7segment display ve USB HID termal üzerinde göreceğiz.

Not: Devre PCB’sinden bir miktar elimde mevcut . İsteyen olursa bootloader yüklü PIC18F4550 ve devre elemanları ile birlikte (Montajlı ve ya montajsız)  https://elektrokod.wordpress.com/proje-istekleri/ linkinden mesaj atabilirsiniz.

 

40 thoughts on “USB HID Bootloader PIC18F4550 Deney Kartı

  1. hocam merhaba öncelekile paylaşımlarınız için teşekkür ederim, kullandığınız USB HID bootloader yazılımını da paylaşabilirmisiniz,. mikroc sinin 18f2550 için örneği var ama bunun 18f4550 için nasıl uyarlandığını çözemedim…

  2. Merhaba,
    Paylaşımlarınız için çok teşekkürler. Benim devrede PIC18F4550 var. Entegre smd tipinde QFN kılıf 44 pinli. Kazara usb hid bootloader’i sildim. Kartı usb ile bilgisayara taktığımda haberleşmiyor. Aygıt yöneticisinde görülmüyor. PICKIT 3 ile bağlandığımda entegre okunuyor. Bunun için ne yapabilirim.

      • Cevabınız için teşekkürler,
        Pickit3 ile bağlantı yaptım. Auto import hex ile usb hid bootloader’i yükledim. Kartı usb ile bilgisayara bağlayınca kartı okumuyor. İlk başta kartı takınca aygıt yöneticinde insan arabirim aygıtları altında, hid uyumlu oyun denetleyicisi olarak görülüyordu. kart üzerinde usb ve ICSP konnektörleri var. ICSP soketini pickit 3 e taktığımda PIC18F4550 bulundu yazıyor. Aynı kartın yedeği var o normal çalışıyor. Pickit3 ile faal olan kartan read’i tıkladığımda program memory alanının tamamı o geliyor. Eeprom data kısmı ise normal değerleden oluşuyor. Bu entegre 44 pinli smd tipi, sizin entegre 40 pinli dip tipinde görülüyor. .Yüklediğim program uyum sağlamıyor olabilirmi.

      • Paket tipi önemli olmaması lazım. Bu kiti yurtdışından mı getirtmiştiniz? pickit3 bootloader programını okumuyor olabilir. Çünkü onun başlangıç adresi farklı.

  3. Kiti yurtdışından aldım. Bilgisayarımda PICkit3 Programmer Application Setup v3.10’ı internetten yükledim. İmport hex ve export hex kısımları aktif geliyor. Sizlerden aldığım usb Hid bootloader normal yükleniyor, Faal kartın dosyasını read yapınca program memory alanının tamamı 0 (sıfır) geliyor. read device+export hex file tıklayıp dosyayı kaydettiğimde program memory alanı 0 (sıfır) dan oluşuyor.

    İyi bayramlar.

  4. Merhabalar bu yöntemle pickit3’den daha mı hızlı program atılıyor? Teşekkürler kolay gelsin.

  5. hocam.benim soyle bi projem vardı.18f4550 ile ölçtüğüm akım,gerilim ve güç değerlerini tasarlamış olduğum kartın üzerindeki usb soketine elimde bulunan kingston usb sini takıp usb ye kaydetmek istiyorum.bunu nasıl yapabilirim.yada ne yapmalıyım.saygılarımla…acil.

  6. hocam tekrar merhaba.amacım pc kullanmadan sadece pıc 18f4550 nin ölçtüğü akım.gerilim ve güç değerlerini direkt usb ye kaydetmek istiyorum ccsc dilinde.kaydetdikten sonra usb yi söküp herhangi bilr pc ye takıp usb deki akım gerilim ve güç değerlerini okumak istiyorum.txt formatın da yada başka bi formatta.
    bunun için ne yapmalıyım yada ne yapabiliriz.
    usb yi nasıl konfigüre ederek bu şekilde çalışmasını sağlayabiliriz.
    saygılarımla…

  7. örnegin;tasarlamış olduğum 18f4550 li devre ye usb yi takıp 15 gün boyunca kayıt ettirecem.15 gün sonra gelip usb yi alıp pc ye takarak içindeki kayıtları okuyacam.
    usb kütüphane dosyalarıla ilgili biraz bilgim var ama nasıl yapacağımla ilgili bilgim yok.saygılarımla…acil

  8. bu sekilde sitelerden hiç bi bilgiye rastlamadım.hep pc ile haberleştirmekten bahsediliyor.sanırım değişik bi proje.
    bunu başardığımda/başardığımızda benim için bir ilk ve ilerleme olacak diye düşünüyorum.usb hariç diğer konularda hiç bi sıkıntım yok.olmadı.

  9. hocam araştırmalarım sonucunda yukarıda bahsettiğim gibi proje geliştiren olmamış.nedendir bilmiyorum.sd karta kayıt etmişler,pc ile haberleştirmişler,ama direkt usb ile haberleştirip usb ye direkt kayıt yaptırmamışlar.hayal kırıklığı içindeyim.yardımlarnızı bekliyorum…saygılarımla….acil!

  10. DOSYA OLARAK DERKEN HOCAM; .txt formatında dosya oluşturup veri kaydedebiliyormuyuz yani?
    YADA; Log tutma olayı pc tarafında gerçekleştiği için usb ye direkt olarak kayıt yaptırmak cok uzun bir hikayemi?
    VEYA;BU BAHSEDİLEN KONU YAPILABİLİYORSA ve elinizde kaynaklar varsa bana yardıcı olabilme durumunuz varmıdır?bunun için ne yapmalıyım…saygılarımla…

      • Elimde sd kartla olusturulan hatta baska prog dilinden ccsc diline cevirdigim kod var.hatta cevurmesini henuz tam olarak tamamlayamadim.peki bu usb icinde ayni mantikla gecerli olurmu.Cunku burada txt dosyssi olusturuluyor.o sd ye kaydediyor bense usb ye kaydetmek istiyorum.bunla ilgili hic bi dokuman bulamadim hocam.bundan sonrasi icin ne yapabiliriz.saygilarimla

  11. hocam merhabalar ben bu devreye ICSP’de eklemek istiyorum,nasıl bir değişiklik yapacağım bana şema üzerinden çizebilir misiniz ICSP eklemiş halini,teşekkür ederim

  12. Hocam Merhaba, USB HID bootloader yaptığım devreyi görüyor ve yükleme moduna geçiyor fakat ccs c de yazdığım bir programı USB HID bootloader a yüklediğimde parametre hatası veriyor. ccs c de yazdığımız programa birşeyler eklememiz gerekiyor mu? veya ccs c de yazdığımız programın bu loader ile kulanamıyor muyuz.

  13. Hi.
    There is a little problem in your schematic. You have to use 0.1 uf electrolytic capacitor out of 78L33 not 100nf ceramic cap. There is a difference.

    • Thank you Robin,

      47uF electrolytic capacitor had in the previous version. However, the USB port is clean enough to just put 100nF capacitor voltage output. The measurements are very stable and clean.

  14. Selamlar, Usb uzerınden step motor kontrol etmek istiyorum devreyi pc ye baglandıgımda pc devreyi gormuyor aygıtı tanımlamıyor.win7 yada win 10 pclerde denedım tanımlamadı.Bunu nedeni 18f4550 entegresini bootload yapmamamdan mı kaynaklanıyor acaba.Deney kartında pic i denemeden haberlesme saglayabılırmıyım yardımcı olurmusunuz??

  15. Selam hocam , ben pic18f4550 ye usb bootloaderi jdm programlayıcı ile yazdım şimdi usb ni pc ye koşdukda ses geliyor koşuldu diye. amma sizdeki bu mikroBootlader programi çipe koşulmuyor. ancak ben bunu microchip usb hid bootloader v2.6a programı ile deneyende orada çipin koşulduğunu görsedir. sizce bu programa koşulmamağın sebebi nedir ?

    • Frekans ayarlarındaki (Conf. Ayayrları) farklılıktan olabilir. Hızın 48 Mhz olması gerekir. Ayrıca belirli zaman aralıklarında PC ile bağlantı kontrolülün yapılması gerekir. Bu yapılmazsa olmaz.

  16. Geri bildirim: SPI haberleşme ve Max7219 | elektrokod

  17. merhaba ben utku belki hatırlarsınız. sizden microc içinden bu bootloader dosyasının nasıl ypıldığını anlatabilirmisiniz
    gerekeni yapaım sorun değil

mustafa için bir cevap yazın Cevabı iptal et