USB HID Bootloader'li PIC18F4550 Deney Kartı

Başlatan selimkoc, 13 Eylül 2014, 00:21:32

selimkoc

13 Eylül 2014, 00:21:32 Son düzenlenme: 13 Eylül 2014, 00:57:45 selimkoc
Bootloader 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ı http://www.mediafire.com/download/9v51c1aawkviz64/mikroBootloader_USB_HID.rar indirilebilir. Ekran görüntüsü aşağıdadır.




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.

[youtube http://www.youtube.com/watch?v=lFRp6AHLebY#ws]

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



Baskı Devresi (PCB) :


selimkoc

13 Eylül 2014, 13:53:45 #1 Son düzenlenme: 13 Eylül 2014, 15:02:39 selimkoc
Kart İle Örnek Uygulamalar:

Uygulamalarda MikroC IDE ortamı kullanılmaktadır.(Başka derleyiciler ile derlenmiş .hex dosyalar da USB HID Boootloader ile PIC'e yüklenebilir.)

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.
Kod Seç

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




mesaj birleştirme:: [time]14 Eylül 2014, 10:56:54[/time]

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.

Kod Seç

#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==8sayi=0;
       
PORTE=sayi;
       while(!
BUTON);
    }
  }while(
1);
}

selimkoc

14 Eylül 2014, 09:47:26 #2 Son düzenlenme: 14 Eylül 2014, 09:56:19 selimkoc
Uygulama 3:

Bu uygulamada bcd olarak 0-7 arası 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.
Kod Seç

#define BUTON PORTB.B0
 
unsigned char sayi=0;
//---------------------------------
void interrupt()
{
  if(
INTCON.INT0IF)
  {
    
INTCON.INT0IF=0;
    
sayi  ;
    if(
sayi==8sayi=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. )

Bu da yukarıdaki 3 programın deney kartına yüklenmesi ve çalıştırılması ile ilgili video

USB HID Bootloader PIC18F4550 Deney Kartı



Erhan YILMAZ

Elinize sağlık hocam güzel bir uygulama olmuş.
Waiting for humanity to compile the AI code that will kill humanity!

selimkoc

Teşekkürler. PIC ile USB uygulamaları mikroc ile çok kolay yapılabiliyor. Bu kartla USB uygulamaları da yapmaya çalışacağım.

selimkoc

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.
Kod Seç

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 http://www.mediafire.com/download/la872k0057e9i4l/Hid_Terminal.rar 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.



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

Başarılar...

selimkoc

Uygulama 5: PC'den Deney Kartı Kontrolü

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


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);
}


selimkoc

16 Eylül 2014, 14:26:13 #7 Son düzenlenme: 16 Eylül 2014, 22:58:18 selimkoc
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.

Devre Şeması :


muhendisbey

Merhaba
Elinize sağlık güzel çalışma olmuş, devamı gelir inşallah.
Size bir sorum olacak, Burada kullanılan PIC'e önce Pickit ile bootloader atmanız gerekmiyor mu?
İyi Çalışmalar.
Zulmü alkışlayamam, zalimi asla sevemem; Gelenin keyfi için geçmişe kalkıp sövemem.

selimkoc

Evet önce USB bootloader atılması gerekiyor.

muhendisbey

Bu bootloaderın linkini de eklerseniz daha faydalı olur diye düşünüyorum. Çünkü farklı tipte bootloaderlar var, bazıları third party.
Zulmü alkışlayamam, zalimi asla sevemem; Gelenin keyfi için geçmişe kalkıp sövemem.

selimkoc

17 Eylül 2014, 00:52:01 #11 Son düzenlenme: 17 Eylül 2014, 02:05:06 selimkoc
7 segment sayıcı uygulama videosu :

USB HID Bootloader Deney Kit 7 segment Display

mesaj birleştirme:: [time]17 Eylül 2014, 23:03:05[/time]


Uygulama 7: PWM

Bu uygulamada Kart üzerindeki USER butonu ile pwm duty oranı 10'ar arttırılıyor.
Kod Seç

unsigned char pwmOran
=127;
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
  
PWM1_Init(10000);
  
PWM1_Set_Duty(pwmOran);
  
PWM1_Start();
  while(
1)
  {
    if(!
RB0_bit)
    {
      
LATE0_bit=1;
      
Delay_ms(180);
      
pwmOran+=10;
      
PWM1_Set_Duty(pwmOran);
      
LATE0_bit=0;
    }
  
  }
}


Bu da ölçüm sonuçları


selimkoc

Uygulama 8: Datalogger

Bu uygulamada SD/MMC kart kullanarak birer dakikalık aralıklarla LDR üzerindeki ışık değerini kaydedecek bir uygulama yapacağız. Zaman aralıklarını timer ve kesme kullanarak tespit edeceğiz.

Devre şeması :




selimkoc

USB HID Bootloder'li PIC Deney Kartını kullanan arkadaşlar kartla ilgili bir problem çıktı mı?

Başka derleyicilerle kullanan var mı?

M_B

Alıntı yapılan: selimkoc - 24 Eylül 2014, 16:46:05
USB HID Bootloder'li PIC Deney Kartını kullanan arkadaşlar kartla ilgili bir problem çıktı mı?

Hayır hocam herhangi bir sıkıntı yaşamadım.


İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet