Pepisoft weisst du wie ich mich grad freu das der Code endlich Funktioniert \/
Hier nochmal der Code für beide Funktionen (mit und ohne Input Capture), mit deinen for Warteschleifen und volatile für die Variablen.
Code:
#include <avr/io.h> 
#include <avr/delay.h>        // F_CPU definiert als 8Mhz 
#include <stdint.h> 

// Das mit PD1 auf PORTD ist nur ein Beispiel, jeder beliebige Pin kann gewält werden 
#define    MESS_PORT           PORTB 
#define    MESS_PORT_RICHTUNG  DDRB 
#define    MESS_PIN            PINB 
#define    MESS_BIT            PB0               // Echo-Trigger Eingang  oder einfach Messeingang 

#define US_PORT  PORTD 
#define US_PORT_RICHTUNG   DDRD 
#define US_PIN  PD7                   // Der Pin kommt zum Trigger-Puls Eingang 

// Mit Input Capture Pin
uint16_t start_messung_IC(void)          
{ 
   volatile uint16_t wert = 0,i,x,x1;         
    
   //Timer vorbereiten 
   TCCR1B  &=~(1<<ICES1);   // Fallende Flanke für Input Capture 
   TCNT1 = 0;          // Timer1 löschen 
    
   US_PORT|=(1<<US_PIN);      // Trigger-Puls auf high 

   for (i=0; i<x; i++)             // Ein Durchgang er Schleife dauert bei 8Mhz 0,75us
    asm volatile("nop"); 

   US_PORT &=~(1<<US_PIN);   // Trigger-Puls Eingang wieder auf low 

   for (i=0; i<x1; i++)          // Warten bis 40kHz Ultraschallburst zuende
    asm volatile("nop");

  TCCR1B  |= (1<<CS11);         // Prescaler 8, damit dauert ein Tackt  1 micro Sekunde, Timer startet 

   while ( !(TIFR & (1<<ICF1))); 
  // Warten bis Input Capture Flag gesetzt   ---> Echo-Eingang ist low 

   if(ICR1 < 20000)                      // gültiger Bereich  (max 18 ms + Reserve ) 
        wert= (unsigned int) (ICR1 / 58);    //umrechnen in cm    (laut Datenblatt ) 

      TCCR1B &= ~(1<<CS11);     // Timer wieder aus 
      TIFR   |= (1<<ICF1);     // ICF1 Bit wieder löschen durch schreiben einer logischen 1 

    return wert; 
} 
// Zeit/srf04 Messung, beliebige Pins können gewählt werden
uint16_t start_messung(void) 
{ 
   volatile uint16_t wert,i,x,x1; 
   x=14; 
   x1=267; 
   wert=0; 
    
   US_PORT_RICHTUNG|=(1<<US_BIT);         // US_PIN auf Ausgang 
   US_PORT|=(1<<US_BIT);           // Trigger-Puls auf high  
   for (i=0; i<x; i++)             // Ein Durchgang er Schleife dauert bei 8Mhz 0,75us
    asm volatile("nop"); 
    US_PORT&=~(1<<US_BIT);           // Trigger-Puls Eingang wieder auf low    
   for (i=0; i<x1; i++) 
    asm volatile("nop"); 
   // Wenn keine srf04 Messung dann einfach ab hier 
   TCNT1=0;                   // Timerregister  auf 0 
   TCCR1B|= (1<<CS11);      // Timer starten 
   while (MESS_PIN & (1<<MESS_BIT))     // Warten bis Echo/Mess Eingang auf low 
   wert=TCNT1; 
   TCCR1B&= ~(1<<CS11);     // Timer wieder aus    
   return wert;                 // Muss bei srf04 Messung noch in cm umgerechnet werden
}
Wegen den eeproms , ich erkundige mich mal und mach vielleicht nen neuen Thread auf. Aber wenn die eeproms die Standard I2C ansteuerung haben ist das ziemlich einfach. Wäre auch ne gelegenheit meine I2C Funktionen (hauptsächlich aus dem Datenblatt) zu testen. Und vielleicht schaffen wirs ja echt noch im laufe der Zeit den kleine Bibliothek zu erstellen.
Gruß Muraad