TWI_SR_DATA ist die SRAM Adresse, wo ein anderer (sende)Master seine Daten hinschreiben kann. Da man ja (oft) nicht weiss, WAS da dann kommt, ist das eben in meinem Anwendungsbeispiel nur irgend ein Byte-Array.
Ebenso ist TWI_MT_DATA die adresse des ersten (oder einzigen Bytes), das gesendet werden soll.
Bei dir ist das ja nicht so allgemein,
Denn dein Master sendet immer nur EIN Kommando Byte
und empfängt 8 temperatur-Bytes
Dein slave sendet immer 8 temperatur-Bytes
und empfängt immer das eine Kommando-Byte
Du könntest das auch für deine Zwecke spezialisieren.
Master Senden
Code:
DIM Kommando as Byte
Jede_sekunde_mal:
Kommando = 25
twi_mt_data = VARPTR(Kommando) ' daten adresse
Twi_mst_addr = Mn2_adr 'twi-slave adresse
Twi_mt_cntr = 1 '1 Byte
Twi_mr_cntr = 0 ' nix holen, nur senden
Gosub Run_wait_master ' auf gehts
---etc-etc----
Slave-Empfang
Code:
DIM Kommando as Byte
twi_sr_data = VARPTR(Kommando)
---etc-etc----
If Twi_slv_flag = &H60 Then
if Kommando = 25 then
---- komando ausführen
---etc-etc----
beim Rücksenden der Temperaturen:
SLave Temperaturen senden
Code:
DIM Temp1 as Byte
DIM Temp2 as Byte
......
DIM Temp8 as Byte
twi_mt_data = VARPTR(Temp1) ' daten adresse
Twi_mst_addr = Mn1_adr 'twi-master adresse
Twi_mt_cntr = 8 '8 Byte
Twi_mr_cntr = 0 ' nix holen, nur senden
Gosub Run_wait_master ' auf gehts
---etc-etc----
Der Master hat nun ein Gegenstück
Code:
DIM Temp1 as Byte
DIM Temp2 as Byte
......
DIM Temp8 as Byte
twi_sr_data = VARPTR(Temp1)
---etc-etc----
If Twi_slv_flag = &H60 Then
Temp1 --> bis Temp8 auswerten
---etc-etc----
Zur Verwirrung: Natürlich könnte der Master sich die 8 Temperaturen auch selber holen, dann wäre der Slave nur passiv, er müßte nur bei Empfang eine Messung auslösen. Auf diese Art geht es ja meistens bei den fertigen I2C-Sensoren. Man schickt ein Kommando und liest die Daten dann aus.
Das wäre dann aber eben nicht Multimaster, sondern der übliche Master-Slave Betrieb
DIe Parameter etc. wären dann auch anders, natürlich
Lesezeichen