PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RFM12 auf 868Mhz konfigurieren und betreiben



Tobias-101
24.02.2009, 15:06
Hallo,

Steck immoment bei dem Funkmodul RFM12 fest, da ich dieses gerne mit 868Mhz betreiben möchte! Empfängerseite ist das Funkmodul hier von dieser Seite:http://www.ulrichradig.de/home/index.php/avr/usb-funk
mit folgendem Code:


#include <avr/interrupt.h>

#include <avr/io.h>
#include "usart.h"

#include "rf12.h"

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



int main (void)

{

unsigned char test[100]="test hallo\n";

usart_init(9600); // Serielle Schnittstelle initialisieren

DDRD |= (1<<6);



PORTD |= (1<<6);



usart_write("USB TEST\r\n");



rf12_init(); // ein paar Register setzen (z.B. CLK auf 10MHz)

rf12_setfreq(RF12FREQ(868,3)); // Sende/Empfangsfrequenz auf 433,92MHz einstellen

rf12_setbandwidth(5, 1, 4); // 200kHz Bandbreite, -6dB Verstärkung, DRSSI threshold: -79dBm

rf12_setbaud(9600); // 19200 baud

rf12_setpower(0, 6); // 1mW Ausgangangsleistung, 120k



while(1)

{



while(!(rf12_rxdata(test)));



usart_write("%s",(char*)test);

usart_write("\r\n");



}

}

und auf der Senderseite habe ich einen Atmel Mega 8 mit Grundbeschaltung (ein 10k Widerstand von Reset nach VCC und nen 100nF Kondensator zwischen VCC und GND ) und internem 8Mhz Quarz. Hier wurde folgender Code verwendet:


#include <avr/interrupt.h>

#include <avr/io.h>
#include "usart.h"

#include "rf12.h"

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



int main (void)

{

unsigned char test[100]="test hallo\n";

usart_init(9600); // Serielle Schnittstelle initialisieren



DDRB = (1<<3);

PORTB = (1<<3);



rf12_init(); // ein paar Register setzen (z.B. CLK auf 10MHz)

rf12_setfreq(RF12FREQ(868.3)); // Sende/Empfangsfrequenz auf 433,92MHz einstellen

rf12_setbandwidth(5, 1, 4); // 200kHz Bandbreite, -6dB Verstärkung, DRSSI threshold: -79dBm

rf12_setbaud(9600); // 19200 baud

rf12_setpower(0, 6); // 1mW Ausgangangsleistung, 120k



while(1)

{



rf12_txdata(test,13);

for(long a = 0;a<100000;a++){asm("nop");};



}

}




Außerdem habe ich noch folgende Stellen in RF12.c angepasst(angepasste stellen sind in Klammern gekennzeichnet) :




for (i=0; i<10; i++)

_delay_ms(10); // wait until POR done



rf12_trans(0xC0E0); // AVR CLK: 10MHz

rf12_trans(0x80"E"7); // 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

rf12_trans(0x0000);



Und in RF12.h:

"//Mega 8 defines werden direkt gesetzt und nicht mehr der Controller erfragt!
"
#define RF_PORT PORTB
#define RF_DDR DDRB
#define RF_PIN PINB
#define SDI 3
#define SCK 5
#define CS 2
#define SDO 4


und:

// macro for calculating frequency value out of frequency in MHz
#define RF12FREQ(freq) ("(freq-860.0)/0.005) "


Den Original Code kann man hier runterladen:

http://www.ulrichradig.de/home/uploads/File/USB_RF_MODULE/USB_FUNK.zip

Leider funktioniert die Übertragung nicht ich habe beide Funkmodule voneinander in 10cm Abstand liegen! Allerdings auch noch an keinem eine Antenne (brauchen diese auch für so eine kurze Distanz eine ?).

Fällt vielleicht jemanden von euch so auf anhieb ein Fehler auf?

Freue mich auf eure Antworten

gruß Tobias

Hubert.G
25.02.2009, 08:25
Hast du auch ein Modul das für 868MHz ausgelegt ist, es steht auf dem Modul drauf.