Mmh...also bei mir funktioniert es immer noch nicht... es gibt immernoch sehr ungenaue Daten, obwohl ich nun beliebige Unterbrechungen von 1 bis 70 uM gemacht habe.

Kannst du mir bitte genau sagen, was du mit was verbunden hast, damit dein gepostet Programm bei mir laeuft - ich benutze einen normal aufgebauten ASURO ohne LCD display ? Ich weiss, es wir oben schon erklaert, aber irgendwie hab' ich das Gefuehl, dass ich etwas falsch mache. Also ich hab' es so angeschlossen:

5v supply - out+
0 Ground - out-
der 'Mittlere',also trigger input,output - CON1
No connection - PD6

mit folgendem programm
Code:
#include "asuro.h"


#ifndef F_CPU
/* wenn F_CPU nicht bereits vorher definiert (z.B. durch
   Übergabe als Parameter zum Compiler innerhalb des Makefiles) */
#define F_CPU 8000000UL     /* Quarz mit 8 Mhz */
#endif 
#include <util/delay.h>


// Funktion: Abstand per Ultraschall messen über SRF05
// Parameter:
//   sensor: PIN an dem der Sensor hängt
// Rückgabewert: gemessener Abstand in cm


uint16_t getAbstand(uint8_t sensor) {
  uint8_t tmp_sreg;
  tmp_sreg = SREG;
  cli();                         // interrupts deaktivieren
  uint16_t abstand = 0;          // abstand in cm
  
   
  DDRD |= (1<<sensor);          // sensor Pin auf Ausgang
  PORTD |= (1<<sensor);         // sensor Pin auf high setzen
  
  _delay_us(20);                // 20 mikrosek. warten
  
  PORTD &= ~(1<<sensor);        // sensor Pin auf low setzen (ist noch als Ausgang konfiguriert)

  
  DDRD &= ~(1<<sensor);         // sensor Pin auf Eingang setzen
  while(!(PIND & (1<<sensor))); // auf Sensorantwort warten (Eingang wird high)
  
  while(PIND & (1<<sensor))     // warten bis Signalende bis Eingang low wird
  {                  
    _delay_us(58);              // 58 mikrosec. warten entspricht 1cm entfernung
    abstand++;                  // Anzahl der cm erhöhen
  }
  
  SREG=tmp_sreg;                // Register zurücksetzen
     
  return abstand;               // gemessenen Abstand zurückgeben
} 

uint16_t avrAbstand(uint8_t sensor) {
  uint8_t k=0;
  uint16_t average=0;
  for (k=0; k<50; k++)
    average=average+getAbstand(sensor);
  return (average/50);
}

int main(void)
{
  Init();
  int i=0;
  int j,k;
  BackLED(ON,ON);
  char S[100];
  while(1)    
    {
    uint16_t abstand = avrAbstand(PD6);
    sprintf(S,"\n\rA:%4d\n\r",abstand);
    SerWrite(S,strlen(S));
    
  }
}
Also, dieses Programm funktioniert bei mir. Ich weiss, eigentlich sollte bei "No connection" auch nichts verbunden sein, aber bei mir gibt es nur mit dieser Einsteckvariante Messungen aus.