/******************************************************************** Beispiel für RFM02-Funkmodul (Senden) IAR Embedded Workbench IDE, C Prozessor: ATMEGA8 Frequenz: 434MHz Datenrate: 4.8kbps Diese Programm stellt eine kurze Testroutine für den ATMEGA8 in Verbindung mit einem externen 8MHz Quarz, einem RFM02-Funkmodul, und dem Pollin Electronic Funk-AVR-Evaluations-Board dar. Es handelt sich ausdrücklich um eine Testroutine und ein Anwendungs- beispiel. Elementare Elemente wie Fehlerbehandlungen usw. sind nicht vorhanden. Programmablauf: Sendet Preamble, Frame-Recognition, 16 Datenbyte und ChkSumme der 16 Datenbyte. Anschließend erfolgt eine Signalisierung mit LED1. Dies geschieht in einer Endlosschleife. ----------------------- ATMEGA8 RFM02 ----------------------- SCK SCK MISO N.C. MOSI SDI SS nSEL INT0 nIRQ PD7 FSK PD5 LED2 PD6 LED1 PD4 Module-Power *********************************************************************/ //#include #define F_CPU 12000000 #include #include //#include #include #define DDR_IN 0 #define DDR_OUT 1 #define DDR_LED DDRD #define PORT_LED PORTD #define PORT_SEL PORTB #define PIN_SEL PINB #define DDR_SEL DDRB #define PORT_SDI PORTB #define PIN_SDI PINB #define DDR_SDI DDRB #define PORT_SCK PORTB #define PIN_SCK PINB #define DDR_SCK DDRB #define PORT_SDO PORTB #define PIN_SDO PINB #define DDR_SDO DDRB #define PB7 7 #define PB6 6// | #define RFXX_SCK 5// | #define RFXX_SDO 4// |RF_PORT #define RFXX_SDI 3// | #define RFXX_SEL 2// | #define PB1 1// #define PB0 0// #define RFXX_DATA 7// #define SEL_OUTPUT() DDR_SEL |= (1<1010)) #error Systematischer Fehler der Baudrate grösser 1% und damit zu hoch! #endif // bei neueren AVRs andere Bezeichnung fuer die Statusregister, hier ATmega16: int uart_putc(unsigned char c) { while (!(UCSRA & (1<> 8; UBRRL = UBRR_VAL & 0xFF; ////////////////// UART Ende LED_OUTPUT(); MODULE_OFF(); //for reset LED1_ON(); Delay_ms(200); LED1_OFF(); Delay_ms(200); LED1_ON(); Delay_ms(200); LED1_OFF(); Delay_ms(200); LED1_ON(); Delay_ms(200); LED1_OFF(); Delay_ms(200); Delay_ms(200); Delay_ms(200); Delay_ms(200); MODULE_ON(); //for reset Delay_ms(200); RFXX_PORT_INIT(); RFXX_WRT_CMD(0xCC00); RFXX_WRT_CMD(0x9381); //868MHz + 2MHz µC + 12.5pF + 60kHz RFXX_WRT_CMD(0xA640); //868MHz 866,9 // Kanal 10 //RFXX_WRT_CMD(0xA564); // = 866,9 (Kanal 10) RFXX_WRT_CMD(0xD040);//RATE/2 RFXX_WRT_CMD(0xC823);//4.8kbps RFXX_WRT_CMD(0xC220);//ENABLE BIT SYNC RFXX_WRT_CMD(0xC001);//CLOSE ALL PORTB|=(1<