PIC-C ile 18F2550 usb ornekleri ariyorum.
PC tarafinda driver icin microchipin ne tur destekleri var?
dokuman yok dnecek kadar az. ben protonla yazıyorum..
seri portu ne çok seviyormuşuz
Pic C den kasıt Microchip C18 ise microchip çeşitli örnek vermiş.
Microchip Application Libraries v2009-03-24
eğer 64kbayt /sn hız yeterliyse ek sürücü gerekmeden HID aygıt olarak kullanabiliyorsunuz.
Ancak burada verilen mouse demo gibi örnekler tek yönlür. eğer 2 yönlü uygulama gerekirse (kesin gerekir)
C:\Microchip Solutions\USB Device - Bootloaders\HID - Bootloader\HID Bootloader - Firmware for PIC18 Non-J Devices
bootloader projesini alıp size gerekmeyen kodları silerek muradınıza erebilirsiniz. ana döngü içinde bootloader ksıımlarını silebilir veya kendi fonksiyonlarınızıı ekleyebilirsiniz. ancak *.lkr dosyasını 2550 için uyarlamak gerekiyor. mevcut BootModified.18f4550.lkr dosyayı projeden kaldırarak C:\MCC18\lkr\18f2550.lkr dosyasını BootModified.18f4550.lkr gibi uyarlamak kullanmak gerekir. (galiba) USB Bootloader fonksiyonları kullanılmayacaksa modified olanı kaldırarak yerine C:\MCC18\lkr\18f2550.lkr dosyasını eklemek mümkün olsa gerek.
eğer hız yetmezse, diğer demolar da mevcut. onları modifiye ederek kendi projenizi yaparsınız.
C:\Microchip Solutions\USB Device - WinUSB - Generic Driver Demo
Peki ben yaptım mı? hayır. Bootloaderi silme işini yaptım. ayıkladım. ancak kendi fonksiyonlarımı yazacak C bilgim yok. yazamıyorum.
Proton la kolayca oluyor. HID sınıfı aygıtı okumak için Easy HID ile oluşan delphi projeyi modifiye ettim. picden gelen verileri alarak sabit diske yazabiliyorum.
(http://i40.tinypic.com/168xu75.jpg)
@wsxwsx
aslında tam aradığımda böyle bir yapı "İki Yönlü HID"
yapmaya çalıştığım ve ara vermek zorunda kaldığım Klavye Projesiydi. Bunun Bir Örneği Varmı Acaba?
Yani Klavyeye Pc den USB aracılııyla Klavye ye bilgi göndermek gibi
FxDev,
Size nekadar hız gerekli? 64kb/sn işinizi görüyor mu? cevap evetse HID sınıfı yapabilirsiniz. hazır bileşenler var. DLLe gerek yok. windowsun içine gömülü. sadece delphi vb ortamda kullanmak için uygun componenetleri edinerek işinizi görebilirsiniz
http://www.google.com.tr/search?hl=tr&q=HIDKomponente&meta=&aq=f&oq=
Şimdi desen ki bana illa DLL gerekli. hemen yazabilirsin. Delphi kullanarak DLL bu bileşenden elde edilebilir. içine sizin cihazın vendor ID si ve Product ID sini koyacaz hap gibi birşey yapacaz. dışarı çıkacak fonksiyonlar şöyle olacak.Cihazvarmi()
Cihazabaglan()
Cihazdanbilgigeldi(dizi:byte array)
cihaz gonder(dizi:byte array)
Bu fonksiyonları salladım. İhtiyaca göre kendiniz yaparsınız. Ama zaten cihazla haberleşecek uygulamanız olacaksa dışarıdan DLL yapmaya gerek yok. belki DLL den kastınız driver olabilir. HID sınıfı için durum bu. Bence HID olmayıp başka sınıflarda olabilir onlara da driver gerekmez. Örneğin USB ses kartı, modem gibi çok sayıda sınıf var. Bu sınıflar için de kendimiz driver yazmamıza gerek yok. Alet bilgileri formalitesine uygun şekilde gönderiyorsa, ses kartı veya başka bir cihaz gibi okunabilir.
Dikkat etmemiz gereken konu bu sınıfa uygun şekilde aletimizi tanımlayabilmek verileri de ona göre göndermek. (Detayını ben de bilmiyorum ama yapılması gereken bu)
Muhittin, yukarıda bahsettiğim microchip bootloader projesinden elde edilir. ben modifiye ettiğim projeyi derledim. ve sorunsuz olarak in ve out olmak üzere 2 adet endpoint göründü. (usbview ile baktım)
Yani aynı anda hem giriş hem çıkış oldu cihaz. ve ek bir sürücü gerekmedi. pickit2 gibi otomatik algılandı. Şimdi bilgisayar pickit2 yi algılıyorsa bu şekilde yola devam edebilirsiniz. Ancak Klavye olarak gösterilmeyecek. HID sınıfı genel bir cihaz olacak. Pickit2 neyse senin cihaz da o. Zaten pickit2 de bootloader içeriyor. öncekimesajda bahsettiğim bootloader projesinden yapılmış gibi duruyor. Bu resimde blink yerine sizin fonksiyonlar gelecek
(http://i42.tinypic.com/o7m0pe.jpg)
protonda hid usb örnekelri var c nin altinda örnekelrebakiniz ama dll ve driver konusu epey bi zor sanirim hazirlari ile yetincez
usbli projeler seri porta göre hem daha modern hemde çok daha problemsiz ve sorunsuz oluyor
1- usbli bir proje yapıcaksanız usb li projenin usb kısmı için en önemli kısım descriptors kısmıdır descriptors kısmından usb ile ilgili her türlü ayarları projenize göre yapılandırmanız gerekir ama bu kısımın bir çok config ayarı bulunmaktadır hatta bu configler birbirleri ile çoğu durumda etkileşimlidir ve bu configlerin bence en kolay ayarlanma yolu asm ile yapılır
2- descriptors neleri içerir
usb ile ilgili olan her türlü veri girişi cihazın uç noktaları veri yolları cihazın hızı voltajı giriş çıkısları kaç byte nerden giricek nereden çıkıcak hatta nereye gidicek vendor idnize göre hangi diriver yüklenicek(başlangıçta oldukça karışık gelebilir iyi descriptors yapmak için bilgi mutlaka şart en azından 1ay gibi zaman bunun üzerinde kafa patlatmak mantığını anlamay uğraşmak lazım )
peki bu konuda kafa yormak istemiyorsak napabiliriz ?
internette bir sürü descriptors var yapıcağımız iş eğer sadece usbden bir kaç byte veri alıp bir kaç byte veri göndermek işe internette bunula ilgili binlerce hazır descriptors bulunabilir işinizi gören descriptors bulunduktan sonra kalanı çok kolay program içinde verileri gönderir ve alırsınız gelen ve giden veriye göre işinizi yaptırısınız.
tabi kısmındada hangi programlama bunun yanında birde bilgisayar kısmı var bilgisayarda hangi programlama diline yatkınsanız o dille kulanıcağınız bir dll hazır bulucaksınız yada kendiniz yazıcaksınız (kendiniz yazma kısmı acemiler için tavsiye etmem hazır bulmak işinizi baya bi kolaylaştırır) yani sizin verdiğiniz Vendorid den gelen bilgileri okuyabilicek bir dll ve sizin Vendorid nize veri göderen bir dll bunlarıda kurduktan sonra bilgisayar kısmıda kolay oda sizin hayal gücünüza kalmış
neticede
usb ile ilk defa tanışıyorsanız inanılmaz derecede karışık gelebilir başlarda (ama biz elektronikçilerin genelde bi huyu vardır bi işe başladıkmı akşamı ederiz ama canımız sıkılmaz yinede zaten bu özellik yoksa iş çok sıkıcı olabilir)
birde kaynak sorunu var türkçe kaynak zaten yok desek yeridir yabacı kaynaklardada genelde çok öğretici bilgi bulmak zor konu karışık ve iç içe girmiş aslında anlatmasıda zor sabırla uğraşmanızı tavsiye ederim eğer
1-eğer bilgisayarda iyi kötü bir programlama biliyorsanız
2- pic kısmında iyi kötü bir programlama bilginiz varsa
3- elektroniktende anlarım diyorsanız
sizin için işin püf noktası usb ile ilgili descriptors da ve bilgisayar kısmında usb için bir dll dosyasında bitiyor.
konuyla ilgilenen herkeze kolay gelsin.
Hitech kullandigim icim yeni projedemde USB rutinlerinin de Hitech de yazilmis olmasini istiyordum. Boylece uygulama programimi kolayca mevcut ornek koda yapistirabilegim. Ancak bugune kadar PIC18F2550 icin Hitech de yazilmis USB ornek bulamadim.
Hic olmazsa simdilik isim gorulsun diye aklima soyle bir cozum geldi.
Gerci bu da az ugrastirici değil.
2550 de calisan yalin bir usb orneginin derlenmis kodlarindan geri kazanimla asm elde edebilir ve bu kodlari hitech icine inline asm yoluyla gomebilirim.
Burada sorun derleyiciden derleyiciye degisen ve cakisan ram adreslemesi. Ancak bunu bayagi bir ugras ardindan asacagimi dusunuyorum.
Herhangi bir dilde yazilmis, calistirilip denenmis PIC18F2550 USB icin oldukca sade bir ornek ve islemciye gomulecek derlenmis kodlarini ariyorum.