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
Slave-EmpfangCode: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----
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
Der Master hat nun ein GegenstückCode: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----
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







Zitieren

Lesezeichen