Ok, ich finde den Fehler immer noch nicht, ich poste hier mal den Code, eventuell gibt es ja jemand der sich mit TWI gut auskennt. Möglicherweise liegt der Fehler gar nicht im Code sondern irgendwie am drumherum.

Danke!

Im Hauptprogramm laufen nacheinander die Routinen

rcall H_TWI_WRITE ; EEPROM beschreiben
rcall H_TWI_READ ; vom EEPROM lesen

es gibt neben den Standartvereinbarungen folgende Vereinbarungen:

.equ HSCLP = 0
.equ HSDAP = 1
.equ TWIrd = 1
.equ TWIwr = 0
.equ EEPROM = 174 ; 1010 für EEPROM, 111x für individuelle Geräteadresse

Der dazugehörige Code lautet auf:

H_TWI_START:

cbi TWSR, TWPS1
cbi TWSR, TWPS0
ldi r16,0x0C ; Original: 0x0B
out twbr,r16
sei
H_TWI_SSTART:

clr r16
ldi r16,(1<<TWINT) | (1<<TWSTA) | (1<<TWEN)
out TWCR,r16
H_TWI_START_w:
in r16,TWCR
sbrs r16,TWINT
rjmp H_TWI_START_w
ret

;***Hardware TWI Datentransfer von r=16 ***

H_TWI_DATA:
out TWDR,r16
clr r16
ldi r16, (1<<TWINT) | (1<<TWEN)
out TWCR,r16
H_TWI_DATA_w:
in r16,TWCR
sbrs r16,TWINT
rjmp H_TWI_DATA_w
ret

;***Hardware TWI Stop***

H_TWI_Stop:
clr r16
ldi r16, (1<<TWINT) | (1<<TWSTO) | (1<<TWEN)
out TWCR,r16
ret

;***Hardware TWI_WRITE - Schreibroutine***
H_TWI_WRITE:

rcall H_TWI_START

ldi r16,EEPROM+TWIwr ; IC Adressieren und schreiben
rcall H_TWI_DATA
ldi r16,0x00 ; Pointer Speicherplatz HIGH / Daten auf BUS legen
rcall H_TWI_DATA
ldi r16,0x00 ; Pointer Speicherplatz LOW / Daten auf bus legen
rcall H_TWI_DATA

ldi r16,0x01 ; Übertragungsdaten
rcall H_TWI_DATA

rcall H_TWI_STOP

ret


;***Hardware TWI_READ - Empfangsroutine***
H_TWI_READ:

rcall H_TWI_START ;Start

ldi r16,EEPROM+TWIwr ; IC Adressieren und schreiben
rcall H_TWI_DATA

ldi r16,0x00 ;Pointer auf Speicherplatz setzen
rcall H_TWI_DATA ;Befehle/Daten auf Bus legen

ldi r16,0x00 ;Pointer auf Speicherplatz setzen
rcall H_TWI_DATA ;Befehle/Daten auf Bus legen

rcall H_TWI_SSTART ;Neues Start zeichen

ldi r16,EEPROM+TWIrd ; IC Adressieren und schreiben
rcall H_TWI_DATA

ldi r16,0x00
rcall H_TWI_DATA ;Leeres Datenpaket schicken und damit Clock erzeugen DA BIN ICH NICHT SICHER DAD DAS SO GEHT

rcall H_TWI_STOP ;Stop ausgeben

ret