Hier jetzt nochmal nur die Funktion start_messung() mit deinen Verbesserungen:
Code:
#include <avr/io.h> 
#include <avr/delay.h>        // F_CPU definiert als 8Mhz
#include <stdint.h>

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

// PD6 ist Input Capture Pin beim ATMega8, hier kommt der Echo-Pulse Ausgang hin 
uint16_t start_messung(void) 
{ 
   uint16_t wert = 0 ;        //wert_in_cm; 
    
   //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 

   _delay_us(11);            // Laut Datenblatt Trigger-Puls min 10us auf high 

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

   while ( !(PIND & (1<<PD6)));  //warten bis der Echo Impuls anfängt 


   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; 
}
Also Danke dir nochmal Dino Dieter. Und stimmt die _delay_us() Funktion jetzt, da du erst gemeint hast man muss sie zweimal aufrufen um auf 192us zu kommen?
Gruß Muraad