pic için usb driver programı yazmak.?

Başlatan mir_as82, 22 Eylül 2009, 17:08:41

mir_as82

Arkadaşlar pic ile yapılmış bir projeyi bilgisayar ile (delphi, visual basic gibi ) usb aracılığı ile nasıl haberleştiririz? yani ben visual C#.net ile pic i usb kullanarak haberleştirmek istiyorum. Driver programı mı yazmam gerek? ve bunun hakkında varsa yapılmış proje ya da kaynak var mıdır?

muhittin_kaplan

Kolay gelsin.
Öncelikle pic ile yapılan cihazın ne olduğu önemli. yani sisteme taktığınıda otomatik tanıyabilecek bir yapımı yoksa özel bir durum mu var.
bazı işlemler için sürücü yazmanıza gerek yok(HID sınıfı için) bunlar klavye mouse türü cihazlar olabilir. ayrıca bu protokolü kullanan başka bir cihazda yapabilirsiniz. (örneğin termometre veyahut sayıcı) usb denilince işler biraz sarpasarıyor. USB iletişiminin içerisinde birkaç çeşit bağant yöntemi var. Bunlar CONTROL,KESME,İZONKRON gibi isimler alıyor. Bazısında driver yazmanız grekirken bazlarında gerekmiyor.
Ayrıca 3. firmaların üretimleri var bunlar arasında en yaygını FTDI ve chip olarak FT232RL bu yöntem ise sanal bir seri port yaratıp sizin yazdığınız (c# yada diğerleri) programla sanki Comport (.net içn serial) a bilgi gönderir gibi gönderiyorsunuz. bu chip dönüşümü yapıyor.

mir_as82

örneğin elimde 4 tane farklı robot var ve bunları usb ile bağladığım anda bunların ne olduğunu anlasın ve ben bunları bilgisayar ile kontrol edebileyim. mesela a robotunu takınca "a" nın takıldığını anlasın ve bu robot ile iletişime geçip veri gönderip alabilsin. bunu bilgisayar ile usb aracılığı ile kontrol edebileyim.

Tagli

Bir ara ben de araştırmıştım bu konuyu. Gerçi ben araştırmalarımı Linux üzerinde yoğunlaştırmıştım. İnternette malesef bu konuda hiç örnek yok gibi. Sadece bu siteyi bulabildim. Burada Linux için sürücüsü olmayan bir USB Roketatar oyuncağının kernel modülü şeklinde sürücüsünün yazılmasını ve bu sürücüyle iletişime geçecek uygulama programını güzel bir şekilde anlatmış (dil C, başkası düşünülemezdi zaten ;)). Gerçi burada adam cihazla ilgili bir işlem yapmıyor, ancak komutlarını bilmediği bir cihazı deneme yanılma ile çözmeye çalışıyor. Bunun için de Windows sürücüsü mevcut olan cihazı Windows makineye bağlayarak USB bağlantısını inceleyen bir programla gidip gelen USB paketlerindeki verilere bakıyor. Sen kendi uygulamanda PIC tarafını da kendin yazacaksın.

Bir ara üzerinde düşünüp de sonra hem vakit bulamadığım için, hem de işin zorluğu sebebiyle biraz yıldığım için konu üzerinde bir çalışmam olmadı malesef.  :(
Gökçe Tağlıoğlu

memo333

en kolay yöntem pici CDC olarak tanıtmak. Bu sayede PIC kendini PCye  sanal seri port cihazı gibi tanıtabiliyor(FT232 gibi). Bu sayede yazılım kolaylaşıyor.



AN956 Migrating Applications to USB from RS-232 UART with Minimal Impact on PC Software
Gömülü Linux Notları --> http://linuxedu.xyz/

muhittin_kaplan

Konu Biraz derin Ama Yüzeysel Anlatmaya Çalışayım.
Usb yi kullanan Her cihazın kendine özgü bir Uniq numarası vardır. bu numaraya VENDOR ID adı verilir.(Usb Cihaz Üreten Firmalar Bunu almak Zorundadır) Ayrıca vendordan Ayrı birde PRODUCT ID vardır bu ise üretici tarafından verilir. İşletim sistem cihazı bu numaralardan tanır. örnek vereyim
cihazı yaptınız ve 6017 ve 2000 gibi vid ve pid verdiniz mouse üretiyorsunuz. ürettiğiniz bu mouse ilk taktığınızda tanımlama işlemi yapar. peki aynı cihazdan iki adet taktınız işletim sistemi nasıl ayırd edecek. burada kullanımı zorunlu olmayan serial id devreye giriyor.
bukadar blginin hepsi
Description File adında bir dosya ile belirtiliyor. bu dosyanın içeriğinde cihazın VID,PID,SERNo, adı ,Cihaz Tip gibi künyeler bulunuyor. ve firm yaparken bunu mcu ya yazıyoruz(ben easyhid kullanıyorum)
Pc kısmında ise bu vid pid belirtip verileri ona göre gönderiyoruz

fatihvelid

Konuya detaylı hakim olmak için Jan AXELSON'un "USB Complete" kitabını okumanızı tavsiye ederim. CDC class ile çalışınca, uygun *.inf dosyası hazırlamanız gerekir( VID ve PID bilgilerini uydursanız yeterli).

HID'de öyle bir problem yok. HID için reportları iyi bilmek gerek, yada easyHid gibi tool kullanabilirsiniz. Profesyonel çalışmak için de USB-IF'nin USB HİD tool'u kullanabilirsiniz.(http://www.usb.org/developers/hidpage/dt2_4.zip )

•Device Class Definition for Human Interface Devices (HID)
•HID Usage Tables
dökümanlarıda HID için vazgeçilmez temel kaynaklar.

Bunlarla beraber, Microchip USB stack kullanarak birçok güzel uygulamalar yapabilirsiniz.

www.lvr.com adresinde C# ve C++ örnekleri mevcut.
Kolay gelsin.
Kainatta her canlı "DNA" diliyle yazılmış bir programdır...

mir_as82

USB haberleşmesini anlatan türkçe görsel kaynak var mı elinizde. Jan Alexson un kitabı bayağı uzun gibi:) 600 sayfaya yakın. Usb ile mikrodenetleyicinin haberleşmesi için hangi aşamalar gerekli.?mesela görsel bir programlama dilinde usb haberleşmesi nasıl yapılır.? olayın mikrodenetleyici tarafı ve bilgisayar tarafı nasıl olmalı?

fatihvelid

Jan axelson'in "Her yönüyle USB" adında çeviri kitabı var. Tercümesini pek beğenmedim, ama idare eder. Bu yüzden inglizce ağırlıklı kaynaklara daha çok önem veriyorum.

HID uygulaması yapacaksanız, USB haberleşme detayına çok inmenize gerek yok. Ama haberleşme kısmıyla ilgili genel kültüre sahip olsanız yeterli( Driver yazmayacaksınız çünkü, microchip'in hazırladığı driver var.)
HID report ve configuration descriptor hazırlamayı öğrenin. Bilgi almak ve göndermek için ayrı endpointer kullanılır. Bunu configuration descriptor'dan belirleyeceksiniz. Data exchange işleminde endpoint adreslerini kullanacaksınız.

Microchip örneklerini incelerseniz, söylediklerimi daha iyi anlarsınız.

Bilgisayar tarafı için createFile(...) API'si ile USB port açılır. VID ve PID bilgileri ve serial number ile cihazınızı ayır edersiniz. Cihaz bilgilerini ve desteklediği configürasyon bilgileri ve reporları okuyup, uygun cihazla haberleştiğinizi teyid edersiniz....

API programlamayı bilmek lazım yada hazır bir dll veya component kullanıp detaylara inmeden halledebilirsiniz. C++ ve C#  örnekleride var. lvr'de de PC tarafı için birçok örnek var.

Kolaylıklar dilerim.
Kainatta her canlı "DNA" diliyle yazılmış bir programdır...


mir_as82

Ben sizin gibi insanları görünce çok mutlu oluyorum. Allah bildiğini saklamayıp anlatanlra 100 kat ve misli misli versin.Çok önemli

707yunus

Bir zamanlar bu konuyu iyice araştırmaya karar verdim ama biraz zor olduğu için yarım kaldı.

Ben burada sana faydalı olabilecek bir adres veriyorum.C# ile örnek yapılmış.Pek ingilizcem olmadığı için anlayamadım.Bide sen bak.

http://www.florian-leitner.de/index.php/category/usb-hid-library/

mir_as82

Galiba en mantıklı iş.Yazılmış komponentlerden birini bulup projeye uyarlamak. USB ile ilgili yazılmış komponentler elinde olan var mı acaba. Seri port un gözünü seveyim ya:). Bu usb olayı bizi uğraştıracak gibi

muhittin_kaplan

Jabba diye bir aratın olacak sanırım c# ile yazılmış bir Dll ve kodları