Hallo,

die Adresse wird so nicht korrekt berechnet:
TWDR = adresse & (0x40);
da sollte ein ODER dazwischen.

Dann würde ich TWI erst initialisieren, damit die Slaves Zeit haben eine Startsequenz als solche zu erkennen. Denn wenn man beim aktivieren gleich ein Start sendet, könnte es sein das es kein Slave mitbekommt.

Nach dem warten bis TWINT wieder gesetzt ist, könnte man das Statusregister TWSR auslesen, um zu sehen was überhaupt passiert ist, ob der Slave sich gemeldet hat usw.