Problem mit RFM12B

Gast #1550407
Lesenswert?
• ▲
▼
Hallo!

Ich versuche gerade eine RFM12B Funkstrecke zum laufen zu bringen. 
Leider funzt es nicht und ich bin ratlos!! :-(

Hier mal das Bascom Beispiel von Elektor das ich verwende:

für den Sender:

   Init_rfm12
   Freq = 868.300
   Freq_rfm12

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


'----------------------------------------------------------------------- 
-------------------------


Sub Init_rfm12
  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(&H94a0)                                         ' 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)                                         '9854??' 90 
kHz , power - 0 dB
  D = Spi16(&He000)                                         '
  D = Spi16(&Hc800)                                         '
  D = Spi16(&Hc000)                                         ' 1 MHz , 
2.2V
End Sub

'----------------------------------------------------------------------- 
-------------------------

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



für den Empfänger:

   Init_rfm12
   Freq = 868.300
   Freq_rfm12

   'start receiver, all data
   D = &H00AA
   Print #2 , Chr(d)

   Wait 1

      Test4:
      D = Spi16(&H82c8)
      D = Spi16(&Hca8b)
      Print #2 , ""
      For N = 1 To 100
        Wait_rfm12
        D = Spi16(&Hb000)
        Data_in(n) = D
        Print #2 , Chr(d)
      Next N
      Do
      Loop


'----------------------------------------------------------------------- 
-------------------------


Sub Init_rfm12
  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(&H94a0)                                         ' 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)                                         '9854??' 90 
kHz , power - 0 dB
  D = Spi16(&He000)                                         '
  D = Spi16(&Hc800)                                         '
  D = Spi16(&Hc000)                                         ' 1 MHz , 
2.2V
End Sub

'----------------------------------------------------------------------- 
-------------------------

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 ich mir dann die Daten anschaue die der Empfänger übermittelt 
(Filter nur auf &HD4 eingestellt), kommt dann das raus: &H00 &H2d &H00 
&HD4 &H00 .....

Wenn ich den empfänger aber auf &H2DD4 Filter einstelle, übermittelt er 
gar nichts mehr an die Serielle schnittstalle, da er bei Wait_RFM12 
hängen bleibt, weil der Filter nie Syncronisiert.

Was ist da los??? kann mir bitte jemand weiter helfen?!?!

Ich vermute mal, das der Sender nach oder vor jedem Byte nochmals ein 
Byte mit &H00 sendet, aber warum???


MFG Pirker

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.