Moin aus Bremen, ich arbeite gerade an einem Bastelprojekt, bei dem ich aktuell nicht wirklich weiterkomme. Ich komme aus der IT-Branche und habe grundlegende Kenntnisse zum Thema Arduino und Programmieren desselben, dann hört es jedoch schon auf. Ich habe mal einen mit meinem Oszilloskop erfassten "Datenaustausch" zwischen zwei Komponenten angehängt. Es geht in diesem Fall um einen an den Slave versendeten Befehl. Statt des original-Slaves möchte ich in meinem Fall einen Arduino anschließen, welcher dem Master das erforderliche "ack" sendet und dann die gesendeten Datenbytes auswertet (um sie dann über eine SPI-Schnittstelle weiterzusenden - aber das soll hier nicht das Thema sein). Ich habe mich nun schon viele Stunden mit dem Fall und dem Arduino mit der wire-library beschäftigt (sniffer ausprobiert, arduino als slave mit der Adresse 40/80,...) bekomme jedoch keine Reaktion vom Arduino. Habt ihr vielleicht irgendeinen Rat für mich? Ist der Bustakt von nur ca 866Hz evtl das Problem? Vielen Dank schonmal...
Also du möchtest, dass deinen Arduino als I2C-Slave einsetzen? Das beste wäre, wenn du den zugehörigen Code den du geschrieben hast postest. Das Oszillogramm ist schön, da kann man erstmal nichts falsches entdecken, ohne den zugehörigen Code allerdings auch nichts aussagen. Außerdem wäre es wichtig zu wissen welche Hardware (welche Teilnehmer, welche Arduino usw.) im Einsatz ist. I2C Takt wird vom Master vorgegeben, also nicht von deinem Slave ...
Hi, Wie es beim Arduino ist weiß ich zwar nicht, aber prinzipiell sollte ein I2C-Slave mit beliebig langsamem Takt zurechtkommen. Ich denke daher dass es sehr wahrscheinlich nicht am Takt liegt, sondern irgendwo anders... Hast Du die Signale auch mal mit dem Oszi aufgenommen, und ist da das erste Byte genauso wie oben, nur dass das ACK fehlt? Ansonsten wäre noch ein Versuch, den Arduino-Slave mal mit einem anderen I2C-Master anzusprechen, um zu sehen ob der ein prinzipielles Problem hat oder es nur mit diesem Master nicht funktioniert.
Hallo, Arduino als I2C Slave: IDE Bsp. > Wire > slave receiver und/oder http://www.gammon.com.au/i2c lesen / anschauen
Ist es jetz I2C oder nicht? Weil du in der Überschrift von I2C-ähnlichem Signal schreibst... Falls es echtes I2C ist: Hast du ein Datenblatt zu dem "originalen" Slave? Dort könnte eine mögliche "Mindesttaktrate" stehn, genauso die korrekte Adresse.
So, habe mich nun auch mal angemeldet hier. Danke schonmal für die Antworten! Markus S. schrieb: > Ist es jetz I2C oder nicht? Weil du in der Überschrift von I2C-ähnlichem > Signal schreibst... > > Falls es echtes I2C ist: Hast du ein Datenblatt zu dem "originalen" > Slave? > Dort könnte eine mögliche "Mindesttaktrate" stehn, genauso die korrekte > Adresse. Ich bin mir nicht sicher ob das wirklich i2c ist, lt meinem Oszi sieht der Start ja etwas anders aus (data und clock gehen gleichzeitig auf 0, nicht data zuerst wie in den i2c spezifikationen beschrieben) - aber ansonsten sieht es schon sehr danach aus. Der originale Slave ist ein D78P014-Microcontroller von NEC. Ich habe mir das Datenblatt zwar angeschaut, aber bin ehrlich gesagt mit den ganzen Informationen absolut überfordert... mrdelphi: Genau, ich habe den Arduino als Slave programmiert und da sieht alles so aus wie in meinem Foto, nur dass halt kein Ack kommt - und daher der Master dann abbricht und das ganze mehrfach wiederholt. Wenn ich einen i2c-Sniffer baue (diverse Versionen aus dem Netz ausprobiert) kommt ebenfalls keine Reaktion - als wäre der Bus tot, aber im Oszi sieht man, dass dies nicht so ist. Test: Der Oszi-Mitschnitt ist nicht mit Arduino aufgenommen, sondern mit original Master und Slave. Mit dem Arduino habe ich einen Beispielsketch der Wire-library (slave_receiver) genommen und lediglich die Adresse geändert, in der Annahme, dass dann zumindest automatisch die Ack-bits gesetzt werden. Leider ohne Erfolg...
Dennis M. schrieb: > Ich bin mir nicht sicher ob das wirklich i2c ist, lt meinem Oszi sieht > der Start ja etwas anders aus (data und clock gehen gleichzeitig auf 0, > nicht data zuerst wie in den i2c spezifikationen beschrieben) - aber > ansonsten sieht es schon sehr danach aus. Hmm, da könnte in der Tat der Hund begraben liegen... bei I2C gibt es ja die Start Condition (und Stop Condition, aber die ist hier erstmal nicht relevant), weiß jetzt nicht auswendig wie die aussieht, aber evtl ist die nicht erfüllt durch dieses leicht andere Verhalten? In dem Fall reagieren normale I2C-Slaves dann nicht, auch wenn die Adresse passen würde. Die Start Condition gibt sozusagen den Startschuss dass der Slave überhaupt weiter "zuhört"...
Evtl. kann man den Start nochmal mit höherer zeitlicher Auflösung aufnehmen... Die zeitliche Verzögerung muss nicht um eine halbe Taktrate verschoben sein, da reichen auch 10us... Gruss Chregu
Dennis M. schrieb: > data und clock gehen gleichzeitig auf 0 Ob das wirklich gleichzeitig ist, kann man bei der horizontalen Auflösung nicht erkennen. Wenn alle Stricke reißen magst du es vielleicht ohne Arduino Framework umsetzen. Hier sind zwei umfangreich kommentierte Varianten mit der USI Schnittstelle vom ATtiny: http://stefanfrings.de/servocontroller/index.html Da hast du selber die Kontrolle darüber, wie du die Start Condition erkennst.
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.
