RFM12 868 Mhz umstellen

Gast #1148890
Lesenswert?

Hallo,

Wir sind immoment daran eine Funkstrecke, zwischen zwei AVR's zu 
realisieren.

Zur Programmierung benutzen wir die Libarys von Ulrich Radig

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

Unser Problem besteht aktuell darin das wir das 868Mhz nutzen wollen!

Folgende Programmabschnitte haben wir bereits geändert:

In der RF12.h:
Von:
#define RF12TxBDW(kfrq)  ((unsigned char)(kfrq/15)-1)
// macro for calculating frequency value out of frequency in MHz
#define RF12FREQ(freq)  ((freq-430.0)/0.0025)

Zu:
#define RF12TxBDW(kfrq)  ((unsigned char)(kfrq/15)-1)
// macro for calculating frequency value out of frequency in MHz
#define RF12FREQ(freq)  ((freq-860.0)/0.005)

und in der Main.c:
Von:
rf12_init();  // ein paar Register setzen (z.B. CLK auf 10MHz)
rf12_setfreq(RF12FREQ(433.92))// Sende/Empfangsfrequenz auf 433,92MHz
rf12_setbandwidth(5, 1, 4);    // 200kHz Bandbreite,
rf12_setbaud(9600);    // 19200 baud
rf12_setpower(0, 6);    // 1mW Ausgangangsleistung, 120k

Zu:
rf12_init();  // ein paar Register setzen (z.B. CLK auf 10MHz)
rf12_setfreq(RF12FREQ(868.92))//??? Passende Nachkommastellen
rf12_setbandwidth(5, 1, 4);    // 200kHz Bandbreite,
rf12_setbaud(9600);    // 19200 baud
rf12_setpower(0, 6);    // 1mW Ausgangangsleistung, 120k

Hier noch einige Stellen bei denen ich weiß das sie geändert werden 
müssen ich allerdings nicht sicher bin wie !

In der RF12.c:
{
if (freq<96)        // 430,2400MHz
freq=96;
else if (freq>3903)      // 439,7575MHz
freq=3903;
rf12_trans(0xA000|freq);
}


Nun stehen wir allerdings vor einer Mauer da wir nicht wissen, wie die 
weiteren Parameter zu ändern sind bzw. welche Parameter noch geändert 
werden müssen!

Freuen auf eure Hilfe!
Gast #1149771
Lesenswert?

Hab noch einen zu ändernden Parameter in der RF12.c gefunden

Und zwar in der Funktion

void RF12_init(void)


rf12_trans(0x80D7);      // Enable FIFO
muss geändert werden da hier nach Datenblatt von Hope RF auch die 
Frequenz der Module und der Crystal load capacicator bestimmt werden!
http://www.hoperf.com/pdf/RF12_code.pdf

auf die 868Mhz eingestimmt muss es also so sein:

rf12_trans(0x80E7); // b1 wird auf 1 gesetzt und b0 auf 0 (868Mhz)

Allerdings weiß ich jetzt grade nicht was mit dem Crystal load 
capacicator von welchem im Datenblatt die rede ist gemeint ist und kann 
so diese Parameter nicht anpassen.

Kann mir hier vielleicht jemand helfen ?

Ansonsten müsste im Code denk ich alles gleichbleiben oder habe ich da 
noch etwas vergessen ?
Gast #1156120
Lesenswert?

Bin leider jetzt erst dazu gekommen Sender und Empfänger zu 
programmieren!
Leider funktioniert die Funkübertragung noch nicht. Vielleicht weiß ja 
jemand von euch was ich falsch mache?

Ich habe die Dateien so angepasst wie oben bereits beschrieben.

Die Empfänger und Sender Codes sind die von Ulrich Radig nur leicht 
verändert!

Für den Empfänger:
1
#include <avr/interrupt.h>
2
#include <avr/io.h>
3
#include <avr/usart.h>
4
#include <avr/rf12.h>
5
//------------------------------------------------------------------------------
6

7
int main (void) 
8
{
9
  unsigned char test[100];
10
  usart_init(9600); // Serielle Schnittstelle initialisieren
11
  DDRD = (1<<6)|(1<<4);
12

13
  PORTD |= (1<<6);
14
  PORTD |= (1<<4);
15
   
16
  rf12_init();          // ein paar Register setzen (z.B. CLK auf 10MHz)
17
  rf12_setfreq(RF12FREQ(868.3));  // Sende/Empfangsfrequenz auf 433,92MHz einstellen
18
  rf12_setbandwidth(5, 1, 4);    // 200kHz Bandbreite, -6dB Verstärkung, DRSSI threshold: -79dBm 
19
  rf12_setbaud(9600);        
20
  rf12_setpower(0, 6);      // 1mW Ausgangangsleistung, 120k
21
  usart_write("USB TEST\r\n");
22
  while(1)
23
  { 
24
  
25
  
26
  while(!(rf12_rxdata(test)));
27
  
28
  usart_write("%s",(char*)test);
29
  usart_write("Empfängt!!");
30
  usart_write("\r\n");
31
  }
32
}

und für den Sender
1
#include <avr/interrupt.h>
2
#include <avr/io.h>
3
#include <avr/rf12.h>
4
//------------------------------------------------------------------------------
5

6
int main (void) 
7
{
8
  
9
  unsigned char test[100]="test hallo\n";
10
  
11
  DDRB = (1<<3);
12
  PORTB = (1<<3); 
13

14
  rf12_init();          // ein paar Register setzen (z.B. CLK auf 10MHz)
15
  rf12_setfreq(RF12FREQ(868.3));  // Sende/Empfangsfrequenz auf 433,92MHz einstellen
16
  rf12_setbandwidth(5, 1, 4);    // 200kHz Bandbreite, -6dB Verstärkung, DRSSI threshold: -79dBm 
17
  rf12_setbaud(9600);        
18
  rf12_setpower(0, 6);      // 1mW Ausgangangsleistung, 120k
19
  
20
  while(1)
21
  { 
22
  
23
  rf12_txdata(test,13);
24
  for(long a = 0;a<100000;a++)
25
  {
26
  asm("nop");
27
  };
28
  }
29
}

Kann es den eigentlich auch eventuell daran liegen das ich keine Antenne 
nutze ?
Die Module liegen 3-10cm ausseinander.

Freue mich auf alle Antworten

gruß Tobias
Gast #1159980
Lesenswert?

Hab jetzt einfach mal versucht den Sendercode auf den Empfänger stick zu 
spielen um über die serielle Schnitstelle zu sehen was passiert:
Code wie oben hier nur die Neuerung:
1
 while(1)
2

3
     {
4

5
   
6
usart_write("sendet...");
7
   rf12_txdata(test,13);
8

9
   for(long a = 0;a<100000;a++)
10
{
11
asm("nop");
12
usart_write("nop...");
13
};
14
usart_write("gesendet...")
15
   }
16

17
}

Nun bekomm ich über die serielle schnittstelle allerdings nur nop...'s
Und nop heißt ja quasi nichtstun bzw. abwarten.
Ich bekomm zwischen den ganzen nops kein einziges gesendet raus
Hab ich irgendwie nen Denkfehler drin und der Darf beim senden gar nich 
aus der Schleife kommen ? findet eventuell eine abfrage statt ob über 
haupt ein empfäger vorhanden ist ?
Oder ist das wirklich nich normal und er sedet einfach aus irgendeinem 
grund nicht!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren