-
        

Ergebnis 1 bis 7 von 7

Thema: Funksender 868MHz Temperatur / Feuchtesender

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.08.2004
    Ort
    Magdeburg
    Beiträge
    154

    Funksender 868MHz Temperatur / Feuchtesender

    Anzeige

    Hallo,

    ich möchte mir einen Temperatursender bauen der Temperaturen bis 110°C und 100% Luftfeuchte übertragen kann.
    Als Protokoll möchte ich Das vom ASH2200 (da FHEM dieses versteht)
    Das Protokoll sieht so aus:
    http://www.dc3yc.privat.t-online.de/thermohygro.htm
    http://www.dc3yc.privat.t-online.de/protocol.htm

    Meine Frage, wie kann ich dieses in ein Bascomprogramm packen... Oder vielleicht hat einer schon eine Lösung
    Das Ganze soll dann über ein FSK Modul versendet werden.

    Vielen Dank...


    Gruß
    Uwe
    Geändert von UweMD (15.02.2014 um 19:06 Uhr)
    Jede Veränderung erzeugt Angst und die bekämpft man am besten, in dem man das Wissen verbessert.

    (Ihno Schneevoigt, Geschäftsführer IBM Deutschland)

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.08.2004
    Ort
    Magdeburg
    Beiträge
    154
    Hallo.

    leider komme ich doch nicht weiter...
    Ich wollt dieses Programm anpassen doch ich sehe das nicht durch:

    Code:
    $regfile = "M8DEF.DAT"                                      ' = "2313DEF.DAT"
    $baud = 19200                                               'zum Debuggen
    $crystal = 8000000                                          '7362700
    
    'Config Serialout = Buffered , Size = 20
    'Deklaration der SUB und Functions
    Declare Function Make_manchester(byval Daten As Byte) As Word
    Declare Sub Send_code(byval Daten As Word)
    Declare Sub Send_start()
    Declare Sub Send_byte(byval Daten As Byte , Byval Crc_select As Byte)
    
    Const Crc_poly = &H1021                                     'CRC Polynom
    Const Sync_byte = &B01010100                                'Startbyte, kommt aus dem SNAP Prtokoll
    'Definition der Variablen
    Dim Crc As Word
    Dim Tempw_1 As Word
    Dim Tempw_2 As Word
    Dim Temp As Word
    Dim Daten(9) As Byte                                        'Sendebuffer
    Dim Temp1 As Byte
    Dim Temp2 As Byte
    Dim Zaehler As Byte
    Dim A As Byte
    'Werte für die Funkübertragung einstellen
    Const Bit_zeit = 1000                                       '1220.7                 'in us für LOW/HIGH -- > Manchesterbit = 2 * Bitzeit
                                  'original = 500
    Const Bit_wait_start = Bit_zeit * 2.5                       'Wartezeit zum erkennen des nächsten Bytes
    Const Bit_zeit_1_2 = Bit_zeit / 4                           'Bitzeit beim einschwingen
    Const Anzahl_bit_wechsel = 50                               'kommt auf das Modul an hier 150
                                  'geändert auf 10 da 1000us/4=250us*10=2,5ms
                                  'Empfänger braucht 1,6ms zum einschwingen
    
    'Einstellen der Ports
    Funk Alias Portb.1                                          'Bezeichner für Funkport
    Config Pinb.1 = Output                                      'Port für Funkmodul
    'Enable Interrupts
    Daten(1) = "S"
    Daten(2) = "N"
    Daten(3) = "A"
    Daten(4) = "P"
    'Hauptschleife
    'Kleine Schleife zum testen des Programms
    Print "Transmitter 1.0"
    Wait 1
    Do
         'Bitmuster zum einschwingen des Funkempfängers senden
         Call Send_start()
         'Startbyte senden
         Call Send_byte(sync_byte , 1)
         '4 Datenbytes senden
         For Zaehler = 1 To 4
          Call Send_byte(daten(zaehler) , 1)
          'Print Daten(zaehler)
         Next Zaehler
         'CRC zerlegen und senden
         Temp1 = High(crc)
         Call Send_byte(temp1 , 0)
         Temp1 = Low(crc)
         Call Send_byte(temp1 , 0)
        'kleine Pause, bis es weiter geht
        Wait 1
    Loop
    
    End
    '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    'Unterprogramm zum senden eines Bytes
    'Übergabe: Daten, zu sendenes Byte
    'crc_select = 0 --> kein CRC, 1 --> mit CRC
    'Rückgabe: CRC Wert steht am Schluß in der Variablen crc
    Sub Send_byte(byval Daten As Byte , Byval Crc_select As Byte)
      If Crc_select = 1 Then                                    'CRC berechnen = ja ???
        Temp1 = Daten
        Gosub Calc_crc                                          ' Crc Berechnen
      End If
        Temp = Make_manchester(daten)                           'Variable in Manchester Code umrechnen
        Call Send_code(temp)                                    'und senden
    End Sub
    '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    'Bitwechsel zum einschwingen senden
    'Der empfänger braucht eine gewisse Zeit, um sich auf die Frequenz des Senders einzustellen.
    'Bei meinen Modulen von ELV, steht im Datenblatt, das sie bis zu 200 ms dafür brauchen.
    'Bei einigen Tests haben sich diese Werte als ausreichend herausgestellt.
    'Dauer ca 26,6 ms
    'Rückgabe: keine
    Sub Send_start()
      Crc = 0                                                   'Variable für neue CRC berechnung löschen
     Local Count As Byte
     Count = 0
       Do
        Set Funk
        Waitus Bit_zeit_1_2
        Reset Funk
        Waitus Bit_zeit_1_2
        Incr Count
       Loop Until Count = Anzahl_bit_wechsel
     Waitus Bit_wait_start                                      'kleine Pause zum erkennen des Startes
    End Sub
    
    
    '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    'Manchester Code ausgeben auf Portpin "Funk", definiert weiter oben
    'Hier wird die Variable manchester Bitweise ausgegeben und über den Funksender
    'übertragen. Zwischen dem senden einzelner Bytes sollte die Pause nicht größer
    'als 500 ms sein, sonst verliert der Empfäger die Frequenz des Senders und die
    'Daten sind verloren.
    'Vor dem ersten senden von Daten, muß mit dem Aufruf send_start() erstmal die
    'Bitmuster zum einschwingen gesendet werden.
    'Dauer ca 9,7 ms
    'Übergabe: zu sendene Variable (word) Manchestercodiert
    'Rückgabe: keine
    Sub Send_code(byval Daten As Word)
     Local Bit_number As Byte
     'Startbit senden
     Set Funk
     Waitus Bit_zeit
     'Anzahl der zu übertragenen Bits
     Bit_number = 16
       Do
        Decr Bit_number
        'Bit abfragen und reagieren
        If Daten.bit_number = 1 Then
          Set Funk
        Else
          Reset Funk
        End If
        'benötigte Zeit warten
        Waitus Bit_zeit
       Loop Until Bit_number = 0
     Reset Funk
     'kleine Pause, damit der Empfäger das Ende/Start erkennen kann
     Waitus Bit_wait_start
    End Sub
    
    '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    'Umrechnen eiens Bytes in Manchester Code
    'Hier wird das übergebene Byte mit Manchestercode codiert.
    'Dauer ca
    ' Übergabe: byte, umzurechene Byte
    ' Rückgabe: word, umgerechnete Variable
    Sub Make_manchester(byval Daten As Byte)
     Local Bit_number As Byte
     Local Manchester As Word
     'Anzahl der zu umzurechnen Bits
     Bit_number = 8
       Do
        Shift Manchester , Left , 2
        Decr Bit_number
        If Daten.bit_number = 1 Then
          Manchester = Manchester + 1                           '01
        Else
          Manchester = Manchester + 2                           '10
        End If
       Loop Until Bit_number = 0
     Make_manchester = Manchester
    End Sub
    
    '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    'Routine zum berechnen der CRC 16 Cecksumme, aus Bascom Buch
    'Crc steht am Ende in der Varablen crc
    'Übergabe: umzurechene Variable in temp1
    Calc_crc:
     Tempw_1 = Temp1 * 256
     Crc = Tempw_1 Xor Crc
     For Temp2 = 0 To 7
       If Crc.15 = 0 Then Goto Shift_only
        Tempw_2 = Crc * 2
        Crc = Tempw_2 Xor Crc_poly
        Goto Nxt
     Shift_only:
     Crc = Crc * 2
     Nxt:
     Next
    Return
    http://www.roboternetz.de/community/...k%FCbertragung

    Vielleicht hat ja einer den Durchblick, dass ich das oben genannte Protokoll senden kann.

    Danke... Gruß Uwe
    Jede Veränderung erzeugt Angst und die bekämpft man am besten, in dem man das Wissen verbessert.

    (Ihno Schneevoigt, Geschäftsführer IBM Deutschland)

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.08.2004
    Ort
    Magdeburg
    Beiträge
    154
    Hat keiner eine Ahnung wie ich das Protokoll in ein Bascomprogramm packen kann?

    Jede Veränderung erzeugt Angst und die bekämpft man am besten, in dem man das Wissen verbessert.

    (Ihno Schneevoigt, Geschäftsführer IBM Deutschland)

  4. #4
    Benutzer Stammmitglied Avatar von Socke
    Registriert seit
    04.10.2005
    Ort
    Lingenfeld
    Beiträge
    44
    Hallo UweMD,
    Dein Codebeispiel von oben scheint nicht ganz zu den von Dir verlinkten Protokollen zu passen.
    Evtl. ist der Codeschnipsel aus diesem Thread als Vorlage besser geeignet:
    http://www.roboternetz.de/community/...funksteckdosen
    Dazu gehört dann noch ein passendes Sendemodul (z.B. ELV HF-Sendemodul TX868-75, 868 MHz)
    und dann sollte das Zusammensetzen der richtigen Bitfolgen und des richtigen Timings anhand der Protokollbeschreibungen kein unüberwindbares Problem mehr darstellen.
    MfG. Socke

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.08.2004
    Ort
    Magdeburg
    Beiträge
    154
    Hallo Socke,

    Danke... ich werde mein Glück versuchen...

    Jede Veränderung erzeugt Angst und die bekämpft man am besten, in dem man das Wissen verbessert.

    (Ihno Schneevoigt, Geschäftsführer IBM Deutschland)

  6. #6
    Hallo
    Ich weiss zwar nicht ob das hier noch aktuell ist aber ich habe mir mit Bascom eine Temeratur und Lüftfeuchteübertragung per Funk realiesiert.
    Allerdings denke ich mal das das nicht mit dem FHEM Protokoll kompatible ist.
    Als Sender und Empfänger verwende ich 433Mhz RF-Link Sender und Empfänger von Wattenrott.com die Übertragung ist Manchastercodiert.
    Als Sensor verwende ich neuerdings den DHT-22. Ursprünglich war es ohne Luftfeuchte geplant da habe ich den DS1820 verwendet.
    Der Empfänger ist an einem Linuxserver angeschlossen der dann auch noch ein WebIf bereitstellt.

    Anbei mal ein Bild vom Webif


  7. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    14.11.2013
    Ort
    SA
    Alter
    64
    Beiträge
    211
    Hallo Uwe MD,

    schau einfach mal im Forum Bascom „I2C“

    Gruß
    fredred.

Ähnliche Themen

  1. RFM12 Module mit 868MHz und receive();
    Von Ferdinand im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 13.07.2011, 23:35
  2. RFM12 868Mhz Problem beim Empfang
    Von bytie82 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 21.11.2010, 22:50
  3. CC1100 868MHz Transceiver sendet nicht
    Von weakbit im Forum Assembler-Programmierung
    Antworten: 0
    Letzter Beitrag: 29.12.2009, 23:16
  4. RFM12 -> RFM01 868MHz
    Von stefan_Z im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 19.05.2008, 18:16
  5. Funkfernbedienung mit 868MHz
    Von PraktiSE1 im Forum Elektronik
    Antworten: 8
    Letzter Beitrag: 13.10.2004, 13:17

Berechtigungen

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