hey.. Ich habe mein Problem wohl nicht gut geschildert. Naja das am Master war schonmal der erste Fehler, aber in meinem Slave hats sicher auch noch irgendwo Fehler.
Ich muss einen Sensor abfragen, (8 I/O Werte) und dann 2 byte auf Befehl vom Master übertragen. Master ist ein Mega32 und Slave ein Mega8. Ich habe den Code von Bammel mal übernommen und der Weg Master --> Slave funktioniert auch einwandfrei. aber Slave-->Master funktioniert nicht.

Hier mal der Slave Code.

Code:
'===============================================================================
'***| Mikrocontroller Config |**************************************************
'===============================================================================

'Microcontroller
'================
$regfile = "m8def.dat"
$crystal = 16000000
$hwstack = 32
$swstack = 10
$framesize = 40


'TWI
'====
Declare Sub Twi_init_slave
Dim Twi_control As Byte
Dim Twi_status As Byte
Dim Befehl As Byte
Dim Anzahl_bytes As Byte
Dim Neuesb_flagge As Byte
Dim Buffer(8) As Byte
Dim N As Byte                                               'zähler/index variable

Enable Interrupts


'Init
'=====
Portb.2 = 0
For N = 1 To 8
   Buffer(n) = 0
Next N

Befehl = 0
Anzahl_bytes = 0
Soll_motor_r = 100
Soll_motor_l = 100

Call Twi_init_slave

'-------------------------------------------------------------------------------
'***| Hauptprogramm |***********************************************************
'-------------------------------------------------------------------------------
'auf Befehle vom master warten

Do
     Neuesb_flagge = 0

     'schauen ob TWINT gesetzt ist
     Twi_control = Twcr And &H80                            ' Bit7 von Controlregister

     If Twi_control = &H80 Then
        Twi_status = Twsr And &HF8                          ' Status

        'wurde ein Byte geschickt?
        If Twi_status = &H80 Or Twi_status = &H88 Then
            Befehl = Twdr                                   ' neue Daten merken
            Neuesb_flagge = 1                               ' merken das ein neues Byte da ist
        End If


        'TWINT muss immer gelöscht werden, damit es auf dem Bus weiter geht
        Twcr = &B11000100                                   ' TWINT löschen, erzeugt ACK
     End If

     'wenn ein neues Byte gekommen ist verarbeiten
     If Neuesb_flagge <> 0 Then

       'Register zuordnen -> Befehl
       Select Case Befehl

               Case 1
               Gosub Klappen_abfrage

               Case 10
               Gosub Beep

               Case 255
               Gosub Softreset


       End Select


     End If

Loop
End



'-------------------------------------------------------------------------------
'***|KLappenabfrage|*****************************************************************
'-------------------------------------------------------------------------------
Klappen_abfrage:
Incr Soll_motor_r
Incr Soll_motor_l

Buffer(1) = Soll_motor_r
Buffer(2) = Soll_motor_l
Anzahl_bytes = 2
Gosub I2c_tx


Return
'-------------------------------------------------------------------------------
'***| I2C-BUS Daten Empfangsroutinen |******************************************
'-------------------------------------------------------------------------------
I2c_rx:


 For N = 1 To Anzahl_bytes
 'erstes Byte empfangen
 Neuesb_flagge = 0
 Do

    Twi_control = Twcr And &H80

    If Twi_control = &H80 Then
        Twi_status = Twsr And &HF8

        If Twi_status = &H80 Or Twi_status = &H88 Then
            Buffer(n) = Twdr
            Neuesb_flagge = 2
        End If

        Twcr = &B11000100
    End If

    If Neuesb_flagge = 2 Then Exit Do

 Loop

 Next N

Return

'-------------------------------------------------------------------------------
'***| I2C-BUS Daten Senderoutinen |******************************************
'-------------------------------------------------------------------------------
I2c_tx:
'-?????
    Twar = &H23                                             ' Slaveadresse setzen I2C-RX-Adr:Hex23
'-??????
For N = 1 To Anzahl_bytes
 'erstes Byte empfangen
 Neuesb_flagge = 0
 Do

    Twi_control = Twcr And &H80

    If Twi_control = &H80 Then
        Twi_status = Twsr And &HF8

        If Twi_status = &HA8 Or Twi_status = &HB8 Then
            Twdr = Buffer(n)
            Neuesb_flagge = 2
        End If

        Twcr = &B11000100
    End If

    If Neuesb_flagge = 2 Then Exit Do

 Loop

Next N
'????
    Twar = &H22                                             ' Slaveadresse setzen  I2C-RX-Adr:Hex22
'?????
Return

'-------------------------------------------------------------------------------
'***| TWI: Slavekonfiguration |*************************************************
'-------------------------------------------------------------------------------

Sub Twi_init_slave
    Twsr = 0                                                ' status und Prescaler auf 0
    Twdr = &HFF                                             ' default
    Twar = &H22                                             ' Slaveadresse setzen  I2C-RX-Adr:Hex22
    Twcr = &B01000100                                       ' TWI aktivieren, ACK einschalten
End Sub
In Fragezeichen habe ich mal makiert was ich noch hinzugefügt habe was aber auch nicht richtig ist, wie es scheint.

am Master hab ich auch schon verschiedene Codes ausprobiert ausprobiert:

Code:
Sub Automatik

   Waitms 10
     I2cstart
     I2cwbyte Mega8_adresse
     I2cwbyte 1
     I2cstop
    ?? waitms 10
     I2cstart
     I2cwbyte Mega8_adresse_r
     I2crbyte E , Ack
     I2crbyte W , Nack
     I2cstop


End Sub
Ich empfange mit der "i2crbyte" am master immer das byte, welches ich als letzes geschickt habe, in meinem Fall die Adresse des Slaves (bei h22 und h23)

Danke für schonmal im Vorraus an alle die sich meiner erbarmen aber ich finde den Fehler echt nicht. Ich mache schon eine halbe Ewigkeit damit rum