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ı buradan 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.
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) :
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.
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.
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…
İsterseniz bootloader yüklü PIC18F4550 gönderebilirim.
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.
PIC programlayıcının ICSP soketi ile usb hid bootloader programını tekrar atabilirsin.
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ı.
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.
Başka bir programlayıcı ile bootloader yüklemeyi deneyin.
Merhabalar bu yöntemle pickit3’den daha mı hızlı program atılıyor? Teşekkürler kolay gelsin.
Brenner’dan daha hızlı program atılıyor. pickit3 kullanmadım.
hocam bu devreyi 16f877 ile de yapmk mümkün mü?
877 de USB portu yok. Dolayısı ile yapılamaz.
usb port olup olmadığını nasıl öğrenebiliriz?
Datasheetinden öğrenebiliriz.
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.
PIC18F4550’den aldığınız değerleri USB ile PC’ye göndereceksiniz. Kayıt işini PC tarafındaki program yapacak.
ccsc dilinde yazıyorum.
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…
ö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
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ı.
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!
Bu tür projelerde var. Log tutma PC tarafında yapılıyor. Dosya olarak usb flash a kaydedilebiliyor.
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…
PC de kullandığınız prg dilinde text dosya nasıl oluşturulur? konusunu araştırınız.
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
Yapılacak işler PC tarafında yapılacak. Çünkü flash disk’i pc tanır.
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
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.
Hocam bu devreyi 16f628a yada 16f648 yapmak mumkunmudur?
USB olmayan ir pic ile olmaz. USB olan bir pic ile yapılabilir.
Ancak ISCP ile başka bir programlayıcıdan program atılmak suretiyle USB olmayan piclerde olabilir.
Ayrıntılı bilgi için https://mikrodunya.wordpress.com/2012/01/08/icsp-ile-piclerinizi-sok-tak-derdinden-kurtulun/
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.
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??
Bootloader sadece prg yükleme için kullanılıyor. Onunla ilgisi yok. Konf ayarları ile olabilir. Blogumda yapılan uygulamaları inceleyiniz..
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.
Geri bildirim: SPI haberleşme ve Max7219 | elektrokod
merhaba pcbler ulusta kalmamış 10 adet için yardımcı olabilirmisiniz
kargo adresinizi verirseniz ptt kargo ile gönderebilirim.
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