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
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.
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.
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.
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!
Ist I2C nicht ein Bus? Kann man nicht zwei Geräte an jenem betreiben? Ich denke, das sollte nur in Ausnahmefällen Probleme bereiten.
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.
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
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
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
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
1 | Const Pcf_write = &H90 ' Slaveadresse |
2 | Const Pcf_read = &H91 |
heissen. Wenn Du ein Byte schreiben willst, verwendest Du also Pcf_write; zum Lesen Pcf_read.
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?
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).
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.