Also ich hab jetzt nochmal die Randbedingungen fuer die UART-Kommunikation eingefuegt...das Senden eines Strings hab ich schon mal in einem anderen Programm hingekriegt...jetzt fehlt mir noch wie ich die Variable auslese...ich weiss nicht wie das funktioniert...von der Programmiersprache her...da habe ich wohl noch viel zu Lernen

Vorerst möchte ich auch wenn es ziemlich ungenau ist ersteinmal die Variable senden und am PC sehen können...erst dann wuerde ich mich gerne mit der Genauigkeit beschäftigen und ggfs. umprogrammieren...Hier hab ich nochmal meinen aktuellen Code...es wuerde mir sehr viel helfen wenn ihr vielleicht da drin den Änderungen vornehmt...Die neuen Teile hab ich so abgegrenzt : //----

Vielen Dank und viele Gruesse


Code:
//define all external dependencies

#include <avr/io.h>
#include <util/delay.h>
#include <stdio.h>
#include <stdint.h>
#include <avr/interrupt.h>
//-------------------------------------------------------------------------------------------------//
#ifndef F_CPU
#warning "F_CPU war noch nicht definiert, wird nun nachgeholt mit 4000000"
#define F_CPU 3686400 // Systemtakt in Hz 
#endif

#define BAUD 9600UL // Baudrate

// Berechnungen
#define UBRR_VAL (((F_CPU)/(BAUD*16))-1) // clever runden
#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1))) // Reale Baudrate
#define BAUD_ERROR ((BAUD_REAL*1000)/BAUD-1000) // Fehler in Promille

//#if ((BAUD_ERROR>10) || (BAUD_ERROR<=10))
//#error Systematischer Fehler der Baudrate grösser 1% und damit zu hoch!
//#endif
//-------------------------------------------------------------------------------------------------//

//declare all used functions
void Sensor_init(void);
void LED_SW_init(void);
void uart_init(void);
void TIMER2_interrupt_init(void);

//define variables

volatile unsigned int z;
volatile unsigned int sekunde;
volatile unsigned int T1;
volatile unsigned int T2;
volatile unsigned int TD;



void uart_init(void)
{
  UCSRB |= (1<<TXEN);  // UART TX einschalten
  UCSRC |= (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);  // Asynchron 8N1 
 
  UBRRH = UBRR_VAL >> 8;
  UBRRL = UBRR_VAL & 0xFF;
}


void TIMER2_interrupt_init(void)
{
  TCCR2 = (1<<WGM21)|(0<<WGM20)|(1<<CS22)| (1<<CS21) |(0<<CS20);	//CTC mode und Prescaler auf 256
  TCNT2=0;
  OCR2=199;															//alle 0.008 s Interrupt
  TIMSK = (1<<OCIE2);
  }

ISR(TIMER2_COMP_vect)												//LED soll alle 1s leuchten
{
 z++;
  if(z==72)
  {
    PORTB ^= (1<<PB0);
    z=0;
  }

}

int main(void)
{
  Sensor_init();
  LED_SW_init();
  uart_init();
  TIMER2_interrupt_init();

 while(1)
{
if(!(PINA & (1<<PINA0))) //Mit Pin 0 soll T1 gespeichert werden
{
T1 = sekunde;
}
if(!(PINA & (1<<PINA1))) //Mit Pin 1 soll T2 gespeichert werden und die Differenz berechnet werden
{
T2 = sekunde;
TD = T2-T1;
} 
}


void Sensor_init(){

	DDRA=0x00; 				// For using the floating sensor the Port A has to be used as a digital input
  	PORTA=0xff; 			// activate internal pull-up resistors for PORTA
}
	
void LED_SW_init(){

	DDRB=0xFF; 					// PORTB is output for LEDs
	PORTB=0xFF; 				// all LEDs off
	}

//-------------------------------------------------------------------------------------------------//

/* ATmega16 */
int uart_putc(unsigned char c)
{
    while (!(UCSRA & (1<<UDRE)))  /* warten bis Senden moeglich */
    {
    }                             
 
    UDR = c;                      /* sende Zeichen */
    return 0;
}
 
 
/* puts ist unabhaengig vom Controllertyp */
void uart_puts (char *s)
{
    while (*s)
    {   /* so lange *s != '\0' also ungleich dem "String-Endezeichen" */
        uart_putc(*s);
        s++;
    }
}

//-------------------------------------------------------------------------------------------------//