Interferenza Display con TM1650 e RTC DS3231 [RISOLTO]

Buongiorno,
ho un problema nell’usare assieme due componenti I2C, i due componenti sono un display 4x7segmenti basato su TM1650 e un modulo RTC ds3231, messi in parallelo (ho provato con e senza resistenza di pullup).
Presi singolarmente funzionano, messi assieme su A4 e A5 (Arduino Uno) il display in qualche modo “copre” l’rtc e non lo fa funzionare.
Ho quindi lanciato l’utility i2c scan e per l’RTC mi ha trovato 0x68 (e 0x57) mentre per il display mi ha trovato TUTTI :o gli indirizzi da 0x01 a 0x7E, quindi anche 0x68.

I2C Scanner
Scanning...
I2C device found at address 0x01  !
I2C device found at address 0x02  !
I2C device found at address 0x03  !
…………………………………………………………………………………………
I2C device found at address 0x7C  !
I2C device found at address 0x7D  !
I2C device found at address 0x7E  !
Done

Vorrei capire se sia normale sta sfilza di indirizzi perché cercando in rete ho trovato QUESTO articolo dove sembra che il TM1650 non sia proprio proprio I2C.:

The protocol is ‘‘I2C-like’’, but not compatible to I2C (very strange, uses commands instead of address+RW bits, you could not have more than one device on the same bus since the I2C address is not used).

(L’autore metterebbe anche a disposizione una libreria arrangiata dove si può scegliere i pin da usare per SDA e SCL, ma non mi sembra una libreria pensata per Arduino.)

Ogni suggerimento è ben accetto, allego link ai prodotti e schema di collegamento.

Display 4x7 segmenti

Modulo RTC

Grazie in anticipo

Basta leggere il datasheet per vedere che non è esattamente I2C, ma un qualche cosa che gli somiglia e che il produttore del chip chiama “2-wire serial transmission protocol”.

Prova a vedere se con QUESTA libreria ti funziona e non va in conflitto, altrimenti dovrai usare una I2C software e due pin diversi solo per quel modulo.

Guglielmo

P.S.: Il problema è che, facendo base dall’indirizzo 0x24, poi usa un valore per ogni digit !!! Nel sorgente si vede chiaramente che, per scrivere su ogni digit, chiama la “Wire.beginTransmission(TM1650_DCTRL_BASE + i);” con ‘i’ che va da 0 al numero di digits … :o

TM1650_english.pdf (167 KB)

TM1650_V1.0.pdf (464 KB)

Guglielmo, intanto grazie della risposta.

Purtroppo quella libreria è la prima che ho provato (non che ce ne siano molte) e non son riuscito a risolvere.

Felice di sapere che c'è la possibilità di avere una "emulazione" del I2C, comincerò a scandagliare il forum in cerca di info..

Grazie ancora

Sandruino:
Felice di sapere che c'è la possibilità di avere una "emulazione" del I2C ...

... QUESTA è una, ma ce ne sono svariate :wink:

Guglielmo

Alla fine con una soluzione un po’ casereccia ho risolto, anziché usare la SoftI2CMaster e poi dovermi gestire i dati dei registri ho usato la SoftwareWire, creando delle versioni personalizzate delle due librerie che gestiscono l’RTC e il display e all’interno di queste ho sostituendo i riferimenti alla lib. Wire con un nuovo bus SoftwareWire.

REGOLAMENTO, punto 16.9NON si riaprono thread più vecchi di 9/12 mesi!.

Chi ha qualche cosa da dire, apre un nuovo thread ed, eventualmente, come riferimento, mette un link al vecchio thread.

Come da regolamento … post accodati a vecchi thread verrano cancellati senza alcun preavviso e, con l’occasione, il vecchio thread verrà bloccato.

Guglielmo