Hi

Dummerweise sind alle Codes, die ich im Netz gefunden habe nicht interrupt basiert.
Ich brauch auch eigentlich keine Interruptsteuerung, hauptsache mein pcf8574 reagiert.

In den Datenblätter der Conroller mit TWI interface (zb Mega32) findest DU C und Assembler Code für die Implementierung.
Stimmt, und da hab ich mich auch durchgequählt.

Code:
.include "m8def.inc"

.def temp1 = r16
.def temp2 = r17
.def temp3 = r18
 
	ldi temp1, LOW(RAMEND)		; LOW-Byte der obersten RAM-Adresse
	out SPL, temp1
	ldi temp1, HIGH(RAMEND)		; HIGH-Byte der obersten RAM-Adresse
	out SPH, temp1
 
 	ldi temp1, 0xFF				; Port B & C als Ausgang schalten
	out DDRB, temp1
	out DDRC, temp1

;===========================================================================
	
	ldi temp1, 12 
	out TWBR, temp1
	ldi temp1, (1<<TWINT)|(1<<TWSTA)|(1<<TWEN)
	out TWCR, temp1				; Sende Start condition
wait1:
	in temp1,TWCR				; Warten bis das TWINT Flag gesetzt ist.
	sbrs temp1,TWINT			; Das bedeutet das die START Condition gesetzt ist
	rjmp wait1

	in temp1,TWSR				; TWI Statusregister abfragen 
	andi temp1, 0xF8			; Prescalerbits Maskieren
;	sbrs temp1, TWSTA			; Startcondition prüfen
;	brne ERROR

	ldi temp1, 0x40				; Wert ins DatenRegister laden (Adresse?)
	out TWDR, temp1
	ldi temp1, (1<<TWINT) | (1<<TWEN)	; TWINT löschen um Übertragung zu starten
	out TWCR, temp1

wait2:
	in temp1,TWCR				; Warten bis das TWINT Flag gesetzt ist.
	sbrs temp1,TWINT
	rjmp wait2

	in temp1,TWSR				; TWI Statusregister prüfen.
	andi temp1, 0xF8			; Prescaler maskieren
	sbrs temp1, TWEA 			; Wenn kein Acknowledge kommt in ERROR springen.
	brne ERROR					

	ldi temp1, 0x40				; Daten in TWDR laden.
	out TWDR, temp1				
	ldi temp1, (1<<TWINT) | (1<<TWEN)	; TWINT löschen um Übertragung zu starten
	out TWCR, temp1				

wait3:
	in temp1,TWCR				; Auf TWINT Flag warten
	sbrs temp1,TWINT			
	rjmp wait3

	in temp1,TWSR				; TWSR Status prüfen
	andi temp1, 0xF8			; Prescaler maskieren
	sbrs temp1, TWEA			; Wenn kein Acknowledge kommt in ERROR springen
 	brne ERROR			

	ldi temp1, (1<<TWINT)|(1<<TWEN)|(1<<TWSTO)	; Stop condition
	out TWCR, temp1

main:
	ldi temp1, 0x04				; Indikator Ausgang für main-Schleifen
	out PORTB, temp1
	rjmp main

ERROR:
	ldi temp1, 0x01				; Indikator Ausgang für ERROE-Schleife
	out PORTB, temp1	
	rjmp ERROR
Hab auch ein plausiebles Oszzi-Bild, leider bekomme ich aber keinen Acknowledge zurück.

Kann mir einer nochmal BITTE BITTE helfen?

Danke

Gruß nOm3X

Edit: Hab Kommentare reingemacht. (so in ertwa übersetzt was im Datenblatt ist.)