www.mikrocontroller.net

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


Autor: Michael B. (planlessmichi)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: H.Joachim Seifert (crazyhorse)
Datum:

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

Autor: gtf (Gast)
Datum:

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

Autor: Nils S. (kruemeltee) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: electronicfox (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder ein adressierbares Poti verwenden? Gibts da welche?

Autor: GG (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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... 
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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael B. (planlessmichi)
Datum:

Bewertung
0 lesenswert
nicht 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 :-(

Autor: Michelle Konzack (Firma: electronica@tdnet) (michellekonzack) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael B. (planlessmichi)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: gfk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.