Pages: [1]   Go Down
Author Topic: Modifica per libreria Wire: attivazione pull-up I2C su richiesta  (Read 445 times)
0 Members and 1 Guest are viewing this topic.
Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21646
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Siccome non avevo molto da fare, mi è tornata a mente una discussione di ieri in cui si parlava delle resistenze di pull-up attivate in automatico dalla libreria Wire quando si usa il bus I2C.
Mi sono messo a "sbirciare" la libreria ed ho perciò pensato di inserire un modo per poter attivare le resistenze di pull-up solo quando richiesto. Questo mi pare utile nel caso si usino delle R esterne e non si voglia l'attivazione di quelle interne.

Ho aggiunto 3 nuovi metodi:
Code:
Wire.beginNoPullup()
Wire.beginNoPullup(indirizzo_byte)
Wire.beginNoPullup(indirizzo_int)
Sono equivalenti ai metodi standard della libreria. Il primo aggancia l'Arduino come MASTER, gli altri agganciano l'Arduino come SLAVE con l'indirizzo specificato.

Allegati gli zip delle versioni per l'IDE 002x e 1.0. Basta scompattare l'archivio e sostituire la cartella Wire a quella contenuta in /arduino/libraries.

Siccome non ho materialmente un Arduino con me, ho provato solo la compilazione e va tutto bene. Verificate se funziona anche  smiley-sweat (basta collegare un LED ad uno dei pin A4/A5), caricare un esempio di Wire e vedere se il led si illumina con una luce fioca oppure no.

EDIT:
ho aggiornato i file. Adesso i nuovi metodi sono evidenziati dall'IDE in fase di scrittura (mi ero dimenticato).

* Wire1.0.zip (12.58 KB - downloaded 3 times.)
* Wire002x.zip (12.7 KB - downloaded 3 times.)
« Last Edit: April 29, 2012, 04:13:52 am by leo72 » Logged


BZ (I)
Offline Offline
Brattain Member
*****
Karma: 236
Posts: 20273
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Carino. Grazie del bel laboro.
Leo, mi consci che sono come tommaso incredulo.
Per cosa serve il "Wire.beginNoPullup(indirizzo_int)" se l' indirizzo va da 1 a 127?
Ciao Uwe
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21646
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Carino. Grazie del bel laboro.
Leo, mi consci che sono come tommaso incredulo.
Per cosa serve il "Wire.beginNoPullup(indirizzo_int)" se l' indirizzo va da 1 a 127?
Ciao Uwe
Secondo anche il mio pensiero non serve assolutamente a nulla ma ho notato che sia nella versione 002x che nella versione 1.0 della libreria esiste la possibilità di passare un parametro int. Parametro che poi viene riconvertito a byte!  smiley-yell

Sicuramente serve per retrocompatibilità con vecchie versioni della liberia o forse per accettare anche parametri passati da utenti poco attenti.

Quindi l'ho rimesso anch'io, giusto per essere allineato con i metodi "standard".
Logged


Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9185
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Secondo anche il mio pensiero non serve assolutamente a nulla ma ho notato che sia nella versione 002x che nella versione 1.0 della libreria esiste la

Un motivo ci sarebbe, esiste anche l'I2C extended address che lavora a 10 bit, due byte invece di uno solo, permettendo di indirizzare fino a 1024 device.
Ho dato uno sguardo alla libreria e il metodo con intero non fa altro che richiamare il metodo con l'address a 8 bit, penso l'abbiano inserito in previsione di una futura implementazione dell'address a 10 bit.
Logged

Pages: [1]   Go Up
Jump to: