- Akku Tests und Balkonkraftwerk Speicher         
Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 28

Thema: RMF 01 und RMF 02 Sender + Empfänger

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    03.04.2009
    Ort
    ulm
    Beiträge
    35

    RMF 01 und RMF 02 Sender + Empfänger

    Anzeige

    LiFePo4 Akku selber bauen - Video
    hallo
    ich habe mich hier im Forum angemeldet da ich ein Auto umbauen möchte und ich möchte da ne Fernsteuerung dran bauen und dann eben rechts link vor zurück und 2 oder 3 geschwindigkeiten einstellen die ich dann auf Knopfdruck ändern kann. Ich bin bei der Suche nach Sendern und Empfängermodulen auf diese 2 RMF 01 und RMF 02 von pollin Artikelnummer 810 047 und 810 048 gestoßen.
    Allerdings ist es so das ich von SPI noch nicht viel verstehe aber nun doch schon seit Weihnachten mit Mikrocontrollern arbeite. Ich habe auch im Bascom Forum ein Code gefunden allerdings kann ich mit diesem nicht viel anfangen
    ich wäre sehr dankbar wenn mir jemand Ansätze geben könnte wie ich die Sende und Empfangsroutine gestalen muss und welche Bits ich setzen muss bzw wie ich den Sender und Empfänger initialisieren muss??
    Wenn jemand schon ein Fertigen Code hat von früher oder eine Seite kennt wo sowas drauf is was mir helfen kann bin ich sehr sehr dankbar

    Lg
    baubau

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.221
    Da hast Du Dir ja einiges Vorgenommen!
    Die erfordrlichen Bits stehen im Datenblatt.
    Ich weiß, das von Pollin ist nicht besonders, lad Dir die Datenblätter von Hope-RF für die Module RF01 und RF02 runter.
    Da ist alles wichtige erklärt.
    Im Roboternetzforum sind bestimmt über 100 Einträge zu diesen Modulen mit Quelltexten Schaltplänen und allem was Wissenswert ist, benutz mal die Suche.
    Zu einem Quellcode für diese Module gehört immer ein passender Schaltplan dazu.
    Man kann diese Module in zig verschiedenen Varianten betreiben, deshalb gehört zu jeder Beschaltung auch ein passender Quellcode.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    03.04.2009
    Ort
    ulm
    Beiträge
    35
    ok danke ich werd mi das datenblatt mal runterladen und im Forum suchen

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    03.04.2009
    Ort
    ulm
    Beiträge
    35
    naja im forum gibts ja nich so viel was mich weiterbringt. Sind die beiden RMF 01 und RMF 02 schon gut geeignet oder gibt es welche die sich leichter ansteuern lassen??
    Ich möchte nur 8 Tasten übertragen. Ich kann eben mit den Quellcodes aus dem Netz nich sonderlich viel anfangen.
    Wenn jemand ein Code hat oder eine Seite weis wi sowas drauf ist dann kann er es ja hier posten
    danke

    lg
    baubau

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.07.2004
    Ort
    Südhessen
    Beiträge
    1.312
    Die Module heißen RFM, nicht RMF. Du kannst ja gleich das RFM12 nehmen, das ist ein kombinierter Sender und Empfänger. Und für diesen gibts dutzendweise Projekte, Quellcodes und Hilfen im Forum und im Internet.

    Diese Module sind die günstigsten und sind sehr einfach. Wenn Du etwas noch einfacheres willst, solltest Du eine fertige Funklösung für 30-40 Euro nehmen.

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    03.04.2009
    Ort
    ulm
    Beiträge
    35
    ok ich werde mal nach quellcodes für RFM12 suchen
    Ich möchte das wenn möglich selbst bauen

  7. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    28.03.2008
    Ort
    Huntlosen
    Alter
    32
    Beiträge
    391
    ich habe dazu auch ma ne frage.
    Muss ich das Funkmodul erst configurieren, oder reicht das, wenn ich einfach ein SPI Bus Configuriere und den dann da anschließ?

  8. #8
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.05.2007
    Beiträge
    329
    Hallo baubau,

    in Anlehnung an http://www.elektor.de/jahrgang/2009/januar/bei-uns-hat-s-gefunkt!.769040.lynkx , hier eine Version, die für den Pollin RFM12 funktioniert:

    Sender:
    Code:
    'Elektor RFM12 Sender
    
    $regfile = "m8def.dat"
    $hwstack = 32
    $swstack = 10
    $framesize = 40
    
    $crystal = 16000000
    $baud = 19200
    
    Nsel Alias Portb.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
    
    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.5 = Output
    Config Pinc.4 = Input
    Pinc.4 = 1
    
    '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
    
    
     Do
        For N = 1 To 10
          Data_out(n) = 6
        Next N
        If Pinc.4 = 0 Then
          Data_out(1) = 5
          Data_out(2) = 12
          Data_out(3) = 6
          Data_out(4) = 1
          Data_out(5) = 3
        End If
        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
    Empfänger:
    Code:
    'Elektor RFM12 Empfänger
    
    $regfile = "m8def.dat"
    $hwstack = 32
    $swstack = 10
    $framesize = 40
    
    $crystal = 16000000
    $baud = 19200
    
    Nsel Alias Portb.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
    
    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
    
    '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
    
     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
        If Data_in(1) = 5 And Data_in(2) = 12 And Data_in(3) = 6 And Data_in(4) = 1 And Data_in(5) = 3 Then
         Portc.5 = 1
         Else
         Portc.5 = 0
         End If
     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
    Natürlich kann der Code noch weiter für reines senden und empfangen vereinfacht werden.

    Günter

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.221
    Muss ich das Funkmodul erst configurieren, oder reicht das, wenn ich einfach ein SPI Bus Configuriere und den dann da anschließ?
    Der SPI Bus stellt ja nur die Verbindung zu dem Funkmodul her.
    Die Konfiguration der einzelnen Register innerhalb des Funkmoduls musst Du natürlich in deiner Software machen.
    Die benötigten Werte können dann über die SPI versandt werden.

    Da man einige Daten ohne Takt an den SPI Bus übergeben kann, würd ich empfehlen die Bausteine über eine Software SPI anzusprechen.

    Will man dann wirklich einen Sendestring über die SPI Schnittstelle schicken, kann man im Prinzip die selben Routinen wie für die Kommandoübertragung nutzen, man lässt nur den Takt weg.

    Anbei mal beispielhaft, welche Bytes in so einem RFM Sendemodul gesetzt werden können / müssen.
    Code:
    volatile unsigned char uc_frequ[2]; /* Frequenz tuningword */
        uc_frequ[1]=ui_frequ[uc_kanal]/256;
        uc_frequ[1]|=0b10100000;
        uc_frequ[0]=ui_frequ[uc_kanal]%256;
        /* Configuration Setting: 433MHz, CLK 5MHz, 11,5pf Kapaz., +/-60kHz */
        #asm ("cbi portb,nsel");
        sendbyte(0b10001110);
        sendbyte(0b01100000); 
        #asm ("sbi portb,nsel");
        #asm ("nop");
        
        /* Frequency Setting: eingestellter Kanal*/
        #asm ("cbi portb,nsel");
        sendbyte(uc_frequ[1]);
        sendbyte(uc_frequ[0]); 
        #asm ("sbi portb,nsel");
        #asm ("nop");
        
        /* Output Power Command: Max Power */
        #asm ("cbi portb,nsel");
        sendbyte(0b10110000);
        #asm ("sbi portb,nsel");
        #asm ("nop");
           
        /* Data Rate Command: 2400 bit/s */
        #asm ("cbi portb,nsel");
        sendbyte(0b11001000);
        sendbyte(0b10001111); 
        #asm ("sbi portb,nsel");
        #asm ("nop");
        
        /* Low Batt + Sync Command: enable Sync Circuit */
        #asm ("cbi portb,nsel");
        sendbyte(0b11000010);
        sendbyte(0b00100000); 
        #asm ("sbi portb,nsel");
        #asm ("nop");
        
        /* PLL Setting Command: 0xD240 up to 19,2kbit/s*/
        #asm ("cbi portb,nsel");
        sendbyte(0b11010010);
        sendbyte(0b01000000); 
        #asm ("sbi portb,nsel");
        #asm ("nop");
            
        /* Power Managment Command= Enable Clock; disable Synthesizer; disable pow. Ampl. */
        #asm ("cbi portb,nsel");
        sendbyte(0b11000000);
        sendbyte(0b00100000); 
        #asm ("sbi portb,nsel");
    Wie man sieht ist das doch eine Ganze Menge.
    Es gibt da leider keinen allgemeingültigen Code, da die Module sehr viele Möglichkeiten bieten, die Funkstrecke aufzubauen.
    Das geht mit der Baudrate los und hört beim Frequenzhub der FSK auf.
    Wenn man versteht, welche Parameter was bewirken, kann man die Module optimal auf seine Zwecke anpassen. Der Code passt aber dann nur für diese eine Anwendung gut.

    Beim Empfänger sieht das ähnlich aus, allerdings hat dieser Baustein auch noch einen Zwischenspeicher, der FiFo genannt wird.
    Dieser FiFo muss, bevor er Daten aufnimmt "aufgeschlossen" werden.
    Das passsiert mit einer Codesequenz, die da lautet 0x2D 0xD4.
    Vorher kommt noch eine Präambel, die zur Synchronisation des Empfängers dient.

    Das alles steht in den entsprechenden Datenblättern.
    Ich weiß, die sind nicht besonders gut gemacht, aber letztlich der Weg, der zum gewünschten Ergebnis führt.
    Eine gute Dokumentation gibts auch noch bei Hersteller der, auf den Modulen verbauten, Funkchips.
    Leider hab ich die Adresse gerade nicht parat.

    Den kompletten Code für ein Funk Telemetriesystem, allerdings in "C" könnt ihr euch von unserer Modellflieger Page ziehen:
    http://www.toeging.lednet.de/flieger...telemetrie.htm

  10. #10
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    28.03.2008
    Ort
    Huntlosen
    Alter
    32
    Beiträge
    391
    mhh ich werd einfach nich aus dem Quellcode schlau, den immer viele im internet anbieten (Bascom). Ausserdem kann ich ja max. Proggen, ansonsten streikt Bascom.
    Ein komplettes Funkmodul ist mir aber zu teuer.

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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

Labornetzteil AliExpress