mikrocontroller.net

Forum: HF, Funk und Felder RFM12 Frequenz ändern


Autor: max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen

Ich habe diese Woche endlich (nach 2 Wochen) meine beiden Funkmodule von 
Pollin erhalten, rfm12 für 868MHz. Da ich mit diesen Modulen noch 
garnichts gemacht habe, allerdings die Datenblätter schon durch habe und 
es eigentlich richtig sein müsste was ich gemacht habe... nunja, es 
klappt nicht so wie gewünscht.

Als Programm nehme ich ein Beispielprogramm aus der Elektor welches für 
beide Module (433 und 868) funktionieren soll. Hier ist es
$regfile = "m32def.dat"
$hwstack = 32
$swstack = 10
$framesize = 40

'$crystal = 11059200
$crystal = 8000000
$baud = 19200

Nsel Alias Portb.4
Sdi Alias Portb.5
Sdo Alias Pinb.6
Sck Alias Portb.7

Dim D As Word
Dim Data_in(10) As Byte
Dim Data_out(10) As Byte
Dim N As Byte
Dim Timeout As Word
Dim T As Word
Dim Tt As Word
Dim Freq As Single

Declare Sub Send_rfm12
Declare Sub Receive_rfm12
Declare Sub Freq_rfm12
Declare Sub Wait_rfm12
Declare Function Spi16(byval Dout As Word) As Word

Config Nsel = Output
Config Sdi = Output
Config Sck = Output
Config Portc = Output
Porta = &HFF

'Init
Nsel = 1
Sck = 0
'D = Spi16(&H80d7) ' El , Ef , 11.5pf, 433 MHz band
D = Spi16(&H80e7) ' El , Ef , 11.5pf, 868 MHz band
D = Spi16(&H82d9) '!er , !ebb , Et , Es , Ex , !eb , !ew , Dc
D = Spi16(&Ha67c) ' 434,15 MHz / 868,3 MHz
D = Spi16(&Hc647) ' 4.8kbps
D = Spi16(&H94a4) ' Vdi , Fast , 134 kHz , 0db , -79dbm
D = Spi16(&Hc2ac) ' Al , !ml , Dig , Dqd4
D = Spi16(&Hca81) ' Fifo8 , Sync , !ff , Dr
D = Spi16(&Hc483) ' @pwr , No Rstric , !st , !fi , Oe , En
D = Spi16(&H9850) ' 90 kHz , power - 0 dB
D = Spi16(&He000) '
D = Spi16(&Hc800) '
D = Spi16(&Hc000) ' 1 MHz , 2.2V

Freq = 868.300
Freq_rfm12

'start transmitter, no data
'Goto Test1:

'transmit data
'Goto Test2:

'transmit key data
'Goto Test3:

'start receiver, all data
'Goto Test4:

'start receiver, matched data
'Goto Test5:


Do
For N = 1 To 10
Data_out(n) = N
Next N
Send_rfm12
Waitms 500
For N = 1 To 10
Data_in(n) = 0
Next N
Timeout = 400 + Rnd(1000)
Receive_rfm12
For N = 1 To 10
Print Data_in(n);
Print " ";
Next N
Waitms 700
Loop


Sub Freq_rfm12
If Freq < 800 Then Freq = Freq * 2
Freq = Freq - 860
D = Freq / 0.0050
If D < 96 Then D = 96
If D > 3903 Then D = 3903
D = D + &HA000
D = Spi16(d)
End Sub


Sub Send_rfm12
D = Spi16(&H8238)
Wait_rfm12
D = Spi16(&Hb8aa)
Wait_rfm12
D = Spi16(&Hb8aa)
Wait_rfm12
D = Spi16(&Hb8aa)
Wait_rfm12
D = Spi16(&Hb82d)
Wait_rfm12
D = Spi16(&Hb8d4)
For N = 1 To 10
Wait_rfm12
D = &HB800 + Data_out(n)
D = Spi16(d)
Next N
Wait_rfm12
D = Spi16(&Hb8aa)
Wait_rfm12
D = Spi16(&Hb8aa)
Wait_rfm12
D = Spi16(&H8208)
End Sub

Sub Wait_rfm12
Nsel = 0
Do
Loop Until Sdo = 1
End Sub


Sub Receive_rfm12
Tt = Timeout * 10
D = Spi16(&H82c8)
D = Spi16(&Hca83)
For N = 1 To 10
Nsel = 0
T = 0
Do
T = T + 1
Waitus 100
If T > Tt Then Goto Nosignal
Loop Until Sdo = 1
D = Spi16(&Hb000)
Data_in(n) = D
Next N
Nosignal:
D = Spi16(&H8208)
End Sub


Function Spi16(byval Dout As Word) As Word
Local Nspi As Integer
Local Dspi As Integer
Local Dsdo As Word
Nsel = 0
Dsdo = 0
For Nspi = 1 To 16
Dspi = Dout And &H8000
If Dspi = 0 Then
Sdi = 0
Else
Sdi = 1
End If
Dout = Dout * 2
Dsdo = Dsdo * 2
Dsdo = Dsdo + Sdo
Sck = 1
Waitus 5
Sck = 0
Next Nspi
Nsel = 1
Spi16 = Dsdo
End Function



'transceiver tests

'start transmitter, no data
Test1:
D = Spi16(&H8238)
Do
Loop


'transmit data
Test2:
D = Spi16(&H8238)
Do
Wait_rfm12
D = Spi16(&Hb8aa)
Loop


'transmit key data
Test3:
D = Spi16(&H8238)
Do
Wait_rfm12
D = Spi16(&Hb82d)
Wait_rfm12
D = Spi16(&Hb8d4)
Loop


'start receiver, all data
Test4:
D = Spi16(&H82c8)
D = Spi16(&Hca87)
For N = 1 To 100
Wait_rfm12
D = Spi16(&Hb000)
Data_in(n) = D
Print Chr(d);
Next N
Do
Loop


'start receiver, matched data
Test5:
D = Spi16(&H82c8)
D = Spi16(&Hca83)
For N = 1 To 100
Wait_rfm12
D = Spi16(&Hb000)
Data_in(n) = D
Print Chr(d);
Next N
Do
Loop 

Nun habe ich es so genommen und auf meinen mega32 geschrieben, 
allerdings crystal auf 16000000 geändert da ich einen 16mhz quarz 
verwende. Dies ist mein Empfänger.

Als Sender benutze ich aktuell einen Mega8 mit demselben Programm. 
Jedoch oben auf m8def und ebenfalls 16mhz geändert, die Portbelegung auf
Nsel Alias Portb.4
Sdi Alias Portb.5
Sdo Alias Pinb.2
Sck Alias Portb.3

Und die Zeile Porta = &HFF deaktiviert durch Kommentar.

Soweit sogut, der Sender sendet (was auch sonst :P) und mein Empfänger 
zeigt mir was er empfängt über COM1 und Putty brav an. Funktioniert! :)
0 1 2 3 4 5 6 7 8 9 kommt an, sobald ich den Sender ausschalte werdens 
10 Nullen.
Sooo... schön und gut. Da man aber nicht gerade Ärgern mit der 
Bundesnetzagentur haben möchte informiert sich der Pflichtbewusste 
Anwender natürlich über die Frequenzen die er benutzen darf, ich würde 
gerne in dem Bereich j) arbeiten da dort der Duty cycle auf 100% steht.
Hier der Auszug aus dem vor mir liegenden Ausdruck:

Frequenzbereich in MHz: j) 869,700-870,000
maximale Kanalbandbreite: keine Einschränkung
Maximale Sendeleistung: 5mW
Relative Frequenzbelegungsdauer: 100%

Nach etwas hinundher rechnen und Bemühen von Maple um die schönen 
Formeln aus dem Datenblatt umzustellen (ja Maschinenbaustudenten von 
heute sind faul :D) kam ich darauf das ich die Zeilen
D = Spi16(&Ha67c) ' 434,15 MHz / 868,3 MHz
Freq = 868.300

wie folgt ändern muss
D = Spi16(&Ha7b2) ' 869,850 MHz
Freq = 869.850

Auf A7B2 komme ich so:
Wunschfrequenz= 869.850MHz
Mit der Formel aus dem Datenblatt lande ich bei 1970.000
Die in Binär sieht so aus 011110110010
die 1010 davor ergibt 1010011110110011
was dann 10100111 = A7h
und 10110010 = B2h entspricht
somit also A7B2

Leider kommt dann nach der Umstellung der Frequenzen nichts mehr an, nur 
die 10 Nullen :(

Weiss jemand Rat?

Gruß

ps: ich wollte eigentlich den Code in
 packen aber da färbte er in der Vorschau nur die Zahlen ein :(

Autor: max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Niemand eine Idee? Mein Vorgehen müsste ja richtig sein, dennoch 
funktioniert es nicht nach der Frequenzumstellung :(

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.