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.
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.