Forum: Mikrocontroller und Digitale Elektronik i2c-ähnliches Signal für Wechsleransteuerung nachbilden mit Arduino?


von RivaDynamite (Gast)


Angehängte Dateien:

Lesenswert?

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

von Test (Gast)


Lesenswert?

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

von Mathias A. (mrdelphi)


Lesenswert?

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.

von Veit D. (devil-elec)


Lesenswert?

Hallo,

Arduino als I2C Slave:

IDE Bsp. > Wire > slave receiver

und/oder

http://www.gammon.com.au/i2c

lesen / anschauen

von Markus S. (1fc_schinkenwurst)


Lesenswert?

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.

von Dennis M. (rivadynamite)


Lesenswert?

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

von Mathias A. (mrdelphi)


Lesenswert?

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"...

von Christian M. (Gast)


Lesenswert?

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

von Stefan F. (Gast)


Lesenswert?

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