Arduino I2C Hardware Register Adressen im MR-ST

OP #7570552
Lesenswert?
• ▲
▼

Hi, ich habe folgendes Problem. Ich möchte einen Wert via I2C von einem Arduino zu einem zweiten Arduino senden. Dies soll alles mit den Hardware Registern TWXXX, also die Twin Wire Interface Register, geschehen. Dabei soll der Master Arduino als Reciever dienen und der Slave Arduino als Transmitter. Ich habe ebenfalls eine Funktion eingebaut die mich überprüfen lässt, ob ich im richtigen Stadium der Übertragung bin. Das Problem an der Sache ist die Adresse, welche ja aus 7 Bit Adresse + Read/Write Bit besteht. Beispielsweise würde ich eine Übertragung so erwarten:

  1. Master sendet Start
  2. Master sendet Adresse + Write Bit also 0b00000011 (Adresse ist Dezimal 1)
  3. Slave sendet ACK zurück wenn Adresse die gesendet wurde identisch mit Festgelegter Adresse ist also 0b00000010 (im Slave) 4.Master Empfängt ACK ... and so on ...

Jedoch bleibt meine Kommunikation still außer ich setzte in der Slave Adresse das LSB, also den General Call, auf 1. Deshalb landet der MR immer wieder im repeated Start und der ST startet nicht.

Hat jemand eine "einfache" Erklärung für die Adressierung?

Zu den Codes, die inkludierte Bibliothek dient der Überprüfung und spuckt die Hex-Zahlen des Übertragungszustands aus. Beispielsweise 0x8 für Start oder 0x18 für ACK ist zurück etc.

Angehängte Dateien:
#7570573
Lesenswert?
• ▲
▼

Hier geht's a bisserl wild durcheinander.

Ein Slave in der Welt von I2C ist ein inaktiver Teilnehmer der nur auf Anforderung etwas sendet. Es darf mehrere Slaves geben. Ein Master sendet Daten und liest angeforderte Daten von Slaves zurück. Niemals kann ein Slave unaufgefordert senden. Deine Begriffs-Festlegung ist irreführend und damit deine Erklärungen teilweise unverständlich.

Julius G. schrieb:

  1. Master sendet Adresse + Write Bit also 0b00000011

Nein. Das R/W Bit ist 1 beim Lesen und 0 beim Schreiben.

Julius G. schrieb:

die inkludierte Bibliothek dient .......

Welche Bibliothek? Ich sehe keine.

Wenn du dein Chaos bereinigt hast sehen wir uns vielleicht wieder.

#7570578
Lesenswert?
• ▲
▼

Julius G. schrieb:

Hi, ich habe folgendes Problem.

Vielleicht solltest du auch mal hier reinschauen:

https://www.mikrocontroller.net/articles/AVR_TWI

Das Festlegen eine Baudrate für den I2C Bus würde sicherlich aucn nicht schaden .... (wobei ich gerade sehe dass du deinen Code nicht vollständig gepostet hast. Mindestens init() fehlt).

void ERROR()

Funktionen tut man nicht grossschreiben, nein das tutet man nicht, auch wenn kein Compiler meckert. Grossbuchstaben sind für Konstanten (Defines) reserviert.

OP #7570582
Lesenswert?
• ▲
▼

Ok, verstehe. Die Frage ist wohl auch nicht ganz klar formuliert.

Wie muss ich die Adresse die der Master sendet aufgebaut sein damit ich vom Slave ein Datenpaket empfangen kann? Wie muss die Adresse Folgerichtig im Slave eingestellt sein ?

PS: Die Bibliothek ist in den Code Dateien zu finden.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren