Forum: Mikrocontroller und Digitale Elektronik Frage zu I²C


von Benn S. (Gast)


Lesenswert?

1. Ist es möglich mit einem AVR einen I²C-Bus aufzubauen?
2. gibt es ICs die weitere I/O-Ports haben, die man an den I²C-Bus
hängen kann, denen man per Jumper Adressen  zuweisen kann, und auf die
man von der Microcontrollersoftware direkt zugreifen kann.
3. wenn das möglich ist: wieviele I/O-Ports vertägt der I²C-Bus
4. Ich bin ein einsteiger in der Microkontrollertechnik

mfg BS - Energieelektoniker sind die besseren Schlosser g

von Günter (Gast)


Lesenswert?

Hallo

zu 1.
ja

zu 2.
ja: z.B. pcf8574 mit 8 Port's (lesen und schreiben)
    z.B. pcf8591 AD 7 DA-Converter

    weitere siehe homepage von phillips
    (bzw. google'n .... / da gibts jede Menge Info im Netz)

zu 3.
2 ports : 1 x SDA
          1 x SCL

bei den AVR's Hardware und/oder Software-Lösungen
je nach eingesetzten Typ
(siehe Atmel-homepage - Übersicht)


zu 4.

??? jeder fängt mal 'klein' an...

Günter

von Benn S. (Gast)


Lesenswert?

Danke!!!
ICh hab mämlich ein absolut endgeiles Projekt vor (es is nur geil wenns
letztenlich so funktioniert):
Ich möchte das I²C System als alternative zum käuflichen Sytem EIB (bus
System für Haustechnik) verwenden, Ich hab mir das follgendermaßen
Vorgestellt:
Lichtschalter => IC => I²C => AVR => I²C => IC => Relais => Lampe
oder
Lichtschalter => IC => I²C => AVR => I²C => IC => Relais => alle Lampen
im Haus aus

von Björn (Gast)


Lesenswert?

Ich glaub nicht das der I²C das mitmacht! Ich kann mich irren bin aber
der meinung das I²C Maximal über 10 Meter geht.

MfG Björn

von Benn S. (Gast)


Lesenswert?

kann ma des net vertärken???
mit einer art Booster oder so???

von Bernhard T (Gast)


Lesenswert?

Benn, I²C verträgt keinen langen Leitungen. RS485 ist da wohl besser
geeignet. Ich bin allerdings der Meinung das ein selbstentwickelter Bus
der möglichst wenige Leitungen benötigt (am besten Signalübertragung
über die Stromversorgung) noch deulich günstiger währe.
Gruß Bernhard

von crazy horse (Gast)


Lesenswert?

vergiss das ganz schnell wieder, damit wirst du nicht froh. In solch
einer Installation wird der I2C niemals zufriedenstellend
funktionieren. Gedacht, entwickelt und spezifiziert ist das Ding als
Kommunikation innerhalb eines Geräts, mit langen Leitungen, noch dazu
in verseuchter Umgebung, funktioniert das nicht. 10m halte ich schon
für sehr gewagt.

von Benn S. (Gast)


Lesenswert?

OK, Danke!!!

von Rainer D (Gast)


Lesenswert?

I²C ist nur für kleinere Leitungslängen geeignet, d.h für Kommunikation
auf ner Platine also im cm Bereich. Ich kenn zwar den EIB-Bus net aber
der hat mit Sicherheit wesentlich größere Leitungslängen. Hier im Forum
gibts sicher ein paar helle Köpfe die mit sowas (EIB) Erfahrung haben.

Es gibt sogar nen Port Expander mit 16 Ein/Ausgangspins....von dem
dürften so ein par stück ansprechbar sein....normalerweise haben die 3
konfigurierbare Adressbits was 8 verschiedene Adressen bedeutet ich
weiß aber jetzt nicht ob sich 8 nacheinander betreiben lassen aber das
Datenblatt gibt hier sicher weitere Informationen.

Hab jetzt aus Interesse mal nachgelesen der 16biter heißt
PCF8575/PCF8575C und es lassen sich maximal 8 Stück mit je 16 Ausgängen
an einem Bus betreiben......sind stolze 128 Ein-/Ausgänge mit 400kBit
was eigentlich für Hausanwendungen Reichen würde wenn da nicht das
Problem mit der Leitungslänge wär.

So auch das hab ich nachgelesen auf http://www.eib-home.de gibts sehr
nette Infos. Der I2C läßt ca. ne leitunglänge von 0,5-1m zu wobei der
EIB mit 24V Betriebsspannung auf 1000m kommt....

Na ja wenn ich sowieso nen anderen Bus brauch um die Daten vom Schalter
zum Schütz/Schaltlogic zu schicken kann ich gleich den anderen Bus
hernehmen.....

MfG & frohes Schaffen
Rainer

von Axel (Gast)


Lesenswert?

Hallo,

meine Frage passt ganz gut hier her...

Wie groß müssen die Pull-Up-Widerstände, die den I2C-Bus abschliessen
sein?

Danke,

Grüsse von Axel

von Björn (Gast)


Lesenswert?

Ich bin der meinung so im bereich zwischen 4,7k und 10k korrigiert mich
wenn ich falsch liege.

von Reini (Gast)


Lesenswert?

Hey at all,

4,7k - 10 pull ups sind o.k.

10 Meter ist echt schon lang, da kommen meist nur ganz schlappe flanken
auf die leitung und dann ist alles aus.

Der Name "I²C-Bus" sagt es bereits schon, "Interner IC-Bus" er
wurde zur Kommunikation zwischen einigen IC auf einem Board
entwickelt.

Reini

von Dirk (Gast)


Lesenswert?

HI,

@Ben: Such mal nach AVR mit Can Bus. Es hatte mal jemand eine HP zur
Hausautomatisierung mittels Can Bus gehabt.
Du koennest es auch ueber RS232 machen. Sprich 2 AVR`s ein AVR als
steuert Geraet und der andere (nach 10m Entfernung) steuert die Lampe
ueber Relai.

Mfg Dirk

von Ratber (Gast)


Lesenswert?

Hmmm

Nett aber nicht gsnz vollständig.

@Benn S.

Zu 1.und 4. :  Is schon beantwortet

Zu 2.und 3.

Ich formuliere es mal so das der Bus Theoretisch fast unendlich
erweiterbar ist.
Dazu sind aber einige erfüllte Bedingungen nötig bzw. gibt es da
Zeitliche Grenzem.

Der einfache Bus läßt als Adressraum  Bit zu (Die 10 Bit Geräte lasse
ich mal außen vor)so das sich daraus maximal 2 hoch 7 =128 Adressen
ergeben.

Theoretisch natürlich denn zb. Die Adresse "0" ist nicht verfügbar
und einige andere ebenfalls nicht so das es sich am Ende so um die 64
Effektive Adressen beläuft.

Dh. du kannst im Einfachsten Fall 64 Chips anschließen.

Da gibt es viele verschiedene Sachen (Deswegen nutze ich se ja auch
gerne).


8/16 Bit Ports.

AD/DA Wandler (1-8 Fach,6-16 Bittig,Gemischt (zb.4AD/1DA)

EEProms

Ram

Diverse HF-Schaltungen (Zähler,Empfänger aller Art,Generatoren usw.)

Audiokreise .
zb. 2x22W Verstärker mit Klangregelstufe und Selektor + Anti-plopp
5 Band Equalizer

Eingangsselektoren

Audio/Video-Kreuzmatrix

Kelinecontroller für I2C

Uhren/Kalender

Temparatursensoren

Infrarotsensoren

Und noch einige Speziellere Sachen

Plus dem was mir gerade nicht eingefallen ist.

Da der I2C-Bus ursprünglich für die Vereinfachte Steuerung von
Fernsehern,Videorecordern,Hifigeräten also generell Audio/Video gedacht
ist sind die Bausteine größtenteils auch dort angesiedelt.
(Wo ander mit dem Ausschlachten aufhöhren mache ich noch etwas
Weiter.Nene einfaches UKW-Radio am I2C is immer ne nette Spielerei)


Bei fast allen Chips ist die Adresse in einen Festen und einen
Variablen Teil aufgeteilt.
Dh. bei den Meisten Chips sind die ersten 4 Adressbits fest vegeben und
die letzten 3 Frei verfügbar (Am Chip über 3 Pinne Adressierbar)so das
man bis zu 8 Gleiche Chips am Bus hängen und sie auch einzeln
ansprechen kann.

Einige haben weniger Adressierungsmöglichkeiten und einige haben mehr
freie Adressbits.

Einer ist der PCA9501 (8 Bit Port + 256 Byte Eeprom) bei dem nur das
Erste Bit "fest" ist und die restlichen 6 Bit frei belegbar sind so
das man von diesem dann 2 hoch 6 =64 Stück an einem Port betreiben
kann.
Das sind immerhin 64*8=512 Bit mit denen man Spielen kann.

Soviel zu den Möglichkeiten.

Dann komme ich zur Erweiterung.

Auch für I2C gibt es Portexpander.

Die machen eigenlich nix anderes als ganze Busstränge auf den Master
(Der der Sagt wo es lang geht) zu schalten so das man 2 oder mehrmals
die gleichen Adressen nutzen kann.

Nimm mal an du hast einen kompletten Bus 3x aufgebaut und damit alle
Adressen 3x vergeben was ja normalerweise nicht geht.

Der Expander schaltet eben nur einen der 3 Busse an den Master ud das
geschieht natürlich auch per I2C so das alles von einem Master aus
kontrollierbar ist.
Allerdings kostet das natürlich Zeit da evtl. der Bus erst umgeschaltet
werden muß.
Will man erweitern dann kann man das ganze auch Kaskadieren was dann
wieder mit extraschaltzeiten bezahlt wird.
Aber bei 1 zu 5 Expandern hätte man schon bei 2 weiteren Ebenen (Plus
Hauptebene.Die kann man ja bis auf die Expanderadresse voll nutzen.Also
Zeitkritische Bausteine an den Hauptbus) neben den ersten 64 Adrressen
auf maximal 1664 Adressen erweitern ohne wesentlich an geschwindigkeit
zu verlieren.

das sind dann in Zahlen zb. 1664*8=13312 Bits die man Schalten/Abfragen
kann.

Das dürfte dann für jeden reichen ggg




Bleibt noch das Strittige Thema der Buslänge.

Ursprünglich nur für Geräte und damit für kleine Strecken bis ca. 1m
gedacht ist es mit größeren längen etwas Schwierig.

als Begrenzung wird eine Leitungskapazität vo maximal 400pF angegeben
so das bei einfachen Kabeln schon nach einigen Metern Ende ist.

Mit geschirmten Strippen kommste vieleicht auf 10-30m aber dann ist
schluß.

Die Lösung sind Bustreiber die die Leitungskapazitäten reichlich
ausweiten (auf Ca. 4000 pF) so das man gegebenenfalls auf einige
Hundert meter kommen kann.(Je nach Kabel)
Im Grunde sind das nur Impedanzwandler.

Als Beispiel sei hier mal der P82B715 genannt.

Wenn man genug aufwand betreibt dann geht auch der I2C auf längere
Reisen aber man Muß sich überlegen ob sich das auch lohnt.

Nicht behandelt habe ich das Problem der Netzeinstreuung die ja
zwangsweise auftritt weil der I2C bus sehr Warscheinlich der
Stromversorgung folgt also im selben Kanal,Rohr usw. verlegt wird.

Die beste Methode ist allerdings die Taktrate runterzusetzen.
Je langsamer desto sicherer.
Da I2C keinen festen Takt hat (Man kann die Befehle und Daten auch per
hand durchtackern .Meinentwegen ein Bit pro Tag) ist eine Beliebige
Geschwindigkeit Zwischen 0 und Maximum möglich.

Zum Schalten ist es auch nicht so wichtig das es innerhalb von 5
Millisekunden geschieht.

Am Besten ist es das mal in ruhe auszuprobieren bevor man sich in
Unkosten stürzt.

Das waren meine 2 Cent dazu (Ich wollte nur mal wiedersprechen das I2C
nur ne Kurzstreckengeschichte ist).


Gruß
Ratber

von AndreasH (Gast)


Lesenswert?

Sieh mal hier in den Links nach.
Soweit ich dass in Erinnerung habe, gibt es dort 2 Projekte, wo genau
das gleiche gemacht wurde, wie Du vorhast. Allerdings mit dem Can-Bus.

EIB kannst Du vergessen. Dafür musst Du Dich bzw. Deine Geräte bei der
Eiba in Brüssel zertifizieren lassen. Sonst darfst Du da gar nicht
ran.

Wenn ich dass richtig verstanden habe, willst Du aber nur was ähnliches
entwickeln und nicht das EIB-Protokoll nachbilden.
Aber warum was neues erfinden, was andere schon gemacht haben.
Ich meine, einer der Links war von einer Hochschule komplett mit
C-Source-Code

von Bernhard Koopmeiners (Gast)


Lesenswert?

Hallo Benn,

wie schon oben gesagt, geht mit dem I2C über echte Entfernungen
nichts.
Die Störungen, die du dir einfängst, machen alles kaputt.
Eine preiswerte Lösung geht in Richtung RS485- und CAN-Treiber. Wenn du
dir die Spezifikationen anschaust, wird es klar, dass nur
Gegentakt-Betrieb ein Lösungsansatz ist. Ich nutze für meinen KHBus (
Koopis Haus Bus oder Kommunikations Haus Bus ) einen Maga8 und den
PCA82C251. Noch ein wenig "Hühnerfutter" und das Grundmodul steht.
Beim Protokoll kann man sich an CAN und EIB anlehnen. Preiswert,
multimasterfähig und vor allem nicht überladen. Getestete Reichweite (
mit eingespeisten Störungen ) min. 800m. Wobei Fehler auch durch die SW
abgefangen werden müssen.

Bernhard

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.