Hi Ihr's,

leider kann ich dem Fragenstellenden keine Antwort geben aber vielleicht kann uns gemeinsam geholfen werden.

Also ich versuche nun auch schon seit geraumer Zeit meine RFM12S 868Mhz zum Laufen zu bringen. Erfolge habe ich auch, eine funktionierende Funkbrücke läuft. Nun wollt ich aber nun die Lib, wie Eisbaeeer beschrieben, nutzen. Habe alle wichtigen Variablen an meine Umgebung angepasst. als Sender nutze ich einen Mega128 (Auszüge):
Code:
$regfile = "m128def.DAT"
$crystal = 16000000
$baud = 38400
$hwstack = 100
$swstack = 100
$framesize = 100
Const Rf12freq = 868.35                                                         'Kanal-Einstellung
Const Rf12baud = 19200                                                          'Baudrate
Const Myadress = 10                                                             'NodeAdress
Const Snap_sync = &H54
'Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 16 , Noss = 0 , Spiin = 0
Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 128 , Noss = 1

Spi_cs Alias Portb.0 : Ddrb.0 = 1                           'Config Spi_cs = Output  chipselect
Spi_sdo Alias Pinb.3                                        ' MISO-PIN
Set Spi_cs
Spiinit
Dim Lv As Byte
Dim Temp_rfm As Word
Dim Rf12_data(40) As Byte , Rf12_s As String * 40 At Rf12_data Overlay
Dim Byteanzahl As Byte , Framelength As Byte , Crclength As Byte                'Anzahl Sendebytes
'Uart-Variablen
Dim Rx_data As Byte , N As Byte , Rxd_ready As Bit
Dim Buffer(40) As Byte , S_buffer As String * 40 At Buffer Overlay
Goto Startup
$include "inc_RF12-Treiber.bas"
Startup:
Call Rf12_init                                                                  ' ein paar Register setzen (z.B. CLK auf 10MHz)
Call Rf12_setfreq(rf12freq)                                                     '  Sende/Empfangsfrequenz auf 433,92MHz einstellen
Call Rf12_setbandwith(4 , 1 , 4)                                                '  200kHz Bandbreite, -6dB Verstärkung, DRSSI threshold: -79dBm
Call Rf12_setbaud(rf12baud)                                                     '  19200 baud
Call Rf12_setpower(0 , 6)  

.....
Print "RFM daten senden "
 Byteanzahl = Rnd(10)                                                           'zum Test zufällige Nutzdatenlänge 0...32Byte
  Rf12_err = 0                                                                  'Error Flag löschen
  Gosub Sendsnapframe
  If Rf12_err = 1 Then
     Print "Timeout beim Senden aufgetreten"                                    'DebugInfo: Problem beim senden
     End If
Der Code läuft soweit durch, ein Timeout beim Senden bekomme ich nicht. Den Sender auf Funktion kann ich nicht durch ext. Möglichkeiten prüfen.

Als Empfänger nutze ich ebenfalls den RFM12S 868Mhz:
Code:
$regfile = "m644pdef.DAT"
$crystal = 14745600
$baud = 57600
Baud = 57600
$hwstack = 40
$swstack = 40
$framesize = 40
$lib "glcdKS108.lbx"                                                            'Include the library for the KS-108 controler

'$sim

'------------------------------------------------------------------------------- Grafik LCD
Config Graphlcd = 128 * 64sed , Dataport = Portc , Controlport = Porta , Ce = 0 , Ce2 = 1 , Cd = 2 , Rd = 3 , Reset = 5 , Enable = 4
Cls
Setfont Font5x5
'------------------------------------------------------------------------------- Autoflash über RS232
Dim Rs232_flash As Byte
Dim Rs232_str As Byte
'-------------------------------------------------------------------------------SNAP
Const Rf12freq = 868.35                                                         'Kanal-Einstellung
Const Rf12baud = 19200                                                          'Baudrate
Const Myadress = 20                                                             'Nodeadresse vom Teilnehmer
Const Snap_sync = &H54                                                          'Synczeichen SNAP-Protokoll
Const Maxchar = 32

Dim Lv As Byte
Dim Temp As Word
Dim Rf12_data(40) As Byte , Rf12_s As String * Maxchar At Rf12_data Overlay
Dim Rf_rxd As Bit , Rf_sync As Bit
Dim Ndb As Byte , Framelength As Byte , Crc As Byte
Dim Byteanzahl As Byte                                                          'Anzahl Sendebytes
Dim S As String * 10
Sync Alias Rf12_data(1)
Hdb1 Alias Rf12_data(2)
Hdb2 Alias Rf12_data(3)
Dab1 Alias Rf12_data(4)
Sab1 Alias Rf12_data(5)

'----------[Hardwaresetup für Pollin Funkboard]---------------------------------------------
'PortD.3-->INT1 an FFIT --Interrupt(High) wenn FiFO-Buffer voll (ef-Bit set)

Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 128 , Noss = 1
' werden benötigt für rf12_ready
' Achtung je nach µC anpassen !!!
' für M8:  Spi_cs Alias Portb.2 :   Spi_sdo Alias Pinb.4          ' SS-Pin
'M32:
Config Portb.2 = Input
Nirq Alias Pinb.2
Config Portb.1 = Output
Fsk Alias Portb.1
Set Fsk
Spi_cs Alias Portb.4 : Ddrb.4 = 1                                               'Config Spi_cs = Output  chipselect
Spi_sdo Alias Pinb.6                                                            ' MISO-PIN
Set Spi_cs
Spiinit                                                                         'init the spi pins
Goto Startup

$include "inc_RF12-Treiber.bas"                                                 'RF12 Treiber einbinden

'--------[Initialisierung]------------------------------------------------
Startup:
Config Int1 = Rising
On Int1 Ffit_isr:
On Urxc Rxd_isr:                                                                'Interrupt Empfange String von RXD
Enable Urxc                                                                     'Einschalten
Enable Interrupts                                                               'Zulassen


Print "Init RF12 ..."
Call Rf12_init                                                                  '  ein paar Register setzen (z.B. CLK auf 10MHz)
Call Rf12_setfreq(rf12freq)                                                     '  Sende/Empfangsfrequenz auf 433,92MHz einstellen
Call Rf12_setbandwith(4 , 1 , 4)                                                '  200kHz Bandbreite, -6dB Verstärkung, DRSSI threshold: -79dBm
Call Rf12_setbaud(rf12baud)                                                     '  19200 baud
Call Rf12_setpower(0 , 6)                                                       '  1mW Ausgangangsleistung, 120kHz Frequenzshift
Print "Init RF12 Done"


'----------[Mainloop]------------------------------------------------------
Rf12_s = ""
Gosub Rf12_rxd_on

Do
'******************************************************************************* 'Automatisches Flashen über RS232

Rs232_flash = Ischarwaiting()
If Rs232_flash = 1 Then                                                         'wurde was über RS232 empfangen?
   Rs232_str = Inkey()                                                          'Empfangspuffer auslesen
   If Rs232_str = 123 Then                                                      'vom MCS-Programmer geschickte "123" empfangen?
   Goto &HF800                                                                  'Sprungadresse zum Startbereich des Bootloaders
   End If
End If

  If Rf_rxd = 1 Then
      Print "RX ready, Framelength: " ; Framelength
      Gosub Framehandler
      Gosub Rf12_rxd_on
      End If
 'do anything....



  Print "neuer Mainloop"
  Wait 1
Loop
End

'----------[Frameverarbeitung SNAP-Protokoll]------------------------------------
Framehandler:

 Print "Frame: ";                                                               'Debugausgabe
 For Lv = 1 To Framelength
      Print Hex(rf12_data(lv)) ; " ";
      Next Lv
 Print
 If Sync = Snap_sync Then                                                       'sync.Zeichen IO?
    If Hdb2 = &H50 Then                                                         '1Byte Adressierung?
       'if HDB2= NDB then                                             '0..32 Datenbyte
           If Dab1 = Myadress Then                                              'Adresse prüfen
              Print "Das war für mich!...von Nr.:" ; Rf12_data(5)               'Datenverarbeitung
              Swap Dab1 , Sab1                                                  'Adressen umdrehen für Rücksenden
              Crc = Framelength - 2                                             'nur temporär Länge für crc-Check
              Crc = Crc8(rf12_data(2) , Crc)
              If Crc = Rf12_data(framelength) Then                              'CRC OK?
                 Print "CRC OK! => " ; Crc
                 ' Send ACK (i.e tell master that packet was OK)
                 ' Set ACKs bit in HDB2 (xxxxxx10)
                 Hdb2 = Hdb2 Or &B00000010
                 Hdb2 = Hdb2 And &B11111110
                 'do ...
                 Gosub Senden                                                   'Anwortframe senden--> nur als Slave
                 Gosub Cmd_handler
                 'RF12_data(2 <--- ackno machen
                 Else
                 Print "CRC Bad => " ; Crc
                 ' Send NAK (i.e tell master that packet was bad)
                 ' Set ACK bits in HDB2 (xxxxxx11)
                 Hdb2 = Hdb2 Or &B00000011
                 Gosub Senden                                                   'Anwortframe senden--> nur als Slave
                 End If
              Else
              Print "geht mich nix an!...von Nr.:" ; Rf12_data(5)
              End If
        'else
          'print "Framelength NIO!!!"
          'end IF
       Else
       Print "no 1Byte Adress!!!"
       End If
    Else
    Print "no Syncbyte!!!"
    End If
  Waitms 10

Return



'------[CMD-Interpreter]-------------------------------------
Cmd_handler:                                                                    'Auswertung der Nutzdaten.... nur als Denkhilfe :)
'(
Select Case Rf12_data(7)
       Case 0 :
       Case 1 : Gosub Rolloaufmachen
       Case 2 : Gosub Rollozumachen
       Case 10 : Gosub Holetemperatur
       End Select
')
For Lv = 1 To 20
                                                                    'mache was...
    Waitms 100
    Next Lv
Return




'----------[RF12 Empfänger einschalten]---------------------------
Rf12_rxd_on:
   Lv = 1
   Rf_sync = 0                                                                  'sync-Flag
   Rf_rxd = 0
   Rf12_s = ""
   Framelength = 6                                                              'erst mit 3.Byte kann die Framelänge berechnet werden
   Temp = Rf12_trans(&H82c8)                                                    'Power CMD: Empfänger an, Quarz-clk läuft weiter
   Temp = Rf12_trans(&Hca81)                                                    'FIFO&Reset CMD: sensitiver Reset aus (Brownout)
   Temp = Rf12_trans(&Hca83)                                                    'FIFO&Reset CMD: Synchroner Zeichenemfang (warte auf Startzeichen: 2DD4)
   Enable Int1
Return

'----------[RF12 Daten Senden]-------------------------------------
Senden:

  ' Waitms 1
  Print "Sende: "
  For Lv = 1 To Framelength
      Print Hex(rf12_data(lv)) ; " ";
      Next Lv
  Call Rf12_txdata(framelength)
  Waitms 10

Return

'----------[Uart ISR(Daten vom PC)]--------------------------------
Rxd_isr:
  S = S + Chr(udr)
Return

'----------[INT1 ISR(Daten vom RF12)]--------------------------------
Ffit_isr:
 Temp = Rf12_trans(&Hb000)
 Temp = Temp And &H00FF
 If Temp = &H54 And Rf_sync = 0 Then                                            'Synchronzeichen empfangen-->an 1 Stelle
    Rf_sync = 1
    Lv = 1
    End If
 Rf12_data(lv) = Temp                                                           'Empfangsbyte in Buffer legen
 If Lv = 3 Then                                                                 'ermitteln der Anzahl Datenbytes (SNAP)
    Ndb = Temp And &H0F                                                         'unteres Nipple von HDB1 enthält Datenlänge
    Select Case Ndb                                                             '6Byte<=sync+HDB2+HDB1+DAB+SAB+CRC
           Case 0 To 8 : Framelength = 6 + Ndb                                  '6-14 (0--8 Datebyte)
           Case 9 : Framelength = 6 + 16                                        '22   (16 Datenbyte)
           Case 10 : Framelength = 6 + 32                                       '38   (32 Datenbyte)
           End Select
    End If
 If Lv >= Framelength Then                                                      'alles eingetroffen
    Rf_rxd = 1                                                                  'Flag setzen und Empfänger abschalten
    Temp = Rf12_trans(&H8208)                                                   'Power_CMD: Empfänger aus, Quarz-clk läuft weiter
    Disable Int1
    End If
 Incr Lv                                                                        'Zeiger incr
Return

$include "font5x5.font"
Leider bringt mir der Empfänger keine Informationen. So wie ich es sehe, trifft leider kein Interrupt auf und somit kommt es nicht zur Auswertung.

@Eisbaeeer:

Kannst Du mir ein paar Tips geben wie ich weiter machen kann? Im Übrigen sind es die fertigen Cods aus comwebnet.weimars.net/forum.

DAnke & Gruß MAT