Forum: HF, Funk und Felder RFM12 Frequenz ändern


von max (Gast)


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
1
$regfile = "m32def.dat"
2
$hwstack = 32
3
$swstack = 10
4
$framesize = 40
5
6
'$crystal = 11059200
7
$crystal = 8000000
8
$baud = 19200
9
10
Nsel Alias Portb.4
11
Sdi Alias Portb.5
12
Sdo Alias Pinb.6
13
Sck Alias Portb.7
14
15
Dim D As Word
16
Dim Data_in(10) As Byte
17
Dim Data_out(10) As Byte
18
Dim N As Byte
19
Dim Timeout As Word
20
Dim T As Word
21
Dim Tt As Word
22
Dim Freq As Single
23
24
Declare Sub Send_rfm12
25
Declare Sub Receive_rfm12
26
Declare Sub Freq_rfm12
27
Declare Sub Wait_rfm12
28
Declare Function Spi16(byval Dout As Word) As Word
29
30
Config Nsel = Output
31
Config Sdi = Output
32
Config Sck = Output
33
Config Portc = Output
34
Porta = &HFF
35
36
'Init
37
Nsel = 1
38
Sck = 0
39
'D = Spi16(&H80d7) ' El , Ef , 11.5pf, 433 MHz band
40
D = Spi16(&H80e7) ' El , Ef , 11.5pf, 868 MHz band
41
D = Spi16(&H82d9) '!er , !ebb , Et , Es , Ex , !eb , !ew , Dc
42
D = Spi16(&Ha67c) ' 434,15 MHz / 868,3 MHz
43
D = Spi16(&Hc647) ' 4.8kbps
44
D = Spi16(&H94a4) ' Vdi , Fast , 134 kHz , 0db , -79dbm
45
D = Spi16(&Hc2ac) ' Al , !ml , Dig , Dqd4
46
D = Spi16(&Hca81) ' Fifo8 , Sync , !ff , Dr
47
D = Spi16(&Hc483) ' @pwr , No Rstric , !st , !fi , Oe , En
48
D = Spi16(&H9850) ' 90 kHz , power - 0 dB
49
D = Spi16(&He000) '
50
D = Spi16(&Hc800) '
51
D = Spi16(&Hc000) ' 1 MHz , 2.2V
52
53
Freq = 868.300
54
Freq_rfm12
55
56
'start transmitter, no data
57
'Goto Test1:
58
59
'transmit data
60
'Goto Test2:
61
62
'transmit key data
63
'Goto Test3:
64
65
'start receiver, all data
66
'Goto Test4:
67
68
'start receiver, matched data
69
'Goto Test5:
70
71
72
Do
73
For N = 1 To 10
74
Data_out(n) = N
75
Next N
76
Send_rfm12
77
Waitms 500
78
For N = 1 To 10
79
Data_in(n) = 0
80
Next N
81
Timeout = 400 + Rnd(1000)
82
Receive_rfm12
83
For N = 1 To 10
84
Print Data_in(n);
85
Print " ";
86
Next N
87
Waitms 700
88
Loop
89
90
91
Sub Freq_rfm12
92
If Freq < 800 Then Freq = Freq * 2
93
Freq = Freq - 860
94
D = Freq / 0.0050
95
If D < 96 Then D = 96
96
If D > 3903 Then D = 3903
97
D = D + &HA000
98
D = Spi16(d)
99
End Sub
100
101
102
Sub Send_rfm12
103
D = Spi16(&H8238)
104
Wait_rfm12
105
D = Spi16(&Hb8aa)
106
Wait_rfm12
107
D = Spi16(&Hb8aa)
108
Wait_rfm12
109
D = Spi16(&Hb8aa)
110
Wait_rfm12
111
D = Spi16(&Hb82d)
112
Wait_rfm12
113
D = Spi16(&Hb8d4)
114
For N = 1 To 10
115
Wait_rfm12
116
D = &HB800 + Data_out(n)
117
D = Spi16(d)
118
Next N
119
Wait_rfm12
120
D = Spi16(&Hb8aa)
121
Wait_rfm12
122
D = Spi16(&Hb8aa)
123
Wait_rfm12
124
D = Spi16(&H8208)
125
End Sub
126
127
Sub Wait_rfm12
128
Nsel = 0
129
Do
130
Loop Until Sdo = 1
131
End Sub
132
133
134
Sub Receive_rfm12
135
Tt = Timeout * 10
136
D = Spi16(&H82c8)
137
D = Spi16(&Hca83)
138
For N = 1 To 10
139
Nsel = 0
140
T = 0
141
Do
142
T = T + 1
143
Waitus 100
144
If T > Tt Then Goto Nosignal
145
Loop Until Sdo = 1
146
D = Spi16(&Hb000)
147
Data_in(n) = D
148
Next N
149
Nosignal:
150
D = Spi16(&H8208)
151
End Sub
152
153
154
Function Spi16(byval Dout As Word) As Word
155
Local Nspi As Integer
156
Local Dspi As Integer
157
Local Dsdo As Word
158
Nsel = 0
159
Dsdo = 0
160
For Nspi = 1 To 16
161
Dspi = Dout And &H8000
162
If Dspi = 0 Then
163
Sdi = 0
164
Else
165
Sdi = 1
166
End If
167
Dout = Dout * 2
168
Dsdo = Dsdo * 2
169
Dsdo = Dsdo + Sdo
170
Sck = 1
171
Waitus 5
172
Sck = 0
173
Next Nspi
174
Nsel = 1
175
Spi16 = Dsdo
176
End Function
177
178
179
180
'transceiver tests
181
182
'start transmitter, no data
183
Test1:
184
D = Spi16(&H8238)
185
Do
186
Loop
187
188
189
'transmit data
190
Test2:
191
D = Spi16(&H8238)
192
Do
193
Wait_rfm12
194
D = Spi16(&Hb8aa)
195
Loop
196
197
198
'transmit key data
199
Test3:
200
D = Spi16(&H8238)
201
Do
202
Wait_rfm12
203
D = Spi16(&Hb82d)
204
Wait_rfm12
205
D = Spi16(&Hb8d4)
206
Loop
207
208
209
'start receiver, all data
210
Test4:
211
D = Spi16(&H82c8)
212
D = Spi16(&Hca87)
213
For N = 1 To 100
214
Wait_rfm12
215
D = Spi16(&Hb000)
216
Data_in(n) = D
217
Print Chr(d);
218
Next N
219
Do
220
Loop
221
222
223
'start receiver, matched data
224
Test5:
225
D = Spi16(&H82c8)
226
D = Spi16(&Hca83)
227
For N = 1 To 100
228
Wait_rfm12
229
D = Spi16(&Hb000)
230
Data_in(n) = D
231
Print Chr(d);
232
Next N
233
Do
234
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
1
Nsel Alias Portb.4
2
Sdi Alias Portb.5
3
Sdo Alias Pinb.2
4
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
1
D = Spi16(&Ha67c) ' 434,15 MHz / 868,3 MHz
2
Freq = 868.300

wie folgt ändern muss
1
D = Spi16(&Ha7b2) ' 869,850 MHz
2
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 :(

von max (Gast)


Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.