www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit RFM12B


Autor: Pirker (Gast)
Datum:

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

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.