Moin,
ich habe angefangen mit diesen RFM Modulen zu spielen. Wollte es erstmal 
mit einem kleinen Testprogramm mit dem RFM02 versuchen. Allerdings 
funktioniert es nicht und ich habe keinen Plan warum.
Hier erstmal der Code von meinem Testprogramm:
| 1 | #include <avr/io.h>
 | 
| 2 | #include <avr/interrupt.h>
 | 
| 3 | #include <avr/pgmspace.h>
 | 
| 4 | #include <avr/eeprom.h>
 | 
| 5 | #include <stdlib.h>
 | 
| 6 | #include <util/delay.h>
 | 
| 7 | #include "global.h"
 | 
| 8 | #include "rf02.h"
 | 
| 9 | 
 | 
| 10 | #define Taster_PORT PORTB
 | 
| 11 | #define Taster_DDR   DDRB
 | 
| 12 | #define Taster_PIN   PINB
 | 
| 13 | #define Taster 1
 | 
| 14 | 
 | 
| 15 | #define LED_PORT  PORTD
 | 
| 16 | #define LED_DDR   DDRD
 | 
| 17 | #define LED_PIN   PIND
 | 
| 18 | #define LED 5
 | 
| 19 | 
 | 
| 20 | 
 | 
| 21 | unsigned char test[2]="01";
 | 
| 22 | 
 | 
| 23 | int main(void)
 | 
| 24 | {
 | 
| 25 |   Taster_DDR &= ~(1<<Taster);
 | 
| 26 |   LED_DDR |= (1<<LED);
 | 
| 27 |   
 | 
| 28 |   rf02_init();          // ein paar Register setzen (z.B. CLK auf 10MHz)
 | 
| 29 |   rf02_setfreq(RF02FREQ(433.92));  // Sende/Empfangsfrequenz auf 433,92MHz einstellen
 | 
| 30 |   rf02_setpower(0);        // -0dBm Ausgangangsleistung
 | 
| 31 |   rf02_setmodfreq(3);        // 120kHz Frequenzshift
 | 
| 32 |   rf02_setbaud(19200);      // 19200 Baud
 | 
| 33 |   
 | 
| 34 |   
 | 
| 35 |   while(1)
 | 
| 36 |   {
 | 
| 37 |     if (Taster_PIN & (1<<Taster))
 | 
| 38 |     {
 | 
| 39 |       rf02_txdata(test,2);
 | 
| 40 |       LED_PORT |= (1<<LED);      
 | 
| 41 |       _delay_ms(1000);
 | 
| 42 |       LED_PORT &= ~(1<<LED);
 | 
| 43 |     }
 | 
| 44 |   }
 | 
| 45 | }
 | 
Ich konnte das Problem immerhin einigermaßen eingrenzen. Es liegt auf 
jeden Fall an der Funktion rf02_txdata. In dieser bleibt das Programm 
immer hängen. Wenn ich sie auskommentiere läuft das Programm problemlos 
und wenn ich sie nach dem Ausschalten der LED einfüge, kann man die LED 
einmal aufleuchten lassen und danach hängt das Programm wieder.
Hier der Code der rf02_txdata:
| 1 | void rf02_txdata(unsigned char *data, unsigned char number)
 | 
| 2 | {  unsigned char i,wert;
 | 
| 3 |   wert=0xC6;
 | 
| 4 |   cbi(CS_PORT, CS);
 | 
| 5 |   for (i=0; i<8; i++)
 | 
| 6 |   {  
 | 
| 7 |     if (wert&128)
 | 
| 8 |     {
 | 
| 9 |       sbi(SDI_PORT, SDI);
 | 
| 10 |     }
 | 
| 11 |     else
 | 
| 12 |     {
 | 
| 13 |       cbi(SDI_PORT, SDI);
 | 
| 14 |       sbi(SCK_PORT, SCK);
 | 
| 15 |       wert<<=1;
 | 
| 16 |       _delay_us(0.2);
 | 
| 17 |       cbi(SCK_PORT, SCK);
 | 
| 18 |     }
 | 
| 19 |   }
 | 
| 20 |     rf02_shiftout(0xAA);
 | 
| 21 |     rf02_shiftout(0xAA);
 | 
| 22 |     rf02_shiftout(0xAA);
 | 
| 23 |     rf02_shiftout(0x2D);
 | 
| 24 |     rf02_shiftout(0xD4);
 | 
| 25 |   for (i=0; i<number; i++)
 | 
| 26 |   {
 | 
| 27 |     rf02_shiftout(*data++);
 | 
| 28 |   }
 | 
| 29 |   sbi(CS_PORT, CS);
 | 
| 30 |   while(IRQ_PIN&(1<<IRQ));    // wait until transfer done
 | 
| 31 |   rf02_trans(0xC464);      // TX off after 10us
 | 
| 32 | }
 | 
Den Code der gesammten RF02-Library habe ich mal in den Anhang gepackt.
Vielen Dank schonmal für jede Hilfe!