- Labornetzteil AliExpress         
Seite 4 von 5 ErsteErste ... 2345 LetzteLetzte
Ergebnis 31 bis 40 von 45

Thema: rfm01, Rfm02 Rfm12 Pollin Funkmodul mit bascom

  1. #31
    Benutzer Stammmitglied
    Registriert seit
    27.05.2007
    Beiträge
    67

    Erste Hürde gemacht

    Anzeige

    Powerstation Test
    Also bei mir funktioniert jetzt der Sender und Empfänger auch.

    Soweit mal, was ich gemacht hab und das Script für das Pollin Board mit Modifikation wie folgt:

    Änderungen am Board:
    1. Der Optokoppler muss weg. Soll heißen, dass ich ihn ausgelötet hab und durch 2 Pfostenstecker ersetzt. Die Module können jetzt per Jumper eingeschaltet werden. Dann bleibt auch der Spannungsregler kalt.
    2. Ich hab auf den FSK Port ein "High" gesetzt (Portb.3)

    Beide, Sender und Empfänger Toggeln jetzt die LED´s gleichmäßig und ich Empfange:

    Code:
    ÿInit<\r>
    <\n>Set Frequenz<\r>
    <\n>Set Bandwith<\r>
    <\n>Set Baudrate<\r>
    <\n>Set Power<\r>
    <\n>Empfange<\r>
    <\n>D-i-e-s- -i-s-t- -e-i-n- -4-3-3-M-H-z- -T-e-s-t- -!-!-!-!-!-<\r>
    -<\b>-<\r>
    <\n>Empfange<\r>
    <\n>D-i-e-s- -i-s-t- -e-i-n- -4-3-3-M-H-z- -T-e-s-t- -!-!-!-!-!-<\r>
    -?-<\r>
    Hier der Code zum Board mit gebrücktem Optokoppler:

    Code:
    ' generated. Take care that the chip supports all fuse bytes.' ########################################################################
    ' ### RF12-Test in Bascom
    ' ### Basiert auf Code von Benedikt K.
    ' ### Joachim Fossie Bär Reiter 04/2007
    ' ########################################################################
    
    
    $regfile = "m32def.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 = 16000000
    $baud = 19200
    Baud = 19200
    
    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_txdata(byval Maxchar As Byte)
    Declare Sub Rf12_rxdata(byval Maxchar As Byte)
    
    Const Rf12freq = 433.92
    Const Rf12baud = 19200
    Const Maxchar = 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
    
    Config Portd.5 = Output                                     'LED als Schleifenanzeige
    Config Portd.6 = Output                                     'LED als Schleifenanzeige
    Config Portb.3 = Output                                     'High auf FSK
    
    
    Portb.3 = 1
    
    ' 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
    
    ' 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
    
    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
    ' ########################################################################
    
    
    Text = "Dies ist ein 433MHz Test !!!!!{013}{010}"
    
    ' Je nachdem ob Sender oder Empfänger die entsprechenden Zeilen aktivieren
    Do                                                          'Ewigschleife
    
    
    ' Hier ist die Senderoutine
    '  Print "Sende"
    '  Call Rf12_txdata(maxchar)
    
    '  Wait 1
    
    ' Hier ist die Empfangsroutine
      Print "Empfange"
      Call Rf12_rxdata(maxchar)
      For Count = 1 To Maxchar
        Print Chr(rfdata(count)) ; "-";
      Next Count
      Print
    
    Toggle Portd.6
    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)
    Toggle Portd.5
      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
      Reset Spi_cs
      nop
      While Spi_sdo = 0
      Wend
    End Sub
    So, jetzt muss wohl doch das Datenblatt studiert werden. Aber ausdrucken lässt sich das mist***** nicht.

    Grüße Eisbaeeer

  2. #32
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.08.2006
    Beiträge
    118
    Hallo Eisbaeeer,

    na prima!!! mit internen Pullup geht das selbstverständlich auch.

    Hast Du mal den Strom gemessen? 59mA oder so.(ohne Optok.)

    Mein DBL lässt sich auch nicht drucken,na mal sehen.

    Wigbert

  3. #33
    Benutzer Stammmitglied
    Registriert seit
    27.05.2007
    Beiträge
    67
    Hast du das ganze schon Bidirektional gestestet? In beide Richtungen?

  4. #34
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.08.2006
    Beiträge
    118
    Aber sicher doch,

    der code unter

    http://home.arcor.de/dirk.milewski/R...Tranceiver.bas

    kannst Du mit 2RFM12 und Terminalprogramme Senden und Empfangen.
    Also ein Drahtlose Datenübertragung zwischen 2 Computer.
    Sicher einfach gehalten, aber war ja nur zu Testzwecke gedacht.

    Wigbert

  5. #35
    Benutzer Stammmitglied
    Registriert seit
    27.05.2007
    Beiträge
    67

    Adressierung der Bausteine

    Hi,

    so, nachdem die ersten Tests gemacht sind, wäre jetzt eine Adressierung im Protkoll noch interessant. Sozusagen ein Master und Slaves.
    Ich habe vor, einen Master (Steuerung) und 2 Slaves (Anzeigen) zu realisieren.
    Was gäbe es für einfache Protokolle, damit z.B. die Uhrzeit, Temperatur, Schaltbefehle übertagen werden können.

    Grüße Eisbaeeer

  6. #36
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.08.2006
    Beiträge
    118
    Eisbaeer,

    Post angekommen?

    Wigbert

  7. #37
    Benutzer Stammmitglied
    Registriert seit
    28.06.2007
    Ort
    Blaustein
    Alter
    58
    Beiträge
    36
    Hallo Wigbert,

    Dein Code oben scheint zu funktionieren Wenigstens läuft das Programm sauber durch. Muß am Wochenende mal den Empfänger aufbauen und gucken, wie weit ich mit den Dingern komme.

    Habe den Code ein wenig angepaßt, das man nicht über ein Terminal den Text eingeben muß und die Ausgabe erfolgt über ein LCD-Display. Ich möchte ja sowieso mit den Modulen eigentlich nur sicher fernschalten, da reichen die 32 Zeichen Text vollkommen aus. Muß mir jetzt nur noch eine Rückmelderoutine einfallen lassen.

    Thomas
    New Millenium Observatory
    Der Sternhimmel über Ulm
    http://www.sternhimmel-ueber-ulm.de

  8. #38
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.08.2006
    Beiträge
    118
    Hallo Knickohr,

    wenn Du nur ein Befehl sendest, kannst Du ja die Länge
    Überwachen, oder Daten vergleichen und erst wenn es beim Empfänger zum Print kommt sendet er irgendetwas zurück.Echo?
    Ist vielleicht einfach aber manchmal ausreichend.

    Wigbert

  9. #39
    Benutzer Stammmitglied
    Registriert seit
    28.06.2007
    Ort
    Blaustein
    Alter
    58
    Beiträge
    36
    Hallo,

    ja, ich denke, ich werde in den 32 Zeichen irgend etwas reinschreiben, was sich eindeutig identifiziert und das dann vom Empfänger zurückschicken lassen. Kommt es korrekt an, dann bekomme ich eine Bestätigung, andernfalls kann ich den Befehl nochmal senden. Man kann vielleicht auch eine eindeutige Nummer mitgeben, so das mehrere Empfänger gleichzeitig angesprochen werden können.

    Thomas
    New Millenium Observatory
    Der Sternhimmel über Ulm
    http://www.sternhimmel-ueber-ulm.de

  10. #40
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.08.2006
    Beiträge
    118
    wenn Dir 32 Zeichen zu lang sind. versuch das mal mit:

    Code:
    Const Maxchar = 32
    zu verändern.

    Wigbert

Seite 4 von 5 ErsteErste ... 2345 LetzteLetzte

Berechtigungen

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

Solar Speicher und Akkus Tests