Guten Abend,
so... endlich mal wieder Zeit gehabt.
Also: Habe mir ein IC geholt, dass ich 1. über TWI ansteuern kann und 2. für ein Projekt in zukunft benötige). Der IC hört auf den Namen MAX517 und wandelt 8Bit in eine Spannung von 0V bis UB.

Der Code für den Master sieht in etwa so aus:
Code:
/*
Test Programm für TWI zwischen ATmega8 und MAX517 D/A-Wandler.
+++
Master sendet ein Byte an Slave. Byte wird an Port B über zwei Taster (B0 und B1) eingegeben und an Port D dargestellt
Über ein dritten Taster (B2) wird die TWI-Übertragung ausgeführt.
+++
Slave IC: MAX517 wandelt das Byte in ein analoges Signal um. 
Adresse vom IC: 0101111 (5E)
*/
#include <avr/io.h>
#include <avr\delay.h>
#define empfanger 0x5E // Empfänger Adresse (5E) plus Schreibbit (0) in Hex

void send(unsigned char adres, unsigned char data) // Sende Funktion
{
    TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN);    // TWI Starten, Startbedinung
    loop_until_bit_is_set(TWCR,TWINT);        // Warten bis fertig
    
    TWDR=adres;                             // Zieladresse ins Register schreiben
    TWCR=(1<<TWINT)|(1<<TWEN);                // Zieladresse senden
    loop_until_bit_is_set(TWCR,TWINT);         // Warten bis fertig
    
    TWDR=0x0;                                 // Command-Byte ins Register. Bei MAX517: 0! Siehe Datenblatt
    TWCR=(1<<TWINT)|(1<<TWEN);                 // Command-Byte senden
    loop_until_bit_is_set(TWCR,TWINT);         // Warten bis fertig
   
    TWDR=data;                                 // Daten-Byte ins Register
    TWCR=(1<<TWINT)|(1<<TWEN);                 // Daten senden
    loop_until_bit_is_set(TWCR,TWINT);         // Warten bis fertig
  
    TWCR=(1<<TWINT)|(1<<TWSTO)|(1<<TWEN);    // TWI beenden, Stopbedingung
}

int main(void)
{
    DDRD=0xFF;     // Port D als Ausgang
    PORTD=0x00; // Port D auf Null
    DDRB=0x00;     // Port B als Eingang

    unsigned char data, a=0;
    
    TWBR=60; // Bitraten Erzeugung
    TWSR=0; // Vorteiler 1

    while(1)
    {
    if(bit_is_clear(PINB,PINB0)) // ausführen, wenn PB0 0 ist
        {
            _delay_ms(170); // 170ms  Warten (Prellen abwarten)
            
            if(a<=255) 
            {
                a=a+1; 
                PORTD=a; // Wert ausgeben
            }
            else
                a=255;
        }

    if(bit_is_clear(PINB,PINB1)) // ausführen, wenn PB1 0 ist
        {
            _delay_ms(170);
            
                if(a!=0)
                {
                    a--;
                    PORTD=a; // Wert ausgeben
                }
                else
                    a=0;
                    
        }
    if(bit_is_clear(PINB,PINB2)) // ausführen, wenn PB2 0 ist
        send(empfanger, PORTD);
    }
}
Okay...
Jetzt zurück zu mein Problem:
Master Code, würde so funktionieren (Statt den Command-Byte würde ein Datenpaket zum Slave-AVR gesendet).
Aber wie bringe ich nun den Slave AVR dazu, dass er funktioniert?
Ich weis, dass die TWI ein Interrupt auslöst, wenn der Slave sich angesprochen fühlt.
Aber wie müsste ein C-Code aussehen, der die Daten aus dem Register holt und in ein Array Speichert?