Witam,
Temat ten jest na tyle ciekawy, że wart jest szerszego opisania. Wcześniej stosowałem układy firmy FTDI w najprostszej postaci czyli jako wirtualny port szeregowy COM. Są również mikrokontrolery AVR z pełnym portem USB, niemniej wiąże to z większym wydatkiem, a wtedy można z powodzeniem sięgnąć po bardziej zaawansowane układy 32 bitowe.
Natomiast w większości przypadków w moich aplikacjach potrzebuję wysyłać stosunkową niedużą paczkę danych. Port szeregowy jest stosunkowo łatwo oprogramować z poziomu uC jak i PC (szczególnie przy korzystaniu z gotowych bibliotek). W przypadku USB nie musi być o wiele trudniej. USB 1.1 (low speed) umożliwia przesył danych z prędkością 1.5Mb co jak na moje potrzeby jest w zupełności wystarczające.
Czas temu natknąłem się na AVR USB (obecnie V-USB), a jest to softwarowa implementacja portu szeregowego USB 1.1 w mikrokontrolerach AVR. Link do strony poniżej (skąd można ściągnąć najnowszą wersję biblioteki):
http://www.obdev.at/products/vusb/index.html
Większość przykładowych projektów na w/w stronie dotyczy ATmega8, ja używam ATmega88 ale nie ma problemu z uruchomieniem biblioteki na innych AVR (wymagane 2kB pamięci FLASH i 128 RAM, oraz zegar min. 12MHz).
HID
Większość przykładów oparte jest na HID (Human Input Devices) dzięki czemu nie ma potrzeby tworzenia specjalnych driverów pod systemy operacyjne (np. Windows, Linux). Mikrokontroler z zaszytym interfejscem HID będzie automatycznie rozpoznawany przez system operacyjny, który zainstaluje odpowiednie sterowniki.
Więcej o HID: http://www.usb.org/developers/hidpage
Osobiście uruchomiłem myszkę, joystick, oraz urządzenie wymieniające dane na ATmega88. Wystarczy zdefiniować w raporcie HID ilość przycisków, osi i urządzenie gotowe.
Najbardziej interesujący jest HID jako urządzenie wymieniające dane gdyż w ten sposób mogę łatwo wysyłać i odbierać dane do/z mikrokontrolera, np. sterowanie zapalaniem diod led z komputera PC i odczytywanie temperatury.
Jako program do testowania komunikacji zastosowałem "gotowca" pod Visual C# (przykład generic_hid_cs). Do ściągnięcia pod adresem (plus inne informacje o HID):
http://www.lvr.com/hidpage.htm
VID/PID
Każde urządzenie z portem USB posiada identyfikator VID (USB Vendor ID - numer identyfikacyjny producenta) oraz PID (numer identyfikacyjny produktu). Oczywiście numery te posiadają firmy, które produkują urządzenia pod USB i raczej są nieosiągalne dla przeciętnego użytkownika, chyba, że zechce uzyskać takowe (kosztowna droga). Rozwiązaniem jest zastosowanie numerów podawanych przez twórcę biblioteki V-USB.
Wymagania
Biblioteka jest napisana w języku C (z kilkoma wstawkami assemblerowymi). Przy czym użytkownik nie musi wnikać głęboko w kod. Praktycznie najważniejsze elementy znajdują się w pliku main.c (report descriptor), oraz w usbconfig.h (konfiguracja sprzętowa).
Środowiska w których można skompilować bibliotekę to:
AVR Studio (z kompilatorem C), WinAVR, CodeVision AVR (nie testowałem)
osobiście korzystam głównie z AVR Studio, ale myślę, że każde inne środowisko z kompilatorem języka C powinno tutaj wystarczyć.
Mikrokontroler musi posiadać min. 2kB pamięci FLASH, min 128 bajtów RAM, oraz zegar min. 12MHz.
W przypadku tworzenia własnego urządzenia USB, lub też modyfikacji HID dobrze jest znać po trochu opis standardu USB. W większości przypadków wystarczają załączone do biblioteki przykłady z ewentualnymi małymi korektami.
Na koniec
Temat jest bardzo rozległy i nie sposób opisać go w kilku słowach. Niemniej powyższa biblioteka jest bardzo mocnym argumentem za stosowaniem małych mikrokontrolerów (szczególnie AVR - nie znalazłem nigdzie indziej urządzenia pod USB za kilka zł). No i to, że zastosowanie USB w AVR nie musi być takie trudne.
Przykłady
Pomimo iż biblioteka V-USB posiada kilka przykładów, zdecydowałem się umieścić kilka nowych. Na razie dodaję przykład joysticka.
Joystick 16p - przykład joysticka z 16 przyciskami (plus osie X i Y), program napisany pod AVR Studio 4.16. Program pod ATmega88.
Historia:
2009.05.29 Dodano wpis Wymagania
2009.07.05 Dodano przykłady
Temat ten jest na tyle ciekawy, że wart jest szerszego opisania. Wcześniej stosowałem układy firmy FTDI w najprostszej postaci czyli jako wirtualny port szeregowy COM. Są również mikrokontrolery AVR z pełnym portem USB, niemniej wiąże to z większym wydatkiem, a wtedy można z powodzeniem sięgnąć po bardziej zaawansowane układy 32 bitowe.
Natomiast w większości przypadków w moich aplikacjach potrzebuję wysyłać stosunkową niedużą paczkę danych. Port szeregowy jest stosunkowo łatwo oprogramować z poziomu uC jak i PC (szczególnie przy korzystaniu z gotowych bibliotek). W przypadku USB nie musi być o wiele trudniej. USB 1.1 (low speed) umożliwia przesył danych z prędkością 1.5Mb co jak na moje potrzeby jest w zupełności wystarczające.
Czas temu natknąłem się na AVR USB (obecnie V-USB), a jest to softwarowa implementacja portu szeregowego USB 1.1 w mikrokontrolerach AVR. Link do strony poniżej (skąd można ściągnąć najnowszą wersję biblioteki):
http://www.obdev.at/products/vusb/index.html
Większość przykładowych projektów na w/w stronie dotyczy ATmega8, ja używam ATmega88 ale nie ma problemu z uruchomieniem biblioteki na innych AVR (wymagane 2kB pamięci FLASH i 128 RAM, oraz zegar min. 12MHz).
HID
Większość przykładów oparte jest na HID (Human Input Devices) dzięki czemu nie ma potrzeby tworzenia specjalnych driverów pod systemy operacyjne (np. Windows, Linux). Mikrokontroler z zaszytym interfejscem HID będzie automatycznie rozpoznawany przez system operacyjny, który zainstaluje odpowiednie sterowniki.
Więcej o HID: http://www.usb.org/developers/hidpage
Osobiście uruchomiłem myszkę, joystick, oraz urządzenie wymieniające dane na ATmega88. Wystarczy zdefiniować w raporcie HID ilość przycisków, osi i urządzenie gotowe.
Najbardziej interesujący jest HID jako urządzenie wymieniające dane gdyż w ten sposób mogę łatwo wysyłać i odbierać dane do/z mikrokontrolera, np. sterowanie zapalaniem diod led z komputera PC i odczytywanie temperatury.
Jako program do testowania komunikacji zastosowałem "gotowca" pod Visual C# (przykład generic_hid_cs). Do ściągnięcia pod adresem (plus inne informacje o HID):
http://www.lvr.com/hidpage.htm
VID/PID
Każde urządzenie z portem USB posiada identyfikator VID (USB Vendor ID - numer identyfikacyjny producenta) oraz PID (numer identyfikacyjny produktu). Oczywiście numery te posiadają firmy, które produkują urządzenia pod USB i raczej są nieosiągalne dla przeciętnego użytkownika, chyba, że zechce uzyskać takowe (kosztowna droga). Rozwiązaniem jest zastosowanie numerów podawanych przez twórcę biblioteki V-USB.
Wymagania
Biblioteka jest napisana w języku C (z kilkoma wstawkami assemblerowymi). Przy czym użytkownik nie musi wnikać głęboko w kod. Praktycznie najważniejsze elementy znajdują się w pliku main.c (report descriptor), oraz w usbconfig.h (konfiguracja sprzętowa).
Środowiska w których można skompilować bibliotekę to:
AVR Studio (z kompilatorem C), WinAVR, CodeVision AVR (nie testowałem)
osobiście korzystam głównie z AVR Studio, ale myślę, że każde inne środowisko z kompilatorem języka C powinno tutaj wystarczyć.
Mikrokontroler musi posiadać min. 2kB pamięci FLASH, min 128 bajtów RAM, oraz zegar min. 12MHz.
W przypadku tworzenia własnego urządzenia USB, lub też modyfikacji HID dobrze jest znać po trochu opis standardu USB. W większości przypadków wystarczają załączone do biblioteki przykłady z ewentualnymi małymi korektami.
Na koniec
Temat jest bardzo rozległy i nie sposób opisać go w kilku słowach. Niemniej powyższa biblioteka jest bardzo mocnym argumentem za stosowaniem małych mikrokontrolerów (szczególnie AVR - nie znalazłem nigdzie indziej urządzenia pod USB za kilka zł). No i to, że zastosowanie USB w AVR nie musi być takie trudne.
Przykłady
Pomimo iż biblioteka V-USB posiada kilka przykładów, zdecydowałem się umieścić kilka nowych. Na razie dodaję przykład joysticka.
Joystick 16p - przykład joysticka z 16 przyciskami (plus osie X i Y), program napisany pod AVR Studio 4.16. Program pod ATmega88.
Historia:
2009.05.29 Dodano wpis Wymagania
2009.07.05 Dodano przykłady
