[LinuxFocus-icon]
Strona Główna  |  Mapa Serwisu  |  Indeks  |  Szukaj

Nowości | Archiwum | Linki | O Nas
Ten dokument jest dostępny w następujących językach: English  Castellano  ChineseGB  Deutsch  Francais  Russian  Turkce  Polish  

[Photo of the Author]
Guido Socher (homepage)

O Autorze:

Guido lubi Linux'a ponieważ jest to raj dla ludzi, którzy chcą rozwijać ich własne oprogramowanie i sprzęt.



Translated to English by:
Mariusz Kozlowski <sp3fxc(at)linuxfocus.org>

Zawartość:

 

Wyświetlacz USB LCD z watchdog'iem i przyciskami

[Illustration]

Notka:

Ten artykuł to odpowiedź na bardzo pozytywny odzew na moje artykuły do tej pory napisane. Wy, czytelnicy LinuxFocus, jesteście świetnymi odbiorcami! Niektórzy z was chcieli wiedziec jak posługiwać się magistralą USB. Oto dobry przykład. Użyjemy wyświetlacza LCD z artykułu z Maja 2002 i uruchomimy go na USB. Całość będzie zasilana z magistrali USB. Dlatego nie potrzeba żadnego dodatkowego źródła zasilania.

Do zrealizowania tego potrzebna będzie przynajmniej część środowiska Linux AVR. Jak to zrobić jest opisane w tym artykule: Programowanie Mikrokontrolerów AVR z użyciem GCC.

_________________ _________________ _________________

 

Wprowadzenie

USB jest bardzo dobre ponieważ jet to nowoczesny interfejs, który oferuje możliwość zasilania urządzań bezpośrednio z magistrali USB. Złącza są małe i duże ilośći danych mogą zostać przetransportowane przez taki "mały" kabel. To zdecydowanie pozytywne cechy USB. Gorszą stroną tego rozwiązania jest trudność w projektowaniu sprzętu z powodu wysokich częstotliwości jak i roznież z powodu raczej skomplikowanego protokołu komunikacyjnego. Wystarczy spojrzeć na specyfikacje (http://www.usb.org/developers/, zobacz specyfikacje 1.1) i będziesz w szoku. To 327 stron, długich i ciężkich do zrozumienia. Nic więc dziwnego, że jest tak wieeele błędnych implementacji urządzeń USB. Bardziej przyjazne dla użytkownika wprowadzenie można znaleźć tu http://www.beyondlogic.org/ ale specyfikacja ta jest nadal skoplikowana.

Co robić? Jak możemy podłączyć nasz Mikrokontroler do szyny USB? FTDI - Szkocka firma, znalazła rozwiązanie (http://www.ftdichip.com). Oferują chip który ma zaimplementowaną obsługę szeregowego interfejsu USB. Z jednej strony chipu FT232BM znajduje sie rs232, a z drugiej USB. Innymi słowy poprostu wymieniasz układ MAX232, który poprzednio używałeś do konwersji napięć na liniach RS232, na układ FT232BM i jest już ok.  

Sterownik

FT232BM to rozwiązanie z pełnym krosowaniem. Drivery są dostępne dla wielu systemów operacyjnych. Moduł kernela nazywa się ftdi_sio i jest odstarczany z otwartym źródłem. Jest on częścią standardowego kernela. Układ FT232BM oferuje znacznie więcej niż zwykłą konwersję USB do rs232, a moduł kernela obsługujący ten układ jest ciągle rozwijany aby zaimplementować nowe funkcje. Jednakże konwersja USB na rs232 jest już stabilna i była gotowa do użycia już wraz z standardowym kernelem Redhat 7.3 (2.4.18) bez rekompilacji czy jakejkolwiek modyfikacji. Po prostu się to włącza.

ftdi_sio jest dostępne pod sdresem http://ftdi-usb-sio.sourceforge.net/.

W moim systemie Redhat 7.3 wszystkie moduły są ładowane automatycznie kiedy podłączam się do złącza USB. Jeśli nie chce to współpracować z Twoją dystrybucją Linux'a sprawdź czy masz załadowane następujące moduły (dla USB-UHCI):

/sbin/lsmod usb-uhci
/sbin/lsmod usbcore
/sbin/lsmod usbserial
/sbin/lsmod ftdi_sio

Plik urządzenia do komunikacji ze sprzętem to: /dev/ttyUSB0

Twórcy ftdi_sio zalecają kernel w wersji conajmniej 2.4.20 ale jak widać działa to również poprawnie z wersją 2.4.18 (przynajmniej dla funkcji jakich tu używamy).  

Schemat

Układ jest bardzo prosty. Musisz podłączyć układ FT232BM pomiędzy linie Rx/Tx mikrokontrolera, a złącze USB. Potrzebny jest także rezonator kwarcowy 6 MHz i inne częśći, które są opisane w specyfikacji z FTDI. Ferrytowy koralik (na schemacie po prawej) jest malutką cewką filtrującą wysokie częstotliwości (magistrala USB pracuje na 48MHz). Możesz równierz nawinąć 10 zwojów cienkiego drutu na rezystorze 1k i używać tego jako cewki.

schematic
Jedna z rzeczy na jakie trzeba zwrócić uwagę to pobór mocy. Nie możesz pobierać więcej niż 100mA jeśli Twoje urządzenie jest zasilane z szyny USB. Na dodatek Twoje urządznie musi wspierać tryb "USB suspend". Gdy pin zwany "sleep" układu FT232BM zmieni stan na niski Twoje urządzenienie może pobierać więcej niż 0.5mA. To ostatnie wymaganie jest jednakże bardzo trudne do zaimplementowania. AVR wspiera "idle mode" gdzie pobór prądu jest mniejszy niż 2mA oraz tryb "power down" gdzie zużywane jest tyko 20uA. Wydaje się jednak łatwiejszym obudzenie Mikrokontrolera z trybu "idle mode". Dlatego zdecydowałem się użyć "idle mode" nawet jeśli jest to troche niezgodne z specyfikacją. Opcjonalne podświetlanie LCD będzie wyłączone i cały układ zużyje mniej niż 3mA. 3mA to więcej niż 0.5mA ale kontrolery USB w komputerze nie potrafią mierzyć poboru prądu więc właściwie tego nie zauważą. Powinno to zadziałać.

Powiedziawszy to wszystko muszę przyznać, że nie posiadam komputera wspierającego tryb "suspend". Dlatego też nie modłem przetestować tej części. Jeśli masz komputer, np. nowoczesny Laptop wspierający "suspend", proszę przetestuj to i daj mi znać jakie były rezultaty.

Reszta układu jest prawie idenyczna do tej prezentowanej w Maj 2002. Z tego powodu nie będę dalej tłumaczył szczegółów budowy.
Możesz kliknąć na schemat aby zobaczyś większe zdjęcie. Pliki "eagle" są spakowane razem z oprogramowaniem. Możesz je śćiągnąć na końcu artykułu.
board
Płytka to jednostronny laminat gdzie niebieskie linie to ścieżki. Linie czerwone to przewody (zwory).

Złącze którego potrzebujesz do tego układu to USB Type-B i ma ono nastepujące wyprowadzenia:
type B Receptacle

 

Praca z układami SMD

Układy SMD mają dobre mechaniczne i elektryczne właściwości ale są koszmarem dla domowych elektroników hobbystów. Naprawdę potrzeba sporo umiejętności w lutowaniu przynajmniej w części płytki gdzie jest zamontowany układ SMD. Musi być on zamontowany czysto i starannie. Innymi słowy nie jest to zajęcie dla początkujących. Zobacz na alternatywne rozwiązania poniżej jeśli nie jesteś pewien czy potrafisz wykonać odpowiednio tą płytkę i wlutować układ.

Wlutuj układ na płytkę zanim przylutujesz cokolwiek innego.
Aby wlutowć układ nanieś niewielką ilość cyny na końcówki ścieżek na płytce gdzie będzie sie znajdował ten układ. Następnie nanieś cienką warstwę pasty lutowniczej SMD (niektórzy ludzie zwą ją miód lutowniczy ponieważ wygląda ona jak miód). Jest również niemiecka firma zwana "Kontakt Chemie", która produkuje lakier w spray'u zwany "Lötlack". Możesz użyć tego spray'u "Lötlack" zamiast pasty lutowniczej jeśli chcesz.

Wyczyść grot lutownicy. Nie może sie na nim znajdować cyna ani zanieczyszczenia. Następnie ułóż dokładnie FT232BM. Delikatnie przyciskaj każde wyprowadzenie układu grotem lutownicy. Nie nakładaj żadnej dodatkowej cyny.ft232SMD

Ta procedura sprawdza się doskonale. Nie jest istotne czy masz małą lutownicę. Można użyć zwykłej lutownicy ale upewnij się ze jej grot jest czysty przed przytknięciem go do wyprowadzeń układu. Nie polecam metod typu kuchenka do gotowania czy innych topornych metod. Jest bardzo prawdopodobne, że uszkodzisz układ stosując inne metody.  

Test

Polecam testowanie całości w dwóch etapach. Najpierw podłacz układ bez kontolera AVR w podstawce. Linux powonien rozpoznać układ FTDI i powinieneś zobzczyć następujący wpis w /proc/bus/usb/devices:

T: Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=12 MxCh= 0
D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=0403 ProdID=6001 Rev= 2.00
S: Manufacturer=FTDI
S: Product=USB <-> Serial
C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr= 90mA
I: If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=serial
E: Ad=81(I) Atr=02(Bulk) MxPS= 64 Ivl= 0ms
E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl= 0ms

Po wykonaniu tego włóź Mikrokontroler AVR i załaduj program, który spowoduje miganie diod LED. Rozpakuj pakiet linuxusblcd (patrz sekcja download na koncu tego artykułu) i wpisz:

make testload0

Kabel programatora i USB muszą być podłączone.
Jeśli ten test się powiedzie możesz być pewien, że Mikrokontroler będzie pracował.

Po tym możesz załadować kompletny software do Mikrokontrolera:

make load

Teraz możesz już użyć "ttydevinit /dev/ttyUSB0" do inicjalizacji połączenia szeregowego USB i z pomocą "cat > /dev/ttyUSB0" możesz "mówić" do układu.

ttydevinit /dev/ttyUSB0
cat > /dev/ttyUSB0
D=hello world

To spowoduje wypisanie "hello world" na wyświetlaczu. Szczegółowy opis znajduje się w wydaniu Maj 2002. Kod zawarty w wydaniu Maj 2002 również zawiera program llp.pl, który może być użyty do interaktywnej komunikacji z twoim komputerem za pomocą dwóch przycisków na wyświetlaczu LCD. Możesz użyć go tutaj ponownie.

... a oto zdjęcie pracującego wyświetlacza (przyciski nie były podłączone podczas robienia zdjęcia, FT232BM jest pod płytką):
usb lcd
 

Alternatywy

Pomimo iż układ prezentowany tutaj jest bardzo prosty nie jest to dla początkujących z powodu odpowiednich umiejętności jakie trzeba posiadać aby poprawnie wlutować układ typu SMD. Dlatego można rozważyć kupno komercyjnego rozwiązania jeśli nie czujesz sie pewnien w lutowaniu SMD. Wadą tego jest fakt iż normalnie nie dostaniesz wszystkich dodatków jak watch dog, LED'y i przyciski. Przeważnie dostaniesz tylko sam wyświetlacz LCD. Ceny za gotowy komercyjny wuświetlacz podłączany do USB są w miarę rozsądne. Same części wymienione w tym artykule to koszt około 30 EUR. Koszt gotowych wyświetlaczy jest bardzo zbliżony do tej wartości.

Niestety większość komercyjnych produktów ma oznaczenia własnego producenta nawet jeśli w rzeczywistośći bazują one na układzie ftdi. Oznacza to, że moduł do kernela ich nie rozpozna ponieważ działanie sterownika USB opiera się na tych oznaczeniach. W takim przypadku można wyedytować odpowiedni fragment źródła i wprowadzić zmiany. Późniejsze wersje kernela mogą już pracować poprawnie jeśli ktoś wprowadzi stosowne zmiany.
 

Zródła informacji

 

Dyskusja dotycząca tego artykułu

Komentarze do dyskusji:
 Strona talkback 

Strona prowadzona przez redakcję LinuxFocus
© Guido Socher, FDL
LinuxFocus.org
tłumaczenie:
en --> -- : Guido Socher (homepage)
en --> pl: Mariusz Kozlowski <sp3fxc(at)linuxfocus.org>

2003-04-18, generated by lfparser version 2.33