Forum: Mikrocontroller und Digitale Elektronik Arduino I2C Hardware Register Adressen im MR-ST


von Julius G. (julius_g139)


Angehängte Dateien:

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.

von Wastl (hartundweichware)


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:
> 2. 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.

von Wastl (hartundweichware)


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.

von Julius G. (julius_g139)


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.

von Julius G. (julius_g139)


Lesenswert?

Vielen Dank der Thread sollte mir bei meinem Problem helfen!
Guten Rutsch ins neue Jahr !

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.