mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frage zu AVR / I2C


Autor: Ferdinand S. (derwilly)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen,
ich habe eine Frage zum Thema AVR - I2C.

Das angehängte Bild zeigt einen Ausschnitt meiner Schaltung auf dem ein 
Display, Temperatursensor usw. an einen ATMEGA8 - Controller 
angeschlossen sind.

Für das Display benötige ich 6 Pins am AVR. Diese sollten wegen des 
späteren Layouts der Platine nebeneinaderliegen. Derzeit ist das Display 
unteranderem an den Pins SDA u. SCL angeschlossen, diese brauche ich 
doch aber eigentlich für meinen I2C-Temperatursensor

Nun meine Frage:
Kann ich den I2C-Bus auch über "normale" I/O-Pins betreiben oder müssen 
SDA u. SCL verwendet werden?

PS: ich setze Bascom ein.

Gruss
Willy

Autor: Ein Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du dir I²C-Routinen in Software schreibst ist es sehr wohl 
machbar...
Du kannst dann natürlich nicht die eingebaute TWI-Hardware nutzen.

Autor: Merino (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du Hardware I2C benutzen musst, dann bist du auf diese Pins 
angewiesen.
Man kann aber auch via Software eine I2C Funktion realisieren - da 
kannst du die Pins frei wählen.

Autor: Ferdinand S. (derwilly)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für eure schnellen Antworten, das hört sich sehr aufwendig an. Ich 
glaube ich werde SDA und SCL vom Display lösen und schauen ob ich noch 2 
andere Pins in der Nähe freimachen kann.

Autor: Merino (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
am mega8:
Config Scl = Portb.4
Config Sda = Portb.5
Das ist nicht aufwendig - lies dir erst mal im PDF-Handbuch von BASCOM 
alles relevante über I2C durch!

Autor: Axel R. (axelr) Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist I2C nicht ein Bus? Kann man nicht zwei Geräte an jenem betreiben?
Ich denke, das sollte nur in Ausnahmefällen Probleme bereiten.

Autor: Christian H. (netzwanze) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, I2C ist ein Bus. Es gibt einen Master und bis zu 127 Clients.
Probleme gibt es nur, wenn mehrere Clients die selbe ID haben.
Nur wenn dies nicht ausgeschlossen werden kann, müssen mehrere I2C-Busse 
verwendet werden. Zum Beispiel, wenn 20 Sensoren dranhängen, die es nur 
mit maximal 6 IDs gibt.

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Ferdinand,

ich denke, der Aufwand für eine I²C-Implementierung per Software hängt 
sehr vom Problem ab: Ich habe gerade etwas geschrieben, um einen 
einzelnen Sensor per I²C auszulesen. Das Wort Aufwand passt da nicht 
wirklich, jedenfalls nicht mehr, als sich in die Hardware-Ressource 
einzuarbeiten.

Wenn Du aber viele Teilnehmer, Multimaster und andere Scherze brauchst, 
dann kippt das Verhältnis vermutlich in die andere Richtung.

Gruß
Jens

Autor: Merino (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier sind zwei Beispiele für BASCOM:
1x Soft -I²C und
1x Hardware- I²C (TWI) und
1x Harware USI

http://www.rn-wissen.de/index.php/Bascom_I2C_Master

Autor: Ferdinand S. (derwilly)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Danke für das Beispiel, das ist ja echt nicht wirklich viel "Aufwand" da 
ich ja nur einen Temperatursensor (LM75 SMD) über I2C ansteuern will.

Ich habe meinen Schaltplan nun so abgeändert das ich die Pins SDA und 
SCL am AVR verwenden kann, aber es ist nicht schlecht für zukünftige 
Schaltungen zu wissen das es die Möglichkeit einer 
Software-Implementation gibt und man andere Pins verwenden kann um das 
Layout zu optimieren oder für den Fall das es nicht anders geht.

Ich habe noch eine Frage zur Hardware-Adresse des LM75.
In anderen Foren habe ich herausgefunden das der LM75 seine Adresse wie 
folgt definiert: Die drei Pins A0-A2 stellen die Adresse ein.

Daraus folgt:
0b1001xxx

Ich habe A0-A2 auf GND gelegt was 3 logischen Nullen entspricht.

=> 0b1001000

Nun meine Fragen:
1. Der Block "1001" woher kommt der, ich finde dazu nichts im 
Datenblatt?
2. 0b1001000 müste doch dann Hex &H48 entsprechen oder?
3. Warum werden bei der initialisierung 2 Adressen angegeben wie in 
folgender Zeile:

Const Pcf_write = &H40                            ' Slaveadresse
Const Pcf_read = &H41

Gruss

Autor: Christian H. (netzwanze) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Datenblöcke im I2C sind immer 8Bit breit.
Die Adresse jedoch nur 7-bit. Das achte bit wird als R/W-Kennung 
verwendet.
Ist dieses 0, erwartet das Gerät im nächten Byte Daten, die geschrieben 
werden. Ist das Bit 1, so hat der Master nach der Übermittlung der 
Adresse ein (oder mehrere?) Bytes abzuholen.

Es sollte also meiner Meinung nach
Const Pcf_write = &H90                            ' Slaveadresse
Const Pcf_read = &H91

heissen.

Wenn Du ein Byte schreiben willst, verwendest Du also Pcf_write; zum 
Lesen Pcf_read.

Autor: Ferdinand S. (derwilly)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah Ok, jetzt bin ich durchgestiegen:

10010000 => &H90 => Senden
10010001 => &H91 => Empfangen

Danke für deine Antwort netzwanze.

Nun verbleibt aber noch die Frage woher die ersten 4 Bits (1001) 
herkommen?

Autor: Christian H. (netzwanze) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ferdinand Saufler schrieb:
> Nun verbleibt aber noch die Frage woher die ersten 4 Bits (1001)
> herkommen?

Na vom Hersteller, aus dem Datenblatt (Seite 9 => LM75).

Autor: Ferdinand S. (derwilly)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ah, da geht die Leuchte an :)
Danke Dir.

Autor: Detlev T. (detlevt)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Ferdinand,

soweit ich weiß, kann man bei BASCOM zwei beliebige Pins verwenden. Dann 
werden die Signale halt von BASCOM per Software und nicht per Hardware 
erzeugt. Es ist aber sicher nicht falsch, gleich die Pins zu nehmen, die 
man dann auch per Hardware ansteuern könnte. Damit hält man sich 
Optionen offen.

Gruß, DetlevT

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.