CCS 18F4550 HID bootloader arıyorum?

Başlatan remzi, 07 Nisan 2015, 13:13:07

remzi

tacettin bey bootloader için hangi programı kullanıyorsunuz?

tacettin

#16
ilk hex atmak için pickit2 kullanıyorum.  daha sonra HIDBootloader.  linkin içine onuda yerleştirdim...

selimkoc

Mikroc'nin bootloaderi ile CSS de yazılmış .hex dosyaların yüklenmesinde problem olmaması lazım.

https://elektrokod.wordpress.com/2014/09/10/usb-hid-bootloader-pic18f4550-deney-karti/

Bu linkteki 2. uygulamayı CSS ile yazıp (congf parametreleri deney kitine göre olmalı-RST enable, frekans 20Mhz veya PLL ile 48Mhz) bana gönderir iseniz deneyebilirim.


thenorthstar

#18
Alıntı yapılan: selimkoc - 09 Nisan 2015, 10:25:25
Mikroc'nin bootloaderi ile CSS de yazılmış .hex dosyaların yüklenmesinde problem olmaması lazım.

https://elektrokod.wordpress.com/2014/09/10/usb-hid-bootloader-pic18f4550-deney-karti/

Bu linkteki 2. uygulamayı CSS ile yazıp (congf parametreleri deney kitine göre olmalı-RST enable, frekans 20Mhz veya PLL ile 48Mhz) bana gönderir iseniz deneyebilirim.


Hocam, CCs ile MikroC loader için bir örnek uygulama ( led yakı söndürme) yazar mısınız? ccs e herhangi bir reser vektor adresi yazmamız gerekiyor mu?
çünkü CCS de derleyince direkt 0. adresten başlıyor.

mesaj birleştirme:: 10 Nisan 2015, 01:31:10



mesaj birleştirme:: 09 Nisan 2015, 11:35:05

Merhaba Arkadaşlar,
MPLAB USB BOORLOADER ile oluşturduğum Hex kodunu yükledim devreme, 2 tane loader programı ile denedim,
1. si @tacettin  Hocamın verdiği Loader ile denedim yazdığım CCS kodunu USB den yükledi ve program çalışıyor. ;D sıkıntı yok.


Tekrar Bootloader moduna alıyorum ve busefer Mikrochip in kendi HID loader ile denedim, buda yükledim dedi fakat program çalışmadı, PIC in içini okum program yüklenmemişti. bu neden olur sizce. Bununla neden çalışmadığını anlamadım. :(


Mplab Proje Dosyası:

https://yadi.sk/d/zfKCEwZPfsN3V

Loader Dosyaları:
https://yadi.sk/d/W_4KG1LxfsNTF

Selamlar.

DaRt

ccs nin hangi versiyonunu kullanıyorsun bilmiyorum ama, ben microchip bootloaderı kullanırken ccs 5 ile yazdığım programlar bootloader üzerinde çalışmıyordu ancak derleme sonucu oluşan hex dosyasının ilk satırı ":020000040000FA" olacak şekilde ":020000040000FA" kodunu eklediğimde sorunsuz çalışıyordu. Şu anda ccs 4.068 kullanıyorum derleme sonucu bu satır otomatik olarak hex dosyasının ilk satırına yerleşiyor bununla ilgili olabilir senin sorunun da. dene istersen.

remzi

Alıntı yapılan: tacettin - 09 Nisan 2015, 02:13:22
hocam bende direk hex var malesef bacak değiştiremiyorum. indirme linki aşağıda...

http://dosya.co/zl91g7u9px9c/bootloader.rar.html

bu da benim yükleyip çalıştırdığım bir program...
#include <18f4550.h>
#use delay(clock=48MHz)
#include <usb_bootloader.h>
#byte portb=0xf81
#bit buton_up=portb.0
#bit buton_down=portb.1

      #define LCD_ENABLE_PIN  PIN_d0                                    
      #define LCD_RS_PIN      PIN_d1                                    
      #define LCD_RW_PIN      PIN_d2                                    
      #define LCD_DATA4       PIN_D4                                    
      #define LCD_DATA5       PIN_D5                                    
      #define LCD_DATA6       PIN_D6                                    
      #define LCD_DATA7       PIN_D7  

#include <lcd.c>
int sayi;
#define bekle delay_ms(100)


void yaz()
{
printf(LCD_PUTC, "\f SAYININ DEGERI\n       %u ",sayi);
delay_ms(10);

}

void main()
{
set_tris_d(0x00);
set_tris_b(0xff);

lcd_init();
delay_ms(10);

yaz();

   while(true)
   {
     if(buton_up)
     {
     sayi++;
     if(sayi>99) sayi=0;
     yaz();
     while(buton_up);     
     }
     
     if(buton_down)
     {
     sayi--;
     if(sayi>99) sayi=99;
     yaz();
     while(buton_down);     
     }
      
   }


}


Tacettin bey...
Dosyayı çok kotu bir yere upload yapmışsınız. Bilgisayar komple virüs oldu...

thenorthstar

Yadığım kod küçük olunca loader güzel çalışıyor.
Ama bunda çalışmadı nedenini anlamadım. :(

Bunda Çalışmadı:
#include <18F4550.h>
#device ADC=10
#fuses HSPLL,USBDIV,PLL5,CPUDIV1,VREGEN,NOWDT,NOPROTECT,NOLVP,NODEBUG,NOBROWNOUT   // 20 MHZ
#use delay(clock=48000000)
#build (reset=0x1100, interrupt=0x1108)  //code starts right after the bootloader
#org 0, 0x10FF {}                       //don't overwrite the bootloader

#define USB_HID_DEVICE     TRUE             
#define USB_EP1_TX_ENABLE  USB_ENABLE_INTERRUPT //Uçnokta1'de Kesme transferi aktif
#define USB_EP1_RX_ENABLE  USB_ENABLE_INTERRUPT    
#define USB_EP1_TX_SIZE    64                 //Uçnokta1 için maksimum alınacak ve gonderilecek
#define USB_EP1_RX_SIZE    64 

#include <pic18_usb.h>     
#include <USB_Driver.h>                //USB konfigurasyon bilgileri bu dosyadadır.
#include <usb.c>
#include <One_Wire.c>
#include <DS1820.c>

#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)

#define UcNokta1       1 

unsigned int16 Term;
unsigned int8 paket[64];
unsigned int8 Tam,Onda;
float Sicaklik;

void main()
{
   setup_timer_3(T3_DISABLED | T3_DIV_BY_1);
   
   set_tris_a(0x00);
   set_tris_b(0x00);
   set_tris_c(0x00);
   set_tris_d(0x00);
   output_a(0x00);
   output_b(0x00);
   output_c(0x00);
   output_d(0x00);
   
   
   usb_init();                      
   usb_task();                    
   usb_wait_for_enumeration();         //Cihaz, hazır olana kadar bekle
   
   while(TRUE)
   {  
      while(usb_enumerated())
      {
       if (usb_kbhit(1))             //Eğer pc'den yeni bir paket geldiyse
         {         
            usb_get_packet(UcNokta1, paket, 64); //paketi oku    
         //   output_high(pin_D1);
         }
           Term=Sicaklik*10;
           Tam=Term/10;
           Onda=Term%10;
           paket[1]=Tam;
           paket[2]=Onda;
           
         usb_put_packet(UcNokta1, paket,64, USB_DTS_TOGGLE); // Datayı Gönder..
         Sicaklik = ds1820_read();
         output_high(pin_d1);
         delay_ms(200);
         output_low(pin_d1);
         delay_ms(200);  
      }
         output_high(pin_d0);
         delay_ms(500);
         output_low(pin_d0);
         delay_ms(500);
   }
}


Bunda Çalıştı:
#include <18f4550.h>
#fuses HSPLL,USBDIV,PLL5,CPUDIV1,VREGEN,NOWDT,NOPROTECT,NOLVP,NODEBUG,NOBROWNOUT   // 20 MHZ
#use delay(clock=48000000)
#build (reset=0x1100, interrupt=0x1108)  //code starts right after the bootloader
#org 0, 0x10FF {}                       //don't overwrite the bootloader

void main()
{
   

   output_high(pin_d0);
   delay_ms(2000);
   output_low(pin_d0);

   while(TRUE)
   {  
            output_high(pin_d1);
            delay_ms(200);
            output_low(pin_d1);
            delay_ms(500);
   }
}

remzi

thenorthstar gönderdiğin dosyalardan hangi hex'i pic'e yüklemek gerekiyor?

thenorthstar

Alıntı yapılan: remzi - 09 Nisan 2015, 16:26:55
thenorthstar gönderdiğin dosyalardan hangi hex'i pic'e yüklemek gerekiyor?


Remzi hocam, HID Bootloader PIC18 Non J.hex yükle çünkü proje ismide aynı.

remzi

Az önce bende bootloader'ı çalıştırabildim.
HID Bootloader PIC18 Non J hex dosyasını 18F4550'ye attım.
Teşekkür ederim...

thenorthstar

#25
Alıntı yapılan: remzi - 09 Nisan 2015, 21:43:46
Az önce bende bootloader'ı çalıştırabildim.
HID Bootloader PIC18 Non J hex dosyasını 18F4550'ye attım.
Teşekkür ederim...

Rica ederim hocam,
hocam bende şöyle bir şey oluyor
Aşağıdaki kod, usb ile okuduğum sıcaklığı C# programında gösteriyorum, bootloader sız yüklediğimde sıcaklığı okuyup bilgisayarda görebiliyorum fakat bootloader ile yüklediğimde while(usb_enumerated()) bloğuna girmiyor port.d0 a bağlı ledi yakıyor.
bunun sebebi ne olabilir sizce
#include <18F4550.h>
#device ADC=10
#fuses HSPLL,USBDIV,PLL5,CPUDIV1,VREGEN,NOWDT,NOPROTECT,NOLVP,NODEBUG,NOBROWNOUT   // 20 MHZ
#use delay(clock=48000000)
#build (reset=0x1100, interrupt=0x1108)  //code starts right after the bootloader
#org 0, 0x10FF {}                       //don't overwrite the bootloader

#define USB_HID_DEVICE     TRUE             
#define USB_EP1_TX_ENABLE  USB_ENABLE_INTERRUPT //Uçnokta1'de Kesme transferi aktif
#define USB_EP1_RX_ENABLE  USB_ENABLE_INTERRUPT    
#define USB_EP1_TX_SIZE    64                 //Uçnokta1 için maksimum alınacak ve gonderilecek
#define USB_EP1_RX_SIZE    64 

#include <pic18_usb.h>     
#include <USB_Driver.h>                //USB konfigurasyon bilgileri bu dosyadadır.
#include <usb.c>
#include <One_Wire.c>
#include <DS1820.c>

#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)

#define UcNokta1       1 

unsigned int16 Term;
unsigned int8 paket[64];
unsigned int8 Tam,Onda;
float Sicaklik;

void main()
{
   setup_timer_3(T3_DISABLED | T3_DIV_BY_1);
   
   set_tris_a(0x00);
   set_tris_b(0x00);
   set_tris_c(0x00);
   set_tris_d(0x00);
   output_a(0x00);
   output_b(0x00);
   output_c(0x00);
   output_d(0x00);
   
   
   usb_init();                      
   usb_task();                    
   usb_wait_for_enumeration();         //Cihaz, hazır olana kadar bekle
   
   while(TRUE)
   {  
      while(usb_enumerated())
      {
       if (usb_kbhit(1))             //Eğer pc'den yeni bir paket geldiyse
         {         
            usb_get_packet(UcNokta1, paket, 64); //paketi oku    
         //   output_high(pin_D1);
         }
           Term=Sicaklik*10;
           Tam=Term/10;
           Onda=Term%10;
           paket[1]=Tam;
           paket[2]=Onda;
           
         usb_put_packet(UcNokta1, paket,64, USB_DTS_TOGGLE); // Datayı Gönder..
         Sicaklik = ds1820_read();
         output_high(pin_d1);
         delay_ms(200);
         output_low(pin_d1);
         delay_ms(200);  
      }
         output_high(pin_d0);
         delay_ms(500);
         output_low(pin_d0);
         delay_ms(500);
   }
}


thenorthstar

Arkadaşlar lütfen bu konuda yardımcı olabilur misiniz?
PC ile bağlantısız bi program açtığımda çalışmıyor fakat pc ile bağlantısı olmayan sadece bord üzerinde çalışan bir program açtığımda duzgun çalışıyor.

selimkoc

USB bağlantı frekansı 48Mhz olmalı. PLL ile 48MHz yükselttiniz mi?

baran123

USB Bağlantılarından emin misin ?
VUSB bacağından GND'ye 470nF bağlı mı ?

Fark edeceğini sanmıyorum ama bir de şöyle bir düzenleme yapabilirsin.
#fuses HSPLL,USBDIV,PLL5,CPUDIV1,VREGEN,NOWDT,NOPROTECT,NOLVP,NODEBUG,NOBROWNOUT   // 20 MHZ
#use DELAY(CLOCK=48MHz, CRYSTAL=20MHz, USB_FULL)


USB uygulamanın kodlarını paylaşabilir misin ? Bilgisayar programı  tarafı da dahil.

thenorthstar

Alıntı yapılan: Baran Ekrem - 13 Nisan 2015, 01:02:22
USB Bağlantılarından emin misin ?
VUSB bacağından GND'ye 470nF bağlı mı ?

Fark edeceğini sanmıyorum ama bir de şöyle bir düzenleme yapabilirsin.
#fuses HSPLL,USBDIV,PLL5,CPUDIV1,VREGEN,NOWDT,NOPROTECT,NOLVP,NODEBUG,NOBROWNOUT   // 20 MHZ
#use DELAY(CLOCK=48MHz, CRYSTAL=20MHz, USB_FULL)


USB uygulamanın kodlarını paylaşabilir misin ? Bilgisayar programı  tarafı da dahil.

Evet hocam VUSB bacağına 470 nf bağlı. Verdiğiniz kodu da denedim sonuç aynı.

CCS kodu ve PC programı aşağıdaki linkte .
https://mega.co.nz/#!gNF21aZT!lWPrZThRIud1pCzfhhONAkegAQJMpHQ2k96Ys4q7bI4
Bootloader ve Mplab Dosyaları
https://mega.co.nz/#!kY8AQTRb!Nht5aZ9PXsUSlb7r3u9DCKr5qhJFRJ37Ob3iGLtd3lA
https://mega.co.nz/#!1dEg3YLb!7WOmVqTOXKDZVJFKJ4BOWyPMB5Kxdxaoq4qViEGRDbk

Bootloader ile Yükleme yapınca kartın çalışması.
Eğer PC ile haberleşmeyi ( Aşağıdaki kodları )iptal edersem  Bootloader ile yükledikten sonra, kart üzerinde bulunan Butona basınca sayaç artırma, LED Yakma,LCD de sıcaklık gösterme güzel çalışıyor.Fakat bu kodları dahil edersem hiç birşey çalışmıyor.
#define USB_HID_DEVICE     TRUE             
#define USB_EP1_TX_ENABLE  USB_ENABLE_INTERRUPT 
#define USB_EP1_RX_ENABLE  USB_ENABLE_INTERRUPT    
#define USB_EP1_TX_SIZE    64                 
#define USB_EP1_RX_SIZE    64 

#include <pic18_usb.h>     
#include <USB_Driver.h>                
#include <usb.c>
#include <lcd_driver.c>
#include <One_Wire.c>
#include <DS1820.c>
#define UcNokta1       1 
.
.
.

void main()
{
:
:
   usb_init();                      
   usb_task();                    
   usb_wait_for_enumeration();         //Cihaz, hazır olana kadar bekle




Bootloadersız çalışma.
Eğer Bootloader özelliğini kapatıp derleme yaptıkdan sonra PICKIT 2 ile yazılımı yüklersen, Hem pc programı hemde kart üzerindeki tüm fonksiyonlar çalışıyor.

Bootloader Ayarları
//****************Bootloader Ayarları***************************************
#build (reset=0x1100, interrupt=0x1108) 
#org 0, 0x10FF {}                       
//**************************************************************************

Böyle bir sıkıntım var arkadaşlar.