Spisu treści:

Najtańszy na świecie adapter I2C (I-Squared-C): 5 kroków (ze zdjęciami)
Najtańszy na świecie adapter I2C (I-Squared-C): 5 kroków (ze zdjęciami)

Wideo: Najtańszy na świecie adapter I2C (I-Squared-C): 5 kroków (ze zdjęciami)

Wideo: Najtańszy na świecie adapter I2C (I-Squared-C): 5 kroków (ze zdjęciami)
Wideo: Różne sposoby konfiguracji STM-ek (STM32CubeIDE, stmXX.h, rejestry) part.1 2024, Listopad
Anonim
Najtańszy na świecie adapter I2C (I-Squared-C)
Najtańszy na świecie adapter I2C (I-Squared-C)

Stwórz interfejs czujnika dla swojego komputera za mniej niż złotówki! Aktualizacja 6/9/08: Po zbadaniu kilku możliwości doszedłem do wniosku, że nie ma praktycznego sposobu implementacji tej techniki w Microsoft Windows. To nie jest drobiazgowe walenie z systemem operacyjnym, naprawdę zwariowałem, próbując! Przepraszam! Użytkownicy systemu Windows potrzebujący funkcji I2C są najlepiej obsługiwani przez istniejące rozwiązania oparte na USB. Aktualizacja 24.05.08: Dodano obsługę systemu Linux, a także przykładowy kod dla kontrolera Nintendo Wii Nunchuk i „inteligentnej diody LED” BlinkM. Zobacz plik README.txt dołączony do kodu źródłowego, aby uzyskać wskazówki dotyczące kompilacji i konfiguracji w systemie Linux. I2C (skrót od Inter-Integrated Circuit) to dwuprzewodowa magistrala szeregowa zwykle używana w komputerach do komunikacji niskiego poziomu między komponentami wewnętrznymi. I2C jest również popularny w robotyce. Wszystkie rodzaje czujników i elementów wykonawczych są dostępne w formie zgodnej z I2C: dalmierze ultradźwiękowe, czujniki przyspieszenia, przechyłu, temperatury i ciśnienia, serwonapędy i ekspandery magistrali, które zapewniają dodatkowe linie ogólnego przeznaczenia (GPIO). Najnowocześniejsze mikrokontrolery (Atmel), Microchip PIC itp.) mają wbudowaną obsługę I2C. Jednak moc obliczeniowa dostępna w mikrokontrolerach jest ograniczona, a tworzenie oprogramowania - z wyspecjalizowanymi kompilatorami skrośnymi i środowiskami programistycznymi - może czasami być uciążliwe. Ponieważ laptopy i komputery jednopłytkowe stają się coraz mniejsze i coraz bardziej przystępne cenowo, coraz częściej stosuje się te systemy bezpośrednio w projektach z zakresu robotyki i elektroniki. Zapewnia to wystarczającą moc dla nowych możliwości, takich jak przetwarzanie wizyjne i bardziej wyrafinowana sztuczna inteligencja, i znacznie rozszerza zakres dostępnych narzędzi programistycznych i języków… ale stwarza również nowy problem: łączenie tych „zwykłych” systemów z urządzeniami peryferyjnymi odbywa się zwykle za pośrednictwem głównego nurtu porty klasy konsumenckiej, takie jak USB; nie ma dostępnego zewnętrznie „portu I2C”, do którego możemy po prostu podłączyć się, aby skorzystać z naszych czujników… a może jest?

Krok 1: Istniejące opcje

Istniejące opcje
Istniejące opcje
Istniejące opcje
Istniejące opcje

Jednym ze sposobów podłączenia urządzeń I2C do zwykłego komputera stacjonarnego lub laptopa jest przejściówka USB-I2C. Istnieje co najmniej tuzin takich opcji, od zestawów do samodzielnego wykonania z oprogramowaniem open source po wyrafinowane jednostki komercyjne z każdym dzwonkiem i gwizdkiem.

Jedną z wad podejścia USB do I2C jest koszt. W pełni funkcjonalny model komercyjny może kosztować 250 USD lub więcej. Nawet „darmowe” alternatywy homebrew zakładają zbiór części i uprzednią inwestycję w programistę mikrokontrolera i związaną z nim wiedzę, aby z niego skorzystać. Kolejną wadą jest względny niedobór obsługi sterowników poza popularną fałdą systemu Windows. Niewiele z tych urządzeń działa natywnie na komputerach Macintosh lub Linux.

Krok 2: DDC to I2C

DDC to I2C
DDC to I2C
DDC to I2C
DDC to I2C
DDC to I2C
DDC to I2C

Kiedy powiedziałem we wstępie, że na większości komputerów nie ma zewnętrznego portu I2C, skłamałem. Okazuje się, że jest i istnieje od prawie dekady, głównie uśpiony.

Większość nowoczesnych kart graficznych i monitorów obsługuje coś, co nazywa się Display Data Channel (DDC), czyli łącze komunikacyjne w kablu wideo, które umożliwia komputerowi i monitorowi negocjowanie wzajemnie zgodnych rozdzielczości i pozwala na sterowanie programowe funkcjami monitora, do których normalnie uzyskuje się dostęp za pomocą fizycznych przycisków na wyświetlacz. DDC jest w rzeczywistości po prostu implementacją magistrali I2C z kilkoma ustalonymi regułami. Podłączając się do tego połączenia między komputerem a monitorem (lub korzystając z linii DDC na wolnym, nieużywanym porcie wideo, takim jak połączenie monitora zewnętrznego w laptopie), można połączyć się z niektórymi urządzeniami I2C praktycznie bez żadnych kosztów, omijając zwykła potrzeba całkowitego urządzenia adaptera. Wszystko, czego potrzebujemy, aby fizycznie uzyskać dostęp do tej magistrali I2C, to zhakowany kabel wideo…

Krok 3: Preparowanie kabla

Preparowanie kabla
Preparowanie kabla
Preparowanie kabla
Preparowanie kabla

Dla naszego interfejsu I2C potrzebne są cztery przewody: zasilanie +5V, uziemienie, dane szeregowe i zegar szeregowy. Pinouty dla różnych typów portów wideo można znaleźć na Wikipedii lub Pinouts.ru. Pamiętaj, jeśli używasz kabla VGA, aby znaleźć taki z pełnym zestawem pinów; niektóre zawierają tylko podzbiór. Odcinając izolację i ekranowanie z zewnątrz kabla, prawdopodobnie znajdziesz w nim dwie grupy przewodów. Grubsze przewody lub wiązki przewodów owinięte w dodatkowe ekranowanie zwykle przenoszą sygnał wideo. Nie jesteśmy nimi zainteresowani i można je przyciąć. Cieńsze, nieekranowane przewody zwykle przenoszą między innymi sygnały DDC (I2C). Multimetr lub tester ciągłości może pomóc w znalezieniu odpowiednich czterech przewodów dla twojego kabla. Korzystanie z gołego złącza może być tutaj korzystne, ponieważ wystarczy przylutować cztery przewody do interesujących pinów. Uwaga dotycząca zasilania +5V: dostępny prąd jest bardzo ograniczony; około 50 mA zgodnie ze specyfikacją DDC. Większość urządzeń I2C pobiera tylko niewielką ilość prądu, więc powinno być możliwe uruchomienie kilku jednocześnie… ale jeśli używa się więcej niż jednej lub dwóch diod LED (lub innych urządzeń o stosunkowo wysokim natężeniu prądu), należy zapewnić zewnętrzne zasilanie.

Krok 4: Gotowy adapter

Gotowy adapter
Gotowy adapter

Oto gotowy adapter. To wszystko! Zrobiłem mój bardzo przysadzisty, aby mógł z łatwością zmieścić się w mojej torbie na laptopa, i dodałem czteropinową wtyczkę, która łączy się bezpośrednio z kontrolerem serwomechanizmu I2C, który mam.

Krok 5: Oprogramowanie i projekty

Oprogramowanie i projekty
Oprogramowanie i projekty
Oprogramowanie i projekty
Oprogramowanie i projekty

Kod źródłowy Mac OS X i Linux do pracy z adapterem można pobrać z mojej strony internetowej (link do pobrania znajduje się na dole strony). Jest napisany w C i musisz mieć zainstalowane gcc (Linux zwykle zawiera to domyślnie, podczas gdy użytkownicy komputerów Mac będą musieli zainstalować narzędzia programistyczne, które są opcjonalnym instalatorem na oryginalnym dysku systemu operacyjnego lub można je pobrać bezpłatnie od Apple). Przykładowy kod jest dołączony do odczytu czujnika temperatury, migania "inteligentnej diody LED" BlinkM, zapisu i weryfikacji szeregowej pamięci EEPROM, odczytu sterownika Nintento Wii Nunchuk (tylko Linux) i komunikacji z płytą sterownika serwo. Niestety ten schemat adaptera nie jest kompatybilny ze wszystkimi systemami. Obsługa DDC nie jest wymagana, więc nie wszystkie karty wideo obsługują tę funkcję. Do tej pory miałem szczęście z komputerami Mac, które mają układy graficzne ATI lub Intel, ale systemy oparte na NVIDIA nie mają szczęścia. Po stronie Linuksa testowałem pomyślnie tylko IBM ThinkPad A31p (grafika ATI), ale nie działałby on z Asus EeePC (Intel). Zdjęcia tutaj pokazują stanowisko testowe, które demonstruje różne urządzenia I2C w akcji. Komputer stale odczytuje temperaturę otoczenia z czujnika temperatury I2C, okresowo zapisuje te dane do szeregowego układu EEPROM I2C (tak, mógł po prostu drukować do pliku, ale to miało jeszcze bardziej zademonstrować zastosowania I2C), a następnie serwo (poprzez kontroler I2C) służy jako prowizoryczna tarcza wskaźnika. Mając już bibliotekę i przykładowy kod dla tych urządzeń, złożenie tego demo zajęło tylko kilka minut (a większość z nich polegała na zrobieniu pokrętła wskaźnika).

Zalecana: