www.mikrocontroller.net

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


Autor: Meisterlampe (Gast)
Datum:

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

Autor: Meisterlampe (Gast)
Datum:

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

Autor: Michael U. (amiga)
Datum:

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

Autor: Meisterlampe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

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

Gruß

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.