Hi,
nicht sehr viele Infos.
-Wie sieht die HW aus?
-Funktioniert beim Master das Empfangen eines Bytes?
-Wiki gelesen?
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???
Hi,
nicht sehr viele Infos.
-Wie sieht die HW aus?
-Funktioniert beim Master das Empfangen eines Bytes?
-Wiki gelesen?
MfG
Tido
---------------------------------------------------
Have you tried turning it off and on again???
---------------------------------------------------
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
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
Hast du dort auch geschaut ?
https://www.roboternetz.de/wissen/in...is_Multimaster
Zum Verständnis:
mit "M8Slave an Master" meinst du "master holt sich die Bytes" ?
Also M8 = Slavetransmitter, M32 = masterreceiver ?
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
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
Wie muss man den code von TWI-Praxis (Transmitter) verändern, das 2 bytes übertragen werden können??
MfG Wolfgang
Hi,
ich habe das folgendermaßen gelöst (Slave):
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.Code: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
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.
MfG
Tido
---------------------------------------------------
Have you tried turning it off and on again???
---------------------------------------------------
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
Lesezeichen