-         

Ergebnis 1 bis 3 von 3

Thema: RFM12 - funkts? [Video inside]

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    01.01.2008
    Alter
    37
    Beiträge
    48

    RFM12 - funkts? [Video inside]

    Anzeige

    Hallo Freunde,

    ich habe mich mal an den RFM12 Funkmodulen versucht. Angeschlossen sind sie wie auf dem Foto zu sehen: Bild

    Wenn ich den Funkscanner daneben halte, dann erwische ich schon gar kein Funksignal auf der eingestellten Frequenz, höre aber Störgeräusche auf benachbarten Kanälen. Bitte schaut Euch mal das (unscharfe) Video bis zum Schluss an(geht 2 Minuten). Ich habe schon das zweite RFM12 eingelötet, da ich das erste verpolt hatte und einen Defekt befürchten musste, aber das selbe Spielchen auch mit dem zweiten Modul.

    Video:Hier

    Ich scheue mich nur, jetzt eine Schaltung mit dem Empfänger aufzubauen wenn schon das Prüfen der Sendung mit dem Scanner nicht klappt.

    Habe ich noch igendwas übersehen?

    Ach ja, das Programm ist nur minimalst verändert und hier aus dem Forum, Chip ist ein ATMega32:
    Code:
    $regfile = "m32def.dat"
    $crystal = 8000000                                          '
    $hwstack = 32
    $swstack = 32
    $framesize = 40
    $baud = 1200
    Declare Sub Rf12_init
    Declare Function Rf12_trans(byval Wert As Word) As Word
    Declare Sub Rf12_setfreq(byval Freq As Single)
    Declare Sub Rf12_setbandwith(byval Bandwith As Byte , Byval Gain As Byte , Byval Drssi As Byte)
    Declare Sub Rf12_setbaud(byval Rfbaud As Long)
    Declare Sub Rf12_setpower(byval Outpower As Byte , Byval Fskmod As Byte)
    Declare Sub Rf12_ready
    Declare Sub Rf12_readys
    Declare Sub Rf12_txdata(byval Maxchar As Byte)
    Declare Sub Rf12_rxdata(byval Maxchar As Byte)
    Declare Sub Senden
    Declare Sub Empfangen
    
    Const Rf12freq = 431.200                                    '433.92
    Const Rf12baud = 9600
    Const Maxchar = 32
    
    ' Hier ggf. den SoftSPI reinmachen
    Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 128 , Noss = 1
    Config Portb.1 = Output                                                         ' LED zur Schleifenkontrolle
    
    ' werden benötigt für rf12_ready
    Spi_cs Alias Portb.4                                        ' SS-Pin
    Config Spi_cs = Output
    Spi_sdo Alias Pinb.6                                        ' MISO-PIN
    Set Spi_cs
    
    ' init the spi pins
    Spiinit
    
    Dim Count As Byte
    Dim Temp As Word
    Dim Rfdata(32) As Byte
    Dim Text As String * Maxchar At Rfdata Overlay
    Dim J As Byte
    
    Print "Init RFM12      "
    Call Rf12_init                                              ' ein paar Register setzen (z.B. CLK auf 10MHz)
    print "Set Frequenz    "
    Call Rf12_setfreq(rf12freq)                                 ' Sende/Empfangsfrequenz auf 433,92MHz einstellen
    print "Set Bandwith    "
    Call Rf12_setbandwith(4 , 1 , 4)                            ' 200kHz Bandbreite, -6dB Verstärkung, DRSSI threshold: -79dBm
    print "Set Baudrate    "
    Call Rf12_setbaud(rf12baud)                                 ' 19200 baud
    print "Set Tx-Power    "
    Call Rf12_setpower(0 , 6)                                   ' 1mW Ausgangangsleistung, 120kHz Frequenzshift
    
    'Text = "Dies ist ein 433MHz Test !!!!!{013}{010}"
    
    ' Je nachdem ob Sender oder Empfänger die entsprechenden Zeilen aktivieren
    
    Do
       Text = "_ein absoluter 433MHz Test - #" + Str(j)
       Senden
    Wait 1
       print "Ready           "   + Str(j)
       Incr J
    Loop
    
    End
    
    ' ########################################################################
    ' ####### Tranceiverroutinen
    ' ########################################################################
    
    Sub Empfangen
       Print "Empfange        "
       Waitms 100
       Call Rf12_rxdata(maxchar)
       For Count = 1 To Maxchar
          Print Chr(rfdata(count)) ;
          Waitms 100
       Next Count
    End Sub
    
    Sub Senden
       print "Sende           "
       Call Rf12_txdata(maxchar)
    End Sub
    
    ' ########################################################################
    ' ###### Unterroutinen
    ' ########################################################################
    
    Sub Rf12_init:
       Temp = Rf12_trans(&Hc0e0)
       Temp = Rf12_trans(&H80d7)
       Temp = Rf12_trans(&Hc2ab)
       Temp = Rf12_trans(&Hca81)
       Temp = Rf12_trans(&He000)
       Temp = Rf12_trans(&Hc800)
       Temp = Rf12_trans(&Hc4f7)
    End Sub
    
    Sub Rf12_setfreq(byval Freq As Single)
       Freq = Freq - 430.00
       Temp = Freq / 0.0025
       If Temp < 96 Then
          Temp = 96
       Elseif Temp > 3903 Then
          Temp = 3903
       End If
       Temp = Temp + &HA000
       Temp = Rf12_trans(temp)
    End Sub
    
    Sub Rf12_setbandwith(byval Bandwith As Byte , Byval Gain As Byte , Byval Drssi As Byte)
       Drssi = Drssi And 7
       Gain = Gain And 3
       Temp = Bandwith And 7
       Shift Temp , Left , 2
       Temp = Temp + Gain
       Shift Temp , Left , 3
       Temp = Temp + Drssi
       Temp = Temp + &H9400
       Temp = Rf12_trans(temp)
    End Sub
    
    Sub Rf12_setbaud(byval Rfbaud As Long )
       Local Ltemp As Long
       If Rfbaud < 663 Then Exit Sub
       If Rfbaud < 5400 Then
          Temp = 43104 / Rfbaud
          Temp = Temp + &HC680
       Else
          Ltemp = 344828 / Rfbaud
          Temp = Ltemp
          Temp = Temp + &HC600
       End If
       Decr Temp
       Temp = Rf12_trans(temp)
    End Sub
    
    Sub Rf12_setpower(byval Outpower As Byte , Byval Fskmod As Byte)
       Outpower = Outpower And 7
       Temp = Fskmod And 15
       Shift Temp , Left , 4
       Temp = Temp + Outpower
       Temp = Temp + &H9800
       Temp = Rf12_trans(temp)
    End Sub
    
    Sub Rf12_txdata(byval Maxchar As Byte)
       Temp = Rf12_trans(&H8238)
       Rf12_ready
       Temp = Rf12_trans(&Hb8aa)
       Rf12_ready
       Temp = Rf12_trans(&Hb8aa)
       Rf12_ready
       Temp = Rf12_trans(&Hb8aa)
       Rf12_ready
       Temp = Rf12_trans(&Hb82d)
       Rf12_ready
       Temp = Rf12_trans(&Hb8d4)
       Rf12_ready
       For Count = 1 To Maxchar
          Rf12_ready
          Temp = &HB800 + Rfdata(count)
          Temp = Rf12_trans(temp)
       Next Count
       Rf12_ready
       Temp = Rf12_trans(&H8208)
    End Sub
    
    Sub Rf12_rxdata(byval Maxchar As Byte)
       Temp = Rf12_trans(&H82c8)
       Temp = Rf12_trans(&Hca81)
       Temp = Rf12_trans(&Hca83)
       For Count = 1 To Maxchar
          Rf12_ready
          Temp = Rf12_trans(&Hb000)
          Rfdata(count) = Temp
       Next Count
       Temp = Rf12_trans(&H8208)
    End Sub
    
    Function Rf12_trans(byval Wert As Word) As Word
       Local Lowbyte As Byte
       Local Highbyte As Byte
       Lowbyte = Wert And 255
       Shift Wert , Right , 8
       Reset Spi_cs
       Highbyte = Spimove(wert)
       Lowbyte = Spimove(lowbyte)
       Set Spi_cs
       Temp = Highbyte * 256
       Temp = Temp + Lowbyte
       Rf12_trans = Temp
    End Function
    
    Sub Rf12_ready
       Local I As Word
       Reset Spi_cs
       For I = 1 To 65000
          If Spi_sdo = 1 Then Exit For
       Next
    End Sub

  2. #2
    Erfahrener Benutzer Begeisterter Techniker Avatar von Jacob2
    Registriert seit
    26.05.2007
    Ort
    Berlin
    Beiträge
    345
    Hi,
    Ich habe mir ein Adapter zum stecken gebaut (siehe Bild).
    Ich werds allerdings in C machen und bin noch nicht dazugekommen!
    Viel Glück noch!
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken adapter.gif  
    Roboter, CNC Fräse, Elektronik und Basteleien stelle ich auf meiner Website vor...

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    01.01.2008
    Alter
    37
    Beiträge
    48
    Niemand mit Idee oder Scanner?

Berechtigungen

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