PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : I2C Spezialisten gesucht



wobachm
23.03.2009, 20:46
Hallo,

bin seit 2 Tagen am versuchen, meinem M8 Slave das senden von 2 bytes an den Master beizubringen, bisher ohne erfolg. Kann mir jemand mal erklären wie so etwas geht??? :-s :cry:

Tido
23.03.2009, 21:28
Hi,

nicht sehr viele Infos.

-Wie sieht die HW aus?
-Funktioniert beim Master das Empfangen eines Bytes?
-Wiki gelesen?

pacer_one
23.03.2009, 22:43
Um die Funktionsweise des I2C zu verstehen würde ich dir raten erst mal einen einfachen I2C Baustein anzusteuern, damit musst du dich nur um den Master kümmern. Empfehlen würde ich dem LM75, den kann man dann sicher auch für die eine oder andere Bastelei nutzen.

PicNick
24.03.2009, 06:48
Guckst du

https://www.roboternetz.de/wissen/index.php/TWI_Praxis

wobachm
24.03.2009, 14:53
Dank erstmal an alle.

zu der HW:
master M32, slave M8. Weiter noch am Bus eingebunden DS1621 und DS 1307, diese funkionieren ohne Probleme. In TWI-Praxis vorhandenes Beispiel funktioniert auch ohne Probleme, leider wird da nur ein byte vom M8Slave an den Master gesendet, bei zwei byte wird nur das erste übertragen. Und da fangen meine Probleme an.........!!

MfG Wolfgang

PicNick
24.03.2009, 14:58
Hast du dort auch geschaut ?
https://www.roboternetz.de/wissen/index.php/TWI_Praxis_Multimaster

Zum Verständnis:
mit "M8Slave an Master" meinst du "master holt sich die Bytes" ?
Also M8 = Slavetransmitter, M32 = masterreceiver ?

wobachm
24.03.2009, 15:17
Hallole Picnick

Ja, auch da geschaut (TWI_Praxis_Multimaster ), Forum durchsucht.......
zu 2. Ja richtig master holt sich 2 bytes vom slave.
M8 = Slavetransmitter, M32 = masterreceiver

wobachm
24.03.2009, 15:19
Wie muss man den code von TWI-Praxis (Transmitter) verändern, das 2 bytes übertragen werden können??
MfG Wolfgang

Tido
24.03.2009, 18:31
Hi,

ich habe das folgendermaßen gelöst (Slave):



Do
If Register = 0 Then Gosub Sensoren 'Sensoren auswerten

Twi_control = Twcr And &H80 'prüfen, ob TWINT gesetzt ist; Bit7 von Controlregister
If Twi_control = &H80 Then
Twi_status = Twsr And &HF8 ' Status

If Twi_status = &H80 Or Twi_status = &H88 Then 'Wert, der gelesen werden soll
Register = Twdr 'in Register speichern
End If
If Twi_status = &HA8 Or Twi_status = &HB8 Then 'Master will ein Byte haben
If Register = 1 Then Twdr = High(druck) 'Druck MSB
If Register = 2 Then Twdr = Low(druck) 'Druck LSB
If Register = 3 Then Twdr = Wasser 'Wasser (Byte)
If Register = 4 Then Twdr = High(tiefe) 'Echo MSB
If Register = 5 Then Twdr = Low(tiefe) 'Echo LSB
End If

Twcr = &B11000100 ' TWINT löschen, mit ACK
End If

Loop


Der Master sendet einen Wert von 0-5 an den Slave. Der Slave antwortet je nach gesendetem Wert (wird in "Register" abgelegt) mit dem entsprechendem Byte.
Alternativ kann der Slave nach jedem gesendetetem Byte einen Zähler erhöhen und antwortet bei der nächsten Anfrage mit dem nächsten Byte.
Mit meiner Lösung muss ich aber nicht alle Byte auslesen, wenn ich nur eins haben will. Will ich z.B. nur das "Wasser"-Byte haben, sendet der Master eine 3 an den Slave.

wobachm
25.03.2009, 15:26
Hy Tido,

danke für deine Idee, dies so umzusetzen. Werd das mal ausprobieren.

Was mich wundert ist, das niemand dies mit einem "I2C-protokoll" macht. Dabei müsste es doch machbar sein, da viele "I2C-Geräte" die bytes nacheinander auslesen können, ohne irgendwelche kunstgriffe machen zu müssen. Werd mal an dem Thema dranbleiben.

MfG Wolfgang

Netzman
25.03.2009, 15:47
bin an dieser Thematik dran, das Projekt ist momentan aber pausiert wegen Renovierung des Zimmers :)
Mein I²C Transport Layer hat eine CRC8-Übertragungssicherung, beliebig viele Transmit/Receive Bytes, Timeout, Raw-Data-Mode und ein schlankes übersichtliches Interface.
Daneben gibts momentan noch einen (ähnlichen) RS232-Layer (µC und PC), geplant ist noch ein TCP/IP Layer.
Auf diesen baut ein Network-Layer auf, der die Protokolle vereinheitlicht, jedem Gerät eine Nummer gibt, dynamisch die Routing-Strecken ermittelt, Hot-Plug'n'Pray unterstützt, ... DHCP kanns noch nicht :P
Transport-Layer sind schon implementiert und getestet, die Spezifikationen für den Network-Layer sind auch komplett, muss diesen noch implementieren.
Wenn das Werkl läuft werd ichs veröffentlichen.

mfg