Sommario:

L'adattatore I2C (I-Squared-C) più economico al mondo: 5 passaggi (con immagini)
L'adattatore I2C (I-Squared-C) più economico al mondo: 5 passaggi (con immagini)

Video: L'adattatore I2C (I-Squared-C) più economico al mondo: 5 passaggi (con immagini)

Video: L'adattatore I2C (I-Squared-C) più economico al mondo: 5 passaggi (con immagini)
Video: Quando provi a fare un complimento a una ragazza... 2024, Novembre
Anonim
L'adattatore I2C (I-Squared-C) più economico al mondo
L'adattatore I2C (I-Squared-C) più economico al mondo

Crea un'interfaccia sensore per il tuo computer per meno di un dollaro! Aggiornamento 6/9/08: dopo aver esplorato diverse strade, ho concluso che non esiste un modo pratico per implementare questa tecnica in Microsoft Windows. Questo non è un meschino attacco al sistema operativo, ho davvero rotto un dado nel tentativo! Scusa! Gli utenti Windows che necessitano di funzionalità I2C sono meglio serviti dalle soluzioni esistenti basate su USB. Aggiornamento 24/5/08: è stato aggiunto il supporto per Linux, così come il codice di esempio per il controller Nintendo Wii Nunchuk e il "LED intelligente" BlinkM. Vedere il file README.txt incluso con il codice sorgente per istruzioni sulla compilazione e l'impostazione su Linux. I2C (abbreviazione di Inter-Integrated Circuit) è un bus seriale a due fili tipicamente utilizzato nei computer per la comunicazione di basso livello tra i componenti interni. I2C è anche popolare nella robotica. Tutti i tipi di sensori e attuatori sono disponibili in una forma compatibile con I2C: telemetri a ultrasuoni, sensori per accelerazione, inclinazione, temperatura e pressione, servocontrollori ed espansori bus che forniscono linee generiche aggiuntive (GPIO). La maggior parte dei moderni microcontrollori (Atmel, Microchip PIC, ecc.) hanno il supporto per I2C integrato. Ma la potenza di elaborazione disponibile sui microcontrollori è limitata e lo sviluppo del software, con cross-compilatori specializzati e ambienti di programmazione, a volte può essere un lavoro ingrato. Con laptop e computer a scheda singola che diventano sempre più piccoli e convenienti, è sempre più comune vedere questi sistemi utilizzati direttamente nei progetti di robotica ed elettronica. Ciò fornisce ampio potere per nuove funzionalità come l'elaborazione della visione e l'intelligenza artificiale più sofisticata, e amplia notevolmente la portata degli strumenti e dei linguaggi di sviluppo disponibili… ma presenta anche un nuovo problema: l'interfacciamento di questi sistemi "normali" con le periferiche viene generalmente eseguita porte di livello consumer come USB; non esiste una "porta I2C" disponibile esternamente a cui possiamo semplicemente attingere per utilizzare i nostri sensori… o no?

Passaggio 1: opzioni esistenti

Opzioni esistenti
Opzioni esistenti
Opzioni esistenti
Opzioni esistenti

Un modo per collegare i dispositivi I2C a un normale computer desktop o laptop è tramite un adattatore da USB a I2C. Ci sono almeno una dozzina di queste opzioni là fuori, che vanno dai kit fai-da-te con software open source, a sofisticate unità commerciali con ogni campana e fischietto.

Uno svantaggio dell'approccio da USB a I2C è il costo. Un modello commerciale completo può costare $ 250 o più. Anche le alternative homebrew "gratuite" presuppongono una raccolta di parti e un investimento precedente in un programmatore di microcontrollori e le relative conoscenze per utilizzarlo. Un altro aspetto negativo è la relativa scarsità di supporto per i driver al di fuori della popolare piega di Windows. Pochi di questi dispositivi funzionano in modo nativo su computer Macintosh o Linux.

Passaggio 2: DDC è I2C

DDC è I2C
DDC è I2C
DDC è I2C
DDC è I2C
DDC è I2C
DDC è I2C

Quando ho detto nell'introduzione che non c'è una porta I2C esterna sulla maggior parte dei computer, ho mentito. Si scopre che c'è, ed è stato lì per quasi un decennio ormai, per lo più inattivo.

La maggior parte delle schede grafiche e dei monitor moderni supporta qualcosa chiamato Display Data Channel (DDC), un collegamento di comunicazione all'interno di un cavo video che consente al computer e al display di negoziare risoluzioni reciprocamente compatibili e consentire il controllo software delle funzioni del monitor normalmente accessibili tramite pulsanti fisici sul Schermo. DDC è, infatti, semplicemente un'implementazione di un bus I2C con poche regole stabilite. Attingendo a questa connessione tra computer e monitor (o sfruttando le linee DDC su una porta video libera inutilizzata, come la connessione del monitor esterno su un laptop), è possibile interfacciarsi con alcuni dispositivi I2C praticamente senza spese, bypassando il consueta necessità di un dispositivo adattatore del tutto. Tutto ciò di cui abbiamo bisogno per accedere fisicamente a questo bus I2C è un cavo video hackerato…

Passaggio 3: dissezione del cavo

Sezionare il cavo
Sezionare il cavo
Sezionare il cavo
Sezionare il cavo

Sono necessari quattro fili per la nostra interfaccia I2C: alimentazione +5V, massa, dati seriali e clock seriale. I pinout per i vari tipi di porte video possono essere trovati su Wikipedia o Pinouts.ru. Ricorda se usi un cavo VGA per trovarne uno con il complemento completo di pin; alcuni includono solo un sottoinsieme. Riducendo l'isolamento e la schermatura dall'esterno del cavo, probabilmente troverai due gruppi di fili all'interno. I cavi più spessi o i fasci di cavi avvolti in una schermatura aggiuntiva di solito trasportano il segnale video. Non siamo interessati a questi e possono essere tagliati indietro. I fili più sottili e non schermati di solito trasportano, tra gli altri, i segnali DDC (I2C). Un multimetro o un tester di continuità può aiutare a trovare i quattro fili corretti per il cavo. L'utilizzo di un connettore nudo può essere vantaggioso in questo caso, poiché è sufficiente saldare quattro fili ai pin di interesse. Una nota sull'alimentazione a +5V: la corrente disponibile è molto limitata; circa 50 mA secondo la specifica DDC. La maggior parte dei dispositivi I2C assorbe solo una piccola quantità di corrente, quindi dovrebbe essere possibile eseguirne diversi contemporaneamente … ma se si utilizzano più di uno o due LED (o altri dispositivi relativamente ad alta corrente), dovrebbe essere fornita alimentazione esterna.

Passaggio 4: l'adattatore completato

L'adattatore completo
L'adattatore completo

Ecco l'adattatore finito. Questo è tutto quello che c'è da fare! Ho reso il mio extra tozzo in modo che potesse adattarsi facilmente alla borsa del mio laptop e ho aggiunto una spina a quattro pin che si collega direttamente a un servo controller I2C che ho.

Passaggio 5: software e progetti

Software e progetti
Software e progetti
Software e progetti
Software e progetti

Il codice sorgente di Mac OS X e Linux per lavorare con l'adattatore può essere scaricato dal mio sito web (il link per il download è in fondo alla pagina). È scritto in C e dovrai avere gcc installato (Linux di solito lo include per impostazione predefinita, mentre gli utenti Mac dovranno installare gli strumenti di sviluppo che sono un programma di installazione opzionale sul disco del sistema operativo originale o scaricabile gratuitamente da Apple). È incluso un codice di esempio per leggere un sensore di temperatura, far lampeggiare un "LED intelligente" BlinkM, scrivere e verificare una EEPROM seriale, leggere un controller Nintento Wii Nunchuk (solo Linux) e comunicare con una scheda controller servo. Purtroppo questo schema adattatore non è compatibile con tutti i sistemi. Il supporto per DDC non è obbligatorio, quindi non tutte le schede video supportano questa funzionalità. Finora ho avuto fortuna con i sistemi Mac dotati di chip grafici ATI o Intel, ma i sistemi basati su NVIDIA sono sfortunati. Per quanto riguarda Linux, ho testato con successo solo un IBM ThinkPad A31p (grafica ATI), ma non funzionerebbe con un Asus EeePC (Intel). Le immagini qui mostrano un banco di prova che mostra vari dispositivi I2C in azione. Il computer legge continuamente la temperatura ambiente da un sensore di temperatura I2C, registra periodicamente questi dati su un chip EEPROM seriale I2C (sì, potrebbe semplicemente stampare su un file, ma questo era per dimostrare ulteriormente le applicazioni I2C), e poi un servo (attraverso un controller I2C) funge da quadrante indicatore improvvisato. Con la libreria e il codice di esempio per questi dispositivi già a posto, ci sono voluti solo pochi minuti per mettere insieme questa demo (e la maggior parte di questo è stato nel creare il quadrante dell'indicatore).

Consigliato: