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
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