- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 10 von 45

Thema: rfm12 ausgabestring verarbeiten

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #11
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.08.2006
    Beiträge
    118
    Hallo Bastian 07,

    der Code läuft auf mein m8 anstandslos.
    Anbei mal mit meinen Veränderungen
    Code:
    $regfile = "m8def.dat"
    $hwstack = 32                                               ' default use 32 for the hardware stack
    $swstack = 10                                               'default use 10 for the SW stack
    $framesize = 40
    
    '$PROG &HFF,&HFF,&HD9,&H00' generated. Take care that the chip supports all fuse bytes.
    
    $crystal = 11059200                                         'wurde mit 10 MHz von RFM12 getestet
    $baud = 19200
    Baud = 19200
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portc.5 , Db5 = Portc.4 , Db6 = Portc.3 , Db7 = Portc.2 , E = Portc.6 , Rs = Portc.7
    Config Lcdbus = 4
    Cursor Off Noblink
    Cls
    
    
    
    
    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_readys
    Declare Sub Rf12_ready
    Declare Sub Rf12_txdata(byval Maxchar As Byte)
    Declare Sub Rf12_rxdata(byval Maxchar As Byte)
    
    Const Rf12freq = 433.92
    Const Rf12baud = 19200
    Const Maxchar = 4                                           '32
    
    'config the SPI in master mode.The clock must be a quarter of the slave cpu
    ' Hier ggf. den SoftSPI reinmachen
    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
    Spi_cs Alias Portb.2                                        ' SS-Pin
    Config Spi_cs = Output
    Spi_sdo Alias Pinb.4                                        ' MISO-PIN
    Set Spi_cs
    
    'init the spi pins
    Spiinit
    
    ' was so gebraucht wird
    Dim Count As Byte
    Dim Temp As Word
    Dim Rfdata(32) As Byte
    Dim Text As String * Maxchar At Rfdata Overlay
    Dim S As Byte
    Dim A$ As String * 1
    Dim A As Byte
    
    Print "Init"
    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 Power"
    Call Rf12_setpower(0 , 6)                                   '  1mW Ausgangangsleistung, 120kHz Frequenzshift
    
    
    ' ########################################################################
    ' ###### Hauptproggi
    ' ########################################################################
    
    Portd.7 = 1
    Text = "bt"
    
    ' Je nachdem ob Sender oder Empfänger die entsprechenden Zeilen aktivieren
    Do                                                          'Ewigschleife
    
    
    
    ' Hier ist die Senderoutine
    '  Print "Sende"
     Locate 1 , 1                                               'Cursor auf 1 Zeile, 1 Spalte
     Lcd Text
    
    
      Call Rf12_txdata(maxchar)                                 'senden
    
    Wait 1
    
    
    
    ' Hier ist die Empfangsroutine
    '  Print "Empfange"
    '  Call Rf12_rxdata(maxchar)
    '  For Count = 1 To Maxchar
    '   A$ = Chr(rfdata(count)) ;
    '  If A$ = "e" Then
    '   A$ = ""
    '    Print "a"
    '  End If
    '  Next Count
    '  Print
    Schleife:
    
    'Locate 2 , 1
    'Lcd A$
    Cls
    Loop
    
    
    End                                                         'end program
    
    
    ' ########################################################################
    ' ###### Unterroutinen
    ' ########################################################################
    
    Sub Rf12_init:
      Waitms 150
      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)
    'Print "stop1"
      Rf12_readys
    'Print "stop2"
      Temp = Rf12_trans(&Hb8aa)
      Rf12_readys
      Temp = Rf12_trans(&Hb8aa)
      Rf12_readys
      Temp = Rf12_trans(&Hb8aa)
      Rf12_readys
      Temp = Rf12_trans(&Hb82d)
      Rf12_readys
      Temp = Rf12_trans(&Hb8d4)
      Rf12_readys
      For Count = 1 To Maxchar
        Rf12_readys
        Temp = &HB800 + Rfdata(count)
        Temp = Rf12_trans(temp)
        Print Chr(rfdata(count));
      Next Count
      Rf12_readys
      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_readys
      Reset Spi_cs
      nop
      While Spi_sdo = 0                                         'In Der Sim Auf 1 Setzen
      Wend
    End Sub
    
    Sub Rf12_ready                                              'ready Empfangen
      Reset Spi_cs
      While Spi_sdo = 0
       If Len(s) > 0 Then                                       'Wenn ein string eingelesen
        Temp = Rf12_trans(&Hca81)                               'Fifo deaktivieren
        Temp = Rf12_trans(&H8208)                               'Empf. ausschalten
        Goto Schleife                                           'Springe zum hauptprogramm
       Else                                                     'sonst warte weiter auf Empfangsdaten
       Wend
      End If
    End Sub
    in meiner beigefügten Schaltung (anmelden) ist geschlossen:
    JP 3 = SS-Pin
    JP 6 = VCC
    JP 8 = Int 1 , geht mit Dein Code ohne
    JP11 = externer Takt

    Der Resetpin wird bei mir nicht benutzt.

    Wigbert
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken schaltung_m8.jpg  

Berechtigungen

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

12V Akku bauen