So Ich hab es jetzt nach einer Pause endlich geschafft die Funkmodule zum funken zu bringen. Bild  
Dabei benutze ich eine abgeänderte Software von Benedikt K. http://www.mikrocontroller.net/topic/67273
Code:
#include <avr/io.h>#include <avr/interrupt.h>
#include "rfm12.h"


#define F_CPU 1000000UL
#include <util/delay.h>






#ifndef cbi
#define cbi(sfr, bit)     (_SFR_BYTE(sfr) &= ~_BV(bit)) 
#endif
#ifndef sbi
#define sbi(sfr, bit)     (_SFR_BYTE(sfr) |= _BV(bit))  
#endif




#define IRQ_Port		PORTD
#define IRQ_Pin   		PIND
#define IRQ_DDR	     	DDRD
#define IRQ		    	2
#define IRQ_Output()	IRQ_DDR |= (1<<IRQ)
#define IRQ_Input()	    IRQ_DDR&=~ (1<<IRQ)
#define IRQ_High()		IRQ_Port|= (1<<IRQ)
#define IRQ_Low()		IRQ_Port&=~(1<<IRQ)
#define IRQ_Wait_Low()	while(IRQ_Pin&(1<<IRQ))


#define RF_PORT	PORTB
#define RF_DDR	DDRB
#define RF_PIN	PINB


#define SDI		5
#define SCK		7
#define CS		4
#define SDO		6




void _delay_s(int s)
{
 for (unsigned char i=0; i<s*100; i++)
		_delay_ms(10);
}




unsigned short rf12_trans(unsigned short wert)
{	unsigned short werti=0;
	unsigned char i;


	cbi(RF_PORT, CS);
	for (i=0; i<16; i++)
	{	if (wert&32768)
			sbi(RF_PORT, SDI);
		else
			cbi(RF_PORT, SDI);
		werti<<=1;
		if (RF_PIN&(1<<SDO))
			werti|=1;
		sbi(RF_PORT, SCK);
		wert<<=1;
		_delay_us(0.3);
		cbi(RF_PORT, SCK);
	}
	sbi(RF_PORT, CS);
	return werti;
}


void rf12_init(void)
{
	RF_DDR=(1<<SDI)|(1<<SCK)|(1<<CS);
	RF_PORT=(1<<CS);
	IRQ_Input();


	for (unsigned char i=0; i<10; i++)
		_delay_ms(10);			// wait until POR done


	rf12_trans(0xC0E0);			// AVR CLK: 10MHz
	rf12_trans(0x80D7);			// Enable FIFO
	rf12_trans(0xC2AB);			// Data Filter: internal
	rf12_trans(0xCA81);			// Set FIFO mode
	rf12_trans(0xE000);			// disable wakeuptimer
	rf12_trans(0xC800);			// disable low duty cycle
	rf12_trans(0xC4F7);			// AFC settings: autotuning: -10kHz...+7,5kHz
}




void rf12_ready(void)
{	cbi(RF_PORT, CS);
	while (!(RF_PIN&(1<<SDO))); // wait until FIFO ready
}


void rf12_txdata(unsigned char data)
{	
	rf12_trans(0x8238);			// TX on
	rf12_ready();
	rf12_trans(0xB8AA);
	rf12_ready();
	rf12_trans(0xB8AA);
	rf12_ready();
	rf12_trans(0xB8AA);
	rf12_ready();
	rf12_trans(0xB82D);
	rf12_ready();
	rf12_trans(0xB8D4);
	rf12_ready();
	rf12_trans(0xB800|(data));
	rf12_ready();
	rf12_trans(0x8208);			// TX off
}


char rf12_rxdata(void)
{	
    unsigned char data;
	rf12_trans(0x82C8);			// RX on
	rf12_trans(0xCA81);			// set FIFO mode
	rf12_trans(0xCA83);			// enable FIFO
	rf12_ready();
	data=rf12_trans(0xB000);
	rf12_trans(0x8208);			// RX off
    
        return data;
}
Leider hat das ganze keine hohe Effektivität. (um die 10%)
Deswegen wollte ich fragen, was ich machen kann um die Genauigkeit zu verbessern?
Dafür spielt ja wahrscheinlich die Funktion rf12_ready() eine Rolle und auch diese
"Dummy Bytes".
Wie genau funktioniert das eigentlich?

rf12_trans(0xB8AA);
rf12_ready();
rf12_trans(0xB8AA);
rf12_ready();
rf12_trans(0xB8AA);
rf12_ready();
rf12_trans(0xB82D);
rf12_ready();
rf12_trans(0xB8D4);