Zitat Zitat von mat-sche
Komando1 = Temperaturbyte(1)
Call Master_transmit(slave_adress , Komando1)

Sub Master_transmit(byval Slave_adress As Word , Komando1 As Byte )
Twi_mst_buff(1) = Komando1
Twi_mst_addr = Slave_adress
Twi_mt_cntr = 4
Twi_mt_data = Varptr(twi_mst_buff(1))
Twi_mr_cntr = 0
Hallo, wenn ich deine Sub richtig lese, sollen hier die 4 byte übertragen werden, auch wenn du nur das erste Byte angibst. Das funktioniert aber nur, wenn eine Referenz auf das erste Element des Arrays angegeben wird. Also Rage_empire hat schon recht, dass du das mit byref übergeben musst.
Nur bringt das nichts, wenn du vor dem Call erst noch die Variable umsetzt. Da Komando1 nur eine Byte Variable ist, wird mit
Komando1 = Temperaturbyte(1) nur das erste Byte genommen und dessen Wert - nicht die Speicherstelle - in Komando1 gesetzt.
Was du machen musst, ist den Call ändern auf
Call Master_transmit(slave_adress , Temperaturbyte(1))
Mit byref übergibst du dann die Speicherstelle, an der das erste Byte der Overlay variable liegt.
In der Sub musst du dann genauso vorgehen, denn mit
Twi_mst_buff(1) = Komando1
verlierst du wieder die Speicherposition und übergibst nur den Wert. Damit setzt du dann eine ganz andere Adresse im Befehl
Twi_mt_data = Varptr(twi_mst_buff(1)).
Twi_mt_data soll ja tatsächlich auf das erste Byte der Single Variable zeigen.

Gruß

Rolf