-         

Ergebnis 1 bis 5 von 5

Thema: RFM12 Funkmodul Baudrate einstellen

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    19.07.2011
    Beiträge
    48

    RFM12 Funkmodul Baudrate einstellen

    Anzeige

    Hallo,
    ich habe 2 RFM12 Funkmodule mit dem Code von Elektor getestet. Nun habe ich eine Verständnissfrage zur Baudrateneinstellung.
    Wie stellt man die Baudrate für die Funkübertragung ein bzw was muss ich ändern um zb. auf 9600 Baud zu kommen?

    Code:
    '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 = 868.300
    bzw. hier der ganze Code:
    Code:
    $regfile = "m32def.dat"
    $hwstack = 32
    $swstack = 10
    $framesize = 40
    
    $crystal = 14745600
    $baud = 9600
    
    
    Nsel Alias Portb.4
    Sdi Alias Portb.5
    Sdo Alias Pinb.6
    Sck Alias Portb.7
    
    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
    
    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 Portc = Output
    Porta = &HFF
    
    '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 = 868.300
      Freq_rfm12
    
    'start transmitter, no data
    'Goto Test1:
    
    'transmit  data
    'Goto Test2:
    
    'transmit key data
    'Goto Test3:
    
    'start receiver, all data
    'Goto Test4:
    
    'start receiver, matched data
    'Goto Test5:
    
    
     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
        For N = 1 To 10
           Print Data_in(n) ; " "
           'Print " ";
        Next N
        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
    
    
    
    'transceiver tests
    
    'start transmitter, no data
    Test1:
      D = Spi16(&H8238)
      Do
      Loop
    
    
      'transmit data
    Test2:
      D = Spi16(&H8238)
      Do
        Wait_rfm12
        D = Spi16(&Hb8aa)
      Loop
    
    
      'transmit key data
    Test3:
      D = Spi16(&H8238)
      Do
        Wait_rfm12
        D = Spi16(&Hb82d)
        Wait_rfm12
        D = Spi16(&Hb8d4)
      Loop
    
    
    'start receiver, all data
    Test4:
      D = Spi16(&H82c8)
      D = Spi16(&Hca87)
      For N = 1 To 100
        Wait_rfm12
        D = Spi16(&Hb000)
        Data_in(n) = D
        Print Chr(d);
      Next N
      Do
      Loop
    
    
    'start receiver, matched data
    Test5:
        D = Spi16(&H82c8)
        D = Spi16(&Hca83)
        For N = 1 To 100
          Wait_rfm12
          D = Spi16(&Hb000)
          Data_in(n) = D
          Print Chr(d);
        Next N
      Do
      Loop

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Kandel
    Alter
    29
    Beiträge
    1.220
    Schon Mal ins Datenblatt des RF12 gesehen? Nein? Solltest du dringend nachholen. Die Codebeispiele sind zwar murks, aber die Registerbeschreibung relativ korrekt. Nimm dir Mal Seite 16, Abschnitt "4. Data Rate Command" vor.

    mfG
    Markus

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    19.07.2011
    Beiträge
    48

    Funkmodul RFM12 Baudrate ausrechnen - gelöst

    ja, in das Datenblatt habe ich bereits gesehen - hat mir aber nicht wirklich weiter geholfen.
    Nachdem ich mich mit einem Bekannten zusammengesetzt habe, ist folgendes herausgekommen: (Erklärung falls sich noch einer damit versuchen möchte)

    Datenblatt S.14 Punkt 4: http://www.silabs.com/Support%20Docu...ocs/Si4420.pdf

    Dieser Wert ( D = Spi16(&Hc647) aus Quellcode ) wird so umgerechnet:

    &H - deutet auf einen Hexwert hin
    C6 - wird nicht weiter erklärt und wird immer benötigt
    47 ist der eigentliche Hexwert und ist 71 als Dezimalwert

    71 wird nun als Wert für "R" in die Formel aus dem Datenblatt eingesetzt:
    (CS wird als Vorteiler benutzt bei Zahlen > HEX 79 dh. Baudrate kleiner 4,3kbps bei Hex kleiner 80 ist CS = 0 ! )

    BaudRate = 10000 / 29 / (R+1) / (1+cs*7) [kbps]
    BaudRate = 10000 / 29 / (71+1) / (1+0*7) [kbps]

    somit steht der Hexwert 47 für eine Übertragung von 4,7893...kbps

    HEX 47 = 4,789 kbps
    HEX 23 = 9,578 kbps
    HEX 11 = 19,1571 kbps
    HEX 8 = 38,3142 kbps
    HEX 5 = 57,4713 kbps

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Kandel
    Alter
    29
    Beiträge
    1.220
    Im Allgemeinen ist es eine gute Idee, das Original-Datenblatt zu verwenden. Der RF12 ist wohl eigentlich ein Si4420, das Datenblatt von HopeRF ist aber in der Regel ausreichend. Und speziell die von dir angegebenen Formeln stehen auch in diesem Datenblatt. Die ersten 8 Bits (C6) sind die Kommandosequenz die dem Modul verrät, wie die nachfolgenden Daten zu interpretieren sind. Das nächste Bit ist "cs", die restlichen 7 Bits der Wert "R". Du wirst dir angewöhnen müssen, wirklich an die einzelnen Bits ranzugehen, da in einigen Registern drei und mehr Parameter gespeichert sind.
    Wer so nah an der Hardware arbeitet, kommt an der Bitpopelei kaum vorbei. Umrechnungen Binär<->Hexadezimal<->Dezimal sollte man da beherrschen.

    mfG
    Markus

  5. #5
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    66
    Beiträge
    10.969
    Hallo!

    Sonst muss man sich leider einen Taschenrechner kaufen, der das schnell umrechnen kann.
    MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!

Ähnliche Themen

  1. RFM12 Funkmodul für IO Übertragung?
    Von Powell im Forum Elektronik
    Antworten: 5
    Letzter Beitrag: 15.04.2011, 18:49
  2. Funkmodul RFM12
    Von Thomas$ im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 31
    Letzter Beitrag: 31.07.2009, 11:55
  3. Ansteuerung von Funkmodul RFM12
    Von BurningWave im Forum C - Programmierung (GCC u.a.)
    Antworten: 53
    Letzter Beitrag: 04.09.2008, 13:55
  4. Wie kann ich bei RN-LCD die Baudrate auf 4800 einstellen
    Von DirkP im Forum AVR Hardwarethemen
    Antworten: 1
    Letzter Beitrag: 22.01.2008, 17:49
  5. RFM12 Funkmodul mit ADUC831
    Von max_racing im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 0
    Letzter Beitrag: 29.10.2007, 18:47

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •