Forum: Mikrocontroller und Digitale Elektronik TWI / I²C Adressierung gleicher Bausteine --> Wie?


von Michael B. (planlessmichi)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

bisher habe ich bei meinen AVR-Projekten I²C (bzw. halt TWI) immer das 
"Glück" gehabt, dass die Slave-Bausteine (LED-Treiber, EEPROM,...) 
einstellbare Adressen hatten.
Jetzt kenne ich 3 Möglichkeiten, die alle verständlich sind:
1) Adresse kann mit mehreren (z.B. 3) herausgeführten Pins eingestellt 
werden
2) Adresse kann mit 1 Pin (über analoge Spannung) eingestellt werden 
(z.B. SAA1064)
3) Adresse ist fix, aber es gibt verschiedene Varianten (mit 
unterschiedlichen Bestellnummern)

Was mache ich aber, wenn ich mit einem Mega8 mehrere (hier 3) Bausteine 
ansprechen muss, bei denen nur eine Adresse ausgeliefert wird und die 
zudem auch nicht verändert werden kann?

Es handelt sich hierbei um die Bausteine "MCP4018" von microchip.
Das sind digitale Potis mit 100kOhm und 6 Pins (siehe Device.gif).
Die Spec (zu finden unter 
http://ww1.microchip.com/downloads/en/DeviceDoc/22147a.pdf) habe ich 
nicht mit angehängt, da 3MB groß; aber der wichtige Teil steht auf Seite 
36 und das habe ich mal als "AddrInfo.gif" angehängt.
Die blöden Dinger haben alle die gleiche Adresse :-(
Zuerst dachte ich mir: Kein Problem, hänge ich die ganzen Clock-Eingänge 
der Potis an die Ausgänge von UND-Gattern und die Eingänge beschalte ich 
so, wie im Anhang beschrieben (siehe "KeineGuteIdee.gif)
Ich glaube, dass es bei dieser "Lösung" nur bedingt funktionieren würde, 
weil - Kann der Slave über "Festhalten einer Leitung (SCL(?)) nicht dem 
Master mitteilen, dass er zu schnell ist? Das ginge dann so nämlich 
nicht mehr.
Aber wie macht man sowas jetzt wirklich? Das müsste doch fast sowas wie 
ein Standardproblem sein, oder?

Wie immer würde ich mich über ernstgemeinte Hilfe freuen :-)
Vielen Dank und viele Grüße,
Michael

von H.Joachim S. (crazyhorse)


Lesenswert?

3 x I2C-Bus aufbauen, anders geht es nicht.
Oder den Bus multiplexen.

von gtf (Gast)


Lesenswert?

IIC Multiplexing
Beitrag "i2c multiplexing"
1xMal durchlesen, und schon hast du die Lösung
gruß gtf

von Nils S. (kruemeltee) Benutzerseite


Lesenswert?


von electronicfox (Gast)


Lesenswert?

Oder so machen wie Grundig. SDA, SCL und I2CS. I2CS schaltet einen 
HEF4053 um, welcher SDA und SCL beim Senden umschaltet. Jeder Bus 
benötigt eigene Pullups.

von Sven (Gast)


Lesenswert?

Oder ein adressierbares Poti verwenden? Gibts da welche?

von GG (Gast)


Lesenswert?

Servus,

ich bin mir sicher, dass das nicht in Frage kommt, aber ich würde den 
Prozessor wechseln.

Der Atxmega128a1 kann vier TWI bedienen! Und  das funktioniert 
hervorragend.
Für gute 10 Euro ist der Prozessor + SMD Adapterplatine für TQFP 100 
zuhaben.
http://shop.embedit.de/browse_030009010_188__.php. Das Löten von 
SMD-Bausteinen ist Voraussetzung !!! Oder eine fertiges Board 
http://shop.embedded-projects.net/index.php?module=artikel&action=gruppe&id=12 
für 16 Euro.

Der Code ist nicht aufwendiger als bei den alten Atmegas. TWI-Code gibt 
es mittlerweile auch im Internet. Oder mit dem Atmel "TWI-Tool" ist die 
Sache gleich erledigt.




Gruß GG

von Peter D. (peda)


Lesenswert?

Mach einfach SW-I2C, ist nicht aufwendiger als HW-I2C und Du kannst 
beliebig viele Busse ansteuern.

Es reicht auch, nur die SDA-Leitung umzuschalten. Dazu schreibt man die 
I2C-SW so um, daß mit einem Maskenbyte der SDA-Pin ausgewählt wird. 
Damit lassen sich dann 9 I2C-Busse realisieren.

Das HW-I2C braucht man eigentlich nur für Slave- oder Multimaster-I2C.


Peter

von Sven (Gast)


Lesenswert?

Aber bißchen dämlich isses doch schon, dass das Poti nicht adressierbar 
ist, oder? Meist hab ich doch in einer Anwendung nicht nur 1 Poti, und 
ein 8-beiner, der dann 4 Adressen erlauben würde, wäre sicher möglich.

von Michael B. (planlessmichi)


Lesenswert?

Ja, ist sogar sehr blöd; aber was soll ich machen? Die Teile gibt es 
ohnehin nicht wie Sand am Meer - zumindest für Mr. Privat - und wenn ich 
die Teile dann vor der Nase habe, muss ich halt das Beste draus machen.
Aber das mit dem SW-TWI oder dem Atxmega128a1 muss ich mir mal 
anschauen; vielleicht ist das wirklich die bessere Alternative.

BTW: Hat jemand eine Idee, wie ich mit (mehreren) digitalen 50kOhm und 
100kOhm ein 250kOhm-Poti nachbauen kann? Der "Eingang" soll dabei immer 
mit 250kOhm "belastet" werden, der Ausgang soll von 0 - 250kOhm 
einstellbar sein UND die Schleifer sollten nicht irgendwie umgeschaltet 
werden müssen (also von einem zum nächsten Poti), da ein Audiosignal von 
vielleicht gerade mal 30mVss über das Poti geregelt werden soll. Ein 
Umschalten würde sicherlich zu einem lauten Knacken im Lautsprecher 
führen (denke ich zumindest)
Gibt's da brauchbare Ideen? Die aktuelle Lösung sieht 3x100kOhm und 
2x50kOhm vor... Bisschen unschön :-(

von Michelle K. (Firma: electronica@tdnet) (michellekonzack) Benutzerseite


Lesenswert?

Schon mal bei Maxim nachgesehen?

    http://www.maxim-ic.com/products/digi_pot/

Da gibt es normale und NV Potis mit 32, 64, 128, 256 und 1024 tabs 
Auflösung sowie in SPI und I²C.

Grüße
Michelle

von Michael B. (planlessmichi)


Lesenswert?

Hi, mir "müssen" halt die reichen, die ich habe. Und selbst wenn ich bei 
Maxim bestellen könnte, was sicherlich nicht geht, haben die anscheinend 
auch keine mit 250kOhm. Daher wäre das wohl auch keine Verbesserung...

von gfk (Gast)


Lesenswert?

Habe z.Zt selbst ein problem mit einem poti von Intersil X9118 und mich 
nach alternativen umgesehen.Sieht man sich aber die specs der Anderen an 
hat jedes gegenüber dem X9118 einen Nachteil.Übrigens gibt es von 
Maxim(dallas)kein 1024 taps pot mit i2c sondern nur mit spi!)Erst wenn 
man einige Erfahrung mit dig.potis gesammelt hat ,lernt man diese 
features zu schaetzen : non-volatil,und zwar automatisch beim abschalten 
der versorgunsspannung,beliebig oft (analog Dev nur bis zu 50 x)vier 
solche Speicher,d.h. es bleiben noch drei zur eigenen Verfuegung 
frei,(spart mir in meiner Anwendung mit zwei potis ein ganzes 
eeprom)dig.Spannungsbereich 2,7 -5,5V ,kann also direct mit LPC-arms 
betrieben werden,und das Beste:
der Analog - Spannungsbereich +- 5V d.h. man kann es in analog 
Schaltungen mit +- 5V betreiben.
Habe diese potis schon seit 2006 mit bascom im Einsatz.
Jetzt kommt aber mein Problem:
Die programmierung.Diese nicht ganz i2c konforme sequenz (erklärt auch 
warum Maxim das 1024 pot nur mit spi anbietet)macht probleme, wenn man 
den eingebauten HW i2c controller verwendet.dies gilt gleichermassen 
fuer atmega128 als auch den LPC2138.Beschreibt auch intersil in einer AN 
91.
Es bleibt einem also nur einen SW i2c treiber zu schreiben übrig,mit der 
HW loesung kan man die potis nur beschreiben,aber die Werte nicht mehr 
zurecklesen! Mit der bascomAVR SW-version funzt es einwandfrei,aber eben 
nur fuer AVR's.
Die Befehlsfolge ist naemlich die:
1.start Mit deviceadresse und R/W bit 0 od 1
2. Write eines "opcodes" damit das pot weiss,welches Register.
--und hier ist jetzt auch die crux -der HW i2c Kontroller laesst sich 
nicht ueberreden ,bei gesetztem R/W bit fuer Lesen, hier zu schreiben.
3 lesen des MSB- byte
4.Lesen des LSB bytes
5.stop
Vom MSB byte sind nur die beiden lsb-bits relevant (fuer die 10 bit 
daten)
den inhalt davor muss man eben eliminieren.
ZZT lauft von mir eine Anfrage bei NXP,ob man den LPC2138 doch noch dazu 
bringen kann,zu Schreiben auch wenn das Lesebit gesetzt ist.Gibts da 
keine Antwort,bleibt nur die SW loesung.
Da hat auch ein Hein vonne Werft hier mal ein iic.c gepostet.
Es wuerde mir aber viel Arbeit ersparen,wenn dazu auch ein C-beispiel 
mit den verwendeten funktionen dabei waere.Habs mal selbst versucht,aber 
das lief elende langsam und die gelesenen Daten waren auch Hausnummern.
Sollte Interesse bestehen,es gibt neben dem code auch Bilder (jpg) mit 
den zugehoerigen Oszillogrammen
gruss
gfk

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.