www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik RFM12 868 Mhz umstellen


Autor: Tobias und Ole (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

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!

Autor: Christoph Kessler (db1uq) (christoph_kessler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die 96 und 3903 ändern sich nicht mit der Frequenz, das gilt für alle 
vier Bereiche. Im Kommentar muß dann eben 868MHz +96 bzw. 3903 * 5kHz 
stehen

Autor: Tobias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fehlen den sonst noch irgendwelche Parameter?

Kann leider erst morgen testen ob es vielleicht auch so schon 
funktioniert.

Autor: Christoph Kessler (db1uq) (christoph_kessler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://www.mikrocontroller.net/articles/RFM12#Conf...
die Bandumschaltung fehlt natürlich noch, zwei Bit im Configuration 
Register

"b... = Zu nutzende Basisfrequenz (00=315MHz / 01=433MHz / 10=868MHz / 
11=915MHz"

und das Modul sollte das Antennenanpassnetzwerk für 868 MHz haben, nur 
darin unterscheiden sich die Versionen -433 und -868

Autor: Jörg B. (manos)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tobias und Ole wrote:
> rf12_setbaud(9600);    // 19200 baud
Auch wenn das jetzt nur am Rande zum Thema gehört finde ich den 
Kommentar möglicherweise fragwürdig...

Autor: Tobias und Ole (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist erstmal nicht wichtig Kommentare kann man löschen ;)

Autor: Helmut -dc3yc (dc3yc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und schaut bitte bei der BNetzA nach, auf welcher Frequenz eure 
Betriebsart erlaubt ist! Die Frequenzen werden unterschieden nach der 
Einschaltdauer der Sender.

Servus,
Helmut.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tobias und Ole wrote:

> Ist erstmal nicht wichtig Kommentare kann man löschen ;)

Kann man schon. Tut man oft nicht. Und so stehen zur Erheiterung 
derjenigen, die fremdem Code pflegen müssen, solche Erleuchtungen oft 
noch nach Jahren drin.

Autor: Tobias und Ole (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erstmal muss es laufen ;)

Autor: Tobias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das hier dürfte das Datenblatt zu dem Chip sein:

https://www.silabs.com/Support%20Documents/Technic...

Der Chip hat die Lastkapazitäten für den Quarz intern, und diese sind 
konfigurierbar -> Datenblatt lesen. Aber wenn der Quarz nicht geändert 
wird, besteht kein Grund, die Einstellung zu ändern...

Ralf

Autor: Tobias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
#include <avr/interrupt.h>
#include <avr/io.h>
#include <avr/usart.h>
#include <avr/rf12.h>
//------------------------------------------------------------------------------

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

  PORTD |= (1<<6);
  PORTD |= (1<<4);
   
  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);        
  rf12_setpower(0, 6);      // 1mW Ausgangangsleistung, 120k
  usart_write("USB TEST\r\n");
  while(1)
  { 
  
  
  while(!(rf12_rxdata(test)));
  
  usart_write("%s",(char*)test);
  usart_write("Empfängt!!");
  usart_write("\r\n");
  }
}


und für den Sender
#include <avr/interrupt.h>
#include <avr/io.h>
#include <avr/rf12.h>
//------------------------------------------------------------------------------

int main (void) 
{
  
  unsigned char test[100]="test hallo\n";
  
  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);        
  rf12_setpower(0, 6);      // 1mW Ausgangangsleistung, 120k
  
  while(1)
  { 
  
  rf12_txdata(test,13);
  for(long a = 0;a<100000;a++)
  {
  asm("nop");
  };
  }
}


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

Autor: Tobias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
 while(1)

     {

   
usart_write("sendet...");
   rf12_txdata(test,13);

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

}

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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.