www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 2 Mikrocontroller Kommunikation über I2C


Autor: Embed (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich will Daten zwischen 2 Mikrocontroller über I²C-Schnittstelle 
austauschen aber habe kein Plan wo ich anfangen kann.

Wie kann ich I²C-Schnittstelle realisieren?

Ich weiß nicht wie und wo ich anfangen soll. Wäre für jede Hilfe sehr 
dankbar.

Autor: Galle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nimm µCs mit integriertem I2C, gucke im Datenblatt, benutze die 
Programmschnipsel, fertig.

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Embed,

wenn beide Controller eine HW-TWI haben, ist es schnell realisiert - der 
Code für AVR-Master und Slave sind in der Codesammlung.....

Gruss Otto

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
einfach scl mit scl und sda mit sda verbinden, dann noch pull-ups auf 
beide leitungen (weil iic open drain ist), den einen controller als 
master und den anderen als slave konfigurieren und fertig.
geht aber nicht mit einigen atmels, weil die keinen slave-modus haben.

Autor: Embed (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke für die Antworten ;-)..

I²C ist intergriert.

1. Was ist mit "Programmschnipsel" gemeint?
2. Wofür steht "HW-TWI"?

Wie sende ich die Daten und wo werden die Daten beim Empfänger 
gespeichert?
Kann ich einfach einen Puffer erzeugen und die Daten beim Empfang dort 
ablegen?

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1. Application nots vom Chip Hersteller, Codesammlungen im Internet
2. Hardware TWI (TWI ist im Prinzip I²C)
3. Do wo du sie hin speicherst
4. Ja wenn du programmieren kannst.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 1. Was ist mit "Programmschnipsel" gemeint?
beispielcodes zum ansprechen des iic-interfaces

> 2. Wofür steht "HW-TWI"?
hw für hardware, d.h. dass der controller ein eingebautes iic-peripheral 
hat. twi heisst 'two wire interface'. manche hersteller nennen iic so, 
wohl weil die bezeichnungen iic oder i2c phillips 'gehören'

> Wie sende ich die Daten und wo werden die Daten beim Empfänger gespeichert?
das ist bei jedem controller unterschiedlich, musst du ins unser manual 
schauen.

> Kann ich einfach einen Puffer erzeugen und die Daten beim Empfang dort ablegen?
klar, warum sollte das nicht gehen?

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Embed,

Du kannst die Hardware-TWI des Controllers nutzen (wenn er denn eine 
hat) oder diese in Software nachbilden.

Gruss Otto

Autor: Embed (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ihr seid alle Spitze, DANKE !

Autor: Embed (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

wo lege ich die Adressen von Master und Slave fest oder werden die 
Adressen es automatisch vergeben? Wo finde ich die 7-Bit Adresse?

Wenn ich nur einen Master und einen Slave habe,erkennt das I²C-Protokoll 
selber dass es nur einen Master und einen Slave gibt?

Autor: Ulrich P. (uprinz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Warum, warum nur, werden Hilfegesucher hier immer so geheimnisvoll 
formuliert? Nicht einmal die verwendeten Prozessoren werden genannt. Wie 
soll man da denn helfen?

Das Protokoll beinhaltet grundsätzlich nur die Slave-Adresse, allerdings 
ist I2C Multimaster fähig, d.h. ein Master kann auch zum Slave werden.

Wenn Dein Prozessor ein Addressregister hat, dann wird er 
sinnvollerweise auch einen Interrupt generieren, wenn er seine Adresse 
empfängt. Ein Master hat erst einmal keine eigene Adresse, da er von 
Slaves nicht addressiert werden kann. Ein Slave kann normalerweise nur 
über eine zusätzliche Leitung auf sich aufmerksam machen. ( CRQ oder IRQ 
Leitung).

Daraus ergeben sich bei manchen Prozessoren aber auch 
Kombimöglichkeiten. D.h. Jeder Prozessor am Bus ist erst einmal Slave 
und hat eine eindeutige Slave-Adresse. Will einer eine Kommunikation 
starten, so schaltet er in dem Master-Modus um und addressiert einen 
Slave.
Das Protokoll ist, wenn korrekt implementiert, gegen Buskollisionen 
geschützt. D.h. es gibt im Prozessor eine Statusantwort, die den Erfolg 
oder den Grund des Misserfolges signalisiert, mind. als ein paar 
Register-Bits.

Wenn es erforderlich ist, den Master zu identifizieren, von dem ein 
Slave eine Information bekommen hat, so steht es dem geneigten 
Entwickler frei, die Daten nach seinem belieben zu gestalten.
Also z.B. [ST][ADR/W][MADR][LEN[CMD][...DATA...][SP]
ST/SP sind Start/Stop Kondition, ADR/W sind die I2C Adresse des Slave 
und das Write-Bit, MADR ist die Adresse des Masters, wenn er als Slave 
am Bus lauscht, der Rest sind dann die Daten.
Es gibt, wenn ich mich recht erinnere sogar eine Broadcast-Adresse, auf 
die alle Slaves hören sollten. Ich weiß aber nicht, ob alle Prozessoren 
diese Funktion können.

Eigentlich ist I2C super simpel aber auch super flexibel. Leider habe 
ich bei noch keinem Bus so viel Mist in Sachen Software- oder 
Hardware-Implementierung gesehen. Aber die Codeschnipsel hier sehen gut 
aus.

Gruß, Ulrich

Autor: Embed (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

zu Pull-Up:

im Datenblatt steht, dass die Pins intern einen Pull-Up Widerstand 
besitzen. Würde es Sinn machen noch extern Pull-Ups zu verwenden?

Wieviel Ohm wären extern bei 3,3 V Versorgungsspannung passend? Kann man 
es irgendwie berechen?

Autor: Embed (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmmm... zu viele Fragen gestellt?? :-$


eine wichtige Frage:

- wie kann ich über JTAG den empfangenen Wert abfragen?

Autor: Embed (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hat jemand ein Beispiel-Code für die I²C-Kommunikation?

ich wäre sehr dankbar...

-> Nicht jeder wird als Genie geboren :'(

Autor: Embed (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Niemand ein Beispiel für mich?

Autor: AVR-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Prozessor? Programmiersprache?
Du erwartest Beispiele ohne genaue Informationen... Witzbold...

Autor: Embed (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK Programmiersprache sollte man doch angeben, aber Prozessor ist doch 
unwichtig. Man kann es dann an an den Prozessor anpassen.

Programmiersprahce ist C

Ich will nur sehen wie so was abläuft.

Autor: Ulrich P. (uprinz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beispiele:
Warum schaust Du nicht mal bei den verschiedenen, oder Deinem speziellen 
CPU-Hersteller auf die Homepage? Da sollten I2C COdes in den 
ApplicationNotes herum liegen. Gerade bei Hardware-I2C Interfaces 
unterscheiden sich die Chips doch sehr. Der eine Hersteller unterstützt 
nur simple Register für Data, Address und Error-Flags, der andere 
Hersteller hat eine komplette State-Machine implementiert. Zilog und 
ATMEL haben z.B. komplette State-Machines, die bei Status-Änderung einen 
Interrupt generieren. So kann man seine Software schick in einen völlig 
passiven Treiber implementieren, der nur auf Interrupt und aktuellen 
State reagiert. Leider unterscheiden sich die einzelnen States recht 
stark voneinander. Ist also essig mit einem universellen Treiber.
Trotzdem, da Du von TWI und nicht von I2C gesprochen hast, vermute ich 
mal eine ATMEL-Lastigkeit:
http://www.atmel.com/dyn/resources/prod_documents/...
http://www.atmel.com/dyn/resources/prod_documents/...
http://www.atmel.com/dyn/resources/prod_documents/...
http://www.atmel.com/dyn/resources/prod_documents/...
http://www.atmel.com/dyn/resources/prod_documents/...
http://www.atmel.com/dyn/resources/prod_documents/...
http://www.atmel.com/dyn/resources/prod_documents/...

Pull-Ups:
Die Pullups eines AVR haben irgendwas um die 20k. I2C sollte aber 
zwischen 2k2 und 4k7 haben. Kommt auf die Anzahl der Devices und die 
Länge des Busses an. Nachzulesen in der I2C Specification bei NXP 
(ehemals Philips).
Warum Du das nicht selber findest weiß ich nicht, aber bitte schön:
Im Gegensatz zu Philips, hat NXP den I2C Bus sehr schön auf einer Seite 
zusammen gefasst. hier findest Du alles, was Du zum aufbau eines 
funktionierenden I2C Bus brauchst:
http://www.standardics.nxp.com/support/i2c/

Es ist wirklich schwer Dir zu helfen, wenn Du aus dem zu verwendeten 
Prozessor und dem Ziel Deiner Entwicklung solch ein Geheimnis machst. 
Daher darfst Du Dich nicht wundern, wenn hier alle mit RTFM antworten, 
oder garnicht antworten. Du beschreibst den Weg, aber weder Start noch 
Ziel.

Gruß, Ulrich

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.