Innehållsförteckning:

Världens billigaste I2C (I-Squared-C) adapter: 5 steg (med bilder)
Världens billigaste I2C (I-Squared-C) adapter: 5 steg (med bilder)

Video: Världens billigaste I2C (I-Squared-C) adapter: 5 steg (med bilder)

Video: Världens billigaste I2C (I-Squared-C) adapter: 5 steg (med bilder)
Video: VI ÖPPNAR VÄRLDENS BILLIGASTE TATUERINGSSTUDIO. 2024, November
Anonim
Världens billigaste I2C (I-Squared-C) adapter
Världens billigaste I2C (I-Squared-C) adapter

Gör ett sensorgränssnitt för din dator för en peng! Uppdatering 6/9/08: Efter att ha undersökt flera vägar har jag kommit fram till att det inte finns något praktiskt sätt att implementera denna teknik i Microsoft Windows. Detta är inte små OS -bashing, jag har verkligen krossat en nöt försöker! Förlåt! Windows-användare som behöver I2C-funktioner tjänas bäst av befintliga USB-baserade lösningar. Uppdatering 24/05/08: Linux-stöd har lagts till, samt exempelkod för Nintendo Wii Nunchuk-kontrollen och BlinkM "smart LED". Se filen README.txt som medföljer källkoden för anvisningar om kompilering och installation på Linux. I2C (kort för Inter-Integrated Circuit) är en tvåtrådig seriell buss som vanligtvis används i datorer för kommunikation på låg nivå mellan interna komponenter. I2C är också populärt inom robotik. Alla typer av sensorer och ställdon finns tillgängliga i en I2C-kompatibel form: ultraljudsavståndsmätare, sensorer för acceleration, lutning, temperatur och tryck, servokontroller och bussutvidgare som tillhandahåller ytterligare allmänna (GPIO) linjer. De flesta moderna mikrokontroller (Atmel), Microchip PIC, etc.) har stöd för I2C inbyggt. Men processorkraften som finns tillgänglig på mikrokontroller är begränsad, och mjukvaruutveckling - med specialiserade korskompilatorer och programmeringsmiljöer - kan ibland vara ett jobb. Med att bärbara datorer och enkortsdatorer blir allt mindre och billigare blir det allt vanligare att dessa system används direkt i robot- och elektronikprojekt. Detta ger gott om kraft för nya funktioner som visionbehandling och mer sofistikerad AI, och det utvidgar omfattningen av tillgängliga utvecklingsverktyg och språk … men det presenterar också ett nytt problem: att koppla ihop dessa "vanliga" system till kringutrustning sker vanligtvis via mainstream konsumentkvalitetsportar som USB; det finns ingen externt tillgänglig "I2C-port" som vi bara kan använda för att använda våra sensorer … eller finns det?

Steg 1: Befintliga alternativ

Befintliga alternativ
Befintliga alternativ
Befintliga alternativ
Befintliga alternativ

Ett sätt att ansluta I2C-enheter till en vanlig stationär eller bärbar dator är via en USB-till-I2C-adapter. Det finns minst ett dussin sådana alternativ, allt från gör-det-själv-kit med öppen källkod, till sofistikerade kommersiella enheter med varje klocka och visselpipa.

En nackdel med USB-till-I2C-metoden är kostnaden. En komplett kommersiell modell kan kosta $ 250 eller mer. Även de "gratis" homebrew -alternativen förutsätter en samling delar och en tidigare investering i en mikrokontrollerprogrammerare och tillhörande kunskap för att använda den. En annan nackdel är den relativa bristen på förarstöd utanför den populära Windows -vikningen. Få av dessa enheter fungerar på Macintosh- eller Linux -datorer.

Steg 2: DDC är I2C

DDC är I2C
DDC är I2C
DDC är I2C
DDC är I2C
DDC är I2C
DDC är I2C

När jag i inledningen sa att det inte finns någon extern I2C -port på de flesta datorer, ljög jag. Det visar sig att det finns, och det har funnits där hela tiden i nästan ett decennium nu, mestadels vilande.

De flesta moderna grafikkort och bildskärmar har stöd för något som kallas Display Data Channel (DDC), en kommunikationslänk i en videokabel som gör att datorn och bildskärmen kan förhandla om ömsesidigt kompatibla upplösningar och tillåter programvarukontroll av bildskärmsfunktioner som normalt nås med fysiska knappar på visa. DDC är i själva verket helt enkelt en implementering av en I2C -buss med några fastställda regler. Genom att utnyttja denna anslutning mellan datorn och bildskärmen (eller använda DDC -linjerna på en ledig oanvänd videoport, till exempel den externa bildskärmsanslutningen på en bärbar dator), kan man ansluta till vissa I2C -enheter på praktiskt taget ingen kostnad, utan att kringgå vanligt behov av en adapter helt. Allt vi behöver för att fysiskt komma åt denna I2C-buss är en hackad videokabel …

Steg 3: Dissektera kabeln

Dissekera kabeln
Dissekera kabeln
Dissekera kabeln
Dissekera kabeln

Fyra ledningar behövs för vårt I2C -gränssnitt: +5V ström, jord, seriell data och seriell klocka. Pinouts för de olika typerna av videoportar finns på Wikipedia eller Pinouts.ru. Kom ihåg att om du använder en VGA -kabel för att hitta en med hela komplementet av stift; Vissa inkluderar bara en delmängd. Genom att minska isoleringen och skärmen från utsidan av kabeln hittar du sannolikt två grupper av ledningar inom. Tjockare ledningar eller buntar av trådar insvept i ytterligare avskärmning bär vanligtvis videosignalen. Vi är inte intresserade av dessa och de kan trimmas tillbaka. Tunnare, oskärmade trådar bär vanligtvis bland annat DDC (I2C) -signalerna. En multimeter eller kontinuitetstester kan hjälpa dig att hitta rätt fyra ledningar för din kabel. Att använda en bar kontakt kan vara fördelaktigt här, eftersom du bara behöver löda fyra ledningar till stiften av intresse. En notering om +5V effekt: tillgänglig ström är mycket begränsad; cirka 50 mA enligt DDC -specifikationen. De flesta I2C-enheter sippar bara en liten bit av ström, så det borde vara möjligt att köra flera samtidigt … men om du använder mer än en eller två lysdioder (eller andra jämförelsevis högströmsenheter) bör extern ström tillhandahållas.

Steg 4: Den färdiga adaptern

Den slutförda adaptern
Den slutförda adaptern

Här är den färdiga adaptern. Det är allt som finns! Jag gjorde min extra stubby så att den enkelt kunde passa i min bärbara väska och lade till en fyrpolig kontakt som ansluts direkt till en I2C servokontroll som jag har.

Steg 5: Programvara och projekt

Programvara och projekt
Programvara och projekt
Programvara och projekt
Programvara och projekt

Mac OS X och Linux källkod för att arbeta med adaptern kan laddas ner från min webbplats (nedladdningslänk finns längst ner på sidan). Det är skrivet i C, och du måste ha gcc installerat (Linux innehåller vanligtvis detta som standard, medan Mac -användare måste installera utvecklarverktygen som är ett valfritt installationsprogram på din ursprungliga OS -skiva eller kan laddas ner gratis från Apple). Exempelkod ingår för att läsa en temperatursensor, blinka en "smart LED" från BlinkM, skriva och verifiera en seriell EEPROM, läsa en Nintendo Wii Nunchuk -styrenhet (endast Linux) och kommunicera med ett servokontrollkort. Tyvärr är detta adapterschema inte kompatibel med alla system. Stöd för DDC är inte obligatoriskt, så inte alla grafikkort stöder denna funktion. Jag har hittills haft lycka till med Mac-system som har ATI- eller Intel-grafikkretsar, men NVIDIA-baserade system har inte tur. På Linux -sidan har jag bara framgångsrikt testat en IBM ThinkPad A31p (ATI -grafik), men det skulle inte fungera med en Asus EeePC (Intel). Bilderna här visar en testrigg som visar olika I2C -enheter i funktion. Datorn läser kontinuerligt omgivningstemperaturen från en I2C temperatursensor, loggar periodiskt dessa data till ett I2C seriellt EEPROM -chip (ja, det kan bara skriva ut till en fil, men detta var för att ytterligare demonstrera I2C -applikationer) och sedan ett servo (genom en I2C -styrenhet) fungerar som en provisorisk indikatorratt. Med biblioteket och provkoden för dessa enheter redan på plats tog det bara några minuter att sätta ihop denna demo (och det mesta var att göra indikatorratten).

Rekommenderad: