ich habe in der make die f_cpu und trotzdem stimmt die zeit der _delay nicht, woran liegt das.
bei meiner selbsterstellten srf04-routine müssen us gewartet werden. mit asm-routinen und for geht es, aber mit der_delay nicht.
Code:
#include <inttypes.h> 
#include <avr/io.h> 
#include <avr/interrupt.h> 
#include <avr/signal.h>
#include <string.h> 
#include <stdint.h>
#include <avr/delay.h>

#define READ  1 
#define WRITE 2 

#define USART_BAUD_RATE 	19200 
#define USART_BAUD_SELECT 	(F_CPU/(USART_BAUD_RATE*16l)-1) 

#define    MESS_PORT           PORTB 
#define    MESS_PORT_RICHTUNG  DDRB 
#define    MESS_PIN            PINB 
#define    MESS_BIT            PB1               // Echo-Trigger Eingang  oder einfach Messeingang 

#define US_PORT                PORTB 
#define US_PORT_RICHTUNG       DDRB 
#define US_BIT                 PB0               // Der Pin kommt zum Trigger-Puls Eingang 

void usart_init(int Enable, int Interupts) 
{ 
	if (Enable & READ)         		UCSRB = (1<<RXEN); 
	if (Enable & WRITE)        		UCSRB |= (1<<TXEN); 

    if (Interupts & READ)         		UCSRB |= (1<<RXCIE); 
	if (Interupts & WRITE)        		UCSRB |= (1<<TXCIE); 
    UBRRL = (unsigned char) 			USART_BAUD_SELECT; 
} 

void usart_writeChar(unsigned char c) 
{ 
    while (!(UCSRA & (1<<UDRE))) {} 
    UDR = c; 
    while(!(UCSRA & (1<<TXC))) {} 
} 

void usart_writeString(unsigned char *string) { 
    while (!(UCSRA & (1<<UDRE))) {} 
	while ( *string) 
    usart_writeChar(*string++); 
} 

uint16_t start_messung(void) 
{ 
   volatile uint16_t wert,i;
   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<10; i++)
    asm volatile("nop");
   US_PORT&=~(1<<US_BIT);   // Trigger-Puls Eingang wieder auf low   
   for (i=0; i<200; i++)
    asm volatile("nop");
   
   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; 
} 

int main (void) 
{   
           
	char s[10];
	uint16_t wert_1; 
	usart_init( (READ + WRITE) , READ); 

	for (;;) {
	
    wert_1=start_messung(); 
	itoa( wert_1, s, 10);

	usart_writeString(s);
    usart_writeString("\r");
 	}
}
mfg pebisoft