@yaro: das generelle freischalten wäre schlecht ich halte mir die option auf das noch weitere teilnehmer dazukommen. zudem muss ich auch immer wissen welches empfangene byte zu welcher slaveadresse gehört.

@uwegw: wie würde der code den ungefähr aussehen?
mein bisheriger code mit nur einer adresse sieht wie folgt aus:
Code:
Call Twi_init_slave

'-------------------------------------------------------------------------------
'***| Hauptprogramm |***********************************************************
'-------------------------------------------------------------------------------
Do
     Newbyte = 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
            Command = Twdr                                  ' neue Daten merken
            Newbyte = 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 Newbyte <> 0 Then

       'Register zuordnen -> Befehl
       Select Case Command

               Case 1
               Gosub Motor1

               Case 2
               Gosub Motor2

               Case 3
               Gosub Motor3


       End Select


     End If

Loop
End




'-------------------------------------------------------------------------------
'***| Motor 1 |*****************************************************************
'-------------------------------------------------------------------------------
Motor1:

   Index = 1
   '1 Byte holen / gibt an wieviele bytes geholt werden sollen hier im beispiel max. 10 "i2cbyte(1 bis 10)"
   Gosub I2c_rx

   'PWM1 = i2cbyte(1)

Return


'-------------------------------------------------------------------------------
'***| Motor 2 |*****************************************************************
'-------------------------------------------------------------------------------
Motor2:

   Index = 1                                                '1 Byte holen
   Gosub I2c_rx

   'PWM2 = i2cbyte(1)

Return


'-------------------------------------------------------------------------------
'***| Motor 3 |*****************************************************************
'-------------------------------------------------------------------------------
Motor3:

   Index = 1                                                '1 Byte holen
   Gosub I2c_rx

   'PWM3 = i2cbyte(1)

Return



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

 For N = 1 To Index
 'erstes Byte empfangen
 Newbyte = 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
            I2cbyte(n) = Twdr
            Newbyte = 2
        End If

        Twcr = &B11000100
    End If

    If Newbyte = 2 Then Exit Do

 Loop

 Next N

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
ich hatte mir nun gedacht das ganze so abzuändern das ich die routine in der hauptschleife einfach dreimal hintereinander aufrufe und vorher die slaveadresse (Twar) ändere!?

würde das so funktionieren oder wie sollte der code ungefähr aussehen?

@besserwessi: einen anderen µC kann ich natürlich nehmen zum testen wäre natürlich der atmega8 am schönsten da ich diesen hier habe. wobei ich demnächst eh bei Reichelt bestellen werde da könnte ich mir einen anderen mitbestellen. ist der atmega88 nicht sogar pinkompatibel mit dem atmega8

gruß und danke schon mal,
Bammel