Forum: HF, Funk und Felder RFM12 Lückenhafte Kommunikation


von Meisterlampe (Gast)


Lesenswert?

Nabend zusammen

Da ein anderer Thread mit dieser Problematik zu alt war wollte ich 
diesen nicht mehr ausgraben. Mein Problem ist das ich eine 
Funkverbindung mit 2 rfm12 modulen auf 869.850MHZ (100%dutycycle) 
aufbauen möchte. Das klappt soweit auch. Das Programm sendet ca alle 2 
Sekunden die Zahlen von 1 bis 10 und der Empfänger gibt diese per uart 
aus. Hier mal das Ergebnis:

2 Data in:
0 0 0 0 0 0 0 0 0 0
3 Data in:
0 0 0 0 0 0 0 0 0 0
4 Data in:
0 0 0 0 0 0 0 0 0 0
5 Data in:
0 0 0 0 0 0 0 0 0 0
6 Data in:
0 0 0 0 0 0 0 0 0 0
7 Data in:
0 0 0 0 0 0 0 0 0 0
8 Data in:
1 2 3 4 5 6 7 8 9 10
9 Data in:
0 0 0 0 0 0 0 0 0 0
10 Data in:
1 2 3 4 5 6 7 8 9 10
11 Data in:
0 0 0 0 0 0 0 0 0 0
12 Data in:
1 2 3 4 5 6 7 8 9 10
13 Data in:
0 0 0 0 0 0 0 0 0 0
14 Data in:
1 2 3 4 5 6 7 8 9 10
15 Data in:
0 0 0 0 0 0 0 0 0 0
16 Data in:
1 2 3 4 5 6 7 8 9 10
17 Data in:
1 2 3 4 5 6 7 8 9 10
18 Data in:
170 0 0 0 0 0 0 0 0 0
19 Data in:
0 0 0 0 0 0 0 0 0 0
20 Data in:
1 2 3 4 5 6 7 8 9 10
21 Data in:
1 2 3 4 5 6 7 8 9 10
22 Data in:
170 0 0 0 0 0 0 0 0 0
23 Data in:
1 2 3 4 5 6 7 8 9 10
24 Data in:
170 255 255 255 255 255 255 255 255 255
25 Data in:
255 255 255 255 255 255 255 255 255 255
26 Data in:
255 255 255 255 255 255 255 255 255 255
27 Data in:
255 255 255 255 191 255 255 255 255 255
28 Data in:
170 0 0 0 0 0 0 0 0 0
29 Data in:
1 2 3 4 5 6 7 8 9 10
30 Data in:
170 0 0 0 0 0 0 0 0 0
31 Data in:
1 2 3 4 5 6 7 8 9 10
32 Data in:
170 0 0 0 0 0 0 0 0 0
33 Data in:
0 0 0 0 0 0 0 0 0 0
34 Data in:
1 2 3 4 5 6 7 8 9 10
35 Data in:
170 0 0 0 0 0 0 0 0 0
36 Data in:
1 2 3 4 5 6 7 8 9 10
37 Data in:
170 0 0 0 0 0 0 0 0 0
38 Data in:
0 0 0 0 0 0 0 0 0 0
39 Data in:
1 2 3 4 5 6 7 8 9 10
40 Data in:
170 0 0 0 0 0 0 0 0 0
41 Data in:
0 0 0 0 0 0 0 0 0 0

Man sieht das fast abwechselnd die Zahlen ankommen, oder einfach 10 0 
ausgegeben werden. Hin und wieder taucht auch die Zahl 170 auf wobei mir 
der Ursprung dieses Werts noch nicht ganz klar ist.

Interessant ist auch (zumindest für mich) das sobald ich den Sender mal 
aus mache 255 empfangen wird. Könnte hier vielleicht meine Schaltung 
Schuld sein? Verbindung m8=>Modul wie im Programm ersichtlich, alle 
anderen Anschlüsse liegen offen (ja sie liegen wirklich offen rum)

Hier mal das Programm in Bascom Basic, die Software des Senders sieht 
gleich aus jedoch mit anderer Quarzfrequenz daher spare ich mir das 
diese hier zu posten.

$regfile = "m8def.dat"
$hwstack = 32
$swstack = 10
$framesize = 40

'$crystal = 11059200
$crystal = 4000000
$baud = 4800

Nsel Alias Portd.2
Sdi Alias Portb.3
Sdo Alias Pinb.4
Sck Alias Portb.5

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
Dim Count As Word
Count = 1
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 Sdo = Input
Config Portc = Output
'Porta = &HFF
Waitms 250                                                  'Kurz warten 
damit das Modul starten kann sicher ist sicher
'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 = 869.850
Freq_rfm12

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
Count = Count + 1
Print Count;
Print " Data in: "
For N = 1 To 10
Print Data_in(n);
Print " ";
Next N
Print ""
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


Wenn irgendjemandem etwas auffallen sollte bitte ich um Mitteilung, das 
treibt mich doch grade etwas in den Wahnsinn :(

Gruß

von Meisterlampe (Gast)


Lesenswert?

Hat denn Niemand eine Idee wieso

0 0 0 0 0 0 0 0 0 0

empfangen wird wenn der Sender aktiv ist, und

255 255 255 255 255 255 255 255 255 255

wenn der Sender aus ist? Das bedeutet doch das der Empfänger ein Signal 
bekommt, aber wie weiter?

Einen haareraufenden Gruß

von Michael U. (amiga)


Lesenswert?

Hallo,

habe mich nicht durch den Kram gewühlt (nichts mit Bascom am Hut...).

Wenn Du Dein Telegramm komplett empfangen hast, muß Du den FIFO aus- und 
wieder einschalten, damit der RFM12 neu auf die Syncronisation wartet.
Machst Du das nicht, bleibt er auf Empfang und empfängt allen möglichen 
Müll.

rfm12_send_cmd(0xCA81);                   // set FIFO mode, FIFO off
rfm12_send_cmd(0xCA83);                   // enable FIFO

Mußt Du Dir selber nach Bascom tragen...

Gruß aus Berlin
Michael

von Meisterlampe (Gast)


Lesenswert?

Hi

Das ist natürlich mal eine Idee, werde ich ausproieren sobald ich aus 
der Uni raus bin. Danke schonmal :)

Gruß

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.