PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Funksender 868MHz Temperatur / Feuchtesender



UweMD
15.02.2014, 14:03
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

UweMD
15.02.2014, 18:06
Hallo.

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


$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


https://www.roboternetz.de/community/threads/5068-Funk%C3%BCbertragung-mit-Bascom-%28-L%C3%B6sungsansatz-%29?highlight=Funk%FCbertragung

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

Danke... Gruß Uwe

UweMD
17.02.2014, 19:50
Hat keiner eine Ahnung wie ich das Protokoll in ein Bascomprogramm packen kann?

Socke
19.02.2014, 11:31
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:
https://www.roboternetz.de/community/threads/56004-Funkmodul-Steckdose-mit-bascom?highlight=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

UweMD
19.02.2014, 16:56
Hallo Socke,

Danke... ich werde mein Glück versuchen... :-)

lema67
23.04.2014, 15:24
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

http://abload.de/thumb/temperatur_webiftojnk.png (http://abload.de/image.php?img=temperatur_webiftojnk.png)

fredred
23.04.2014, 18:11
Hallo Uwe MD,

schau einfach mal im Forum BASCOM „I2C“

Gruß
fredred.