Ich steuere mit meinem Code einen 868,35Mhz Sender um ELV FS-20 Empfänger anzusteuern. Hierfür muss ich z.B. den Hauscode (im Programm unten als HC1 bezeichnet) "1234" hexadezimal umrechnen. Nachdem ich viele verschiedene Codes schicke und ich auch die Quersumme berechnen muss hätte ich das gerne in eine Formel gepackt die mir das abnimmt.

Mir wurde gesagt, dass ich "1234" für mein programm so umrechnen muss:

Umrechnung: jede Ziffer -1, dann den binären Wert (2 bit) aller 4 Ziffern zusammensetzen, HC 1234 ergibt binär: 00 01 10 11 = hex: 1B


$regfile = "m8def.dat"
$hwstack = 32
$swstack = 10
$framesize = 40
$crystal = 12000000
$baud = 19200
Baud = 19200

Config Portb.1 = Input
Taster Alias Pinb.1

Config Pind.2 = Input
Nirq Alias Pind.2

Config Pind.7 = Output
Fsk Alias Portd.7

Led Alias Portd.5
Config Portd.5 = Output 'LED zur Kontrolle

Dim Count As Byte
Dim Temp As Byte
Dim Cmd(2) As Byte
Dim Par As Byte
Dim Hc1 As Byte
Dim Hc2 As Byte
Dim Ag As Byte
Dim Befehl As Byte
Dim Quersumme As Byte


Hc1 = &H1B
Hc2 = &H1B
Ag = &H50
Befehl = &H12
Quersumme = &HFE



Declare Sub Rf_cmd(byval Tmp As Word) As Word
Declare Sub Parity(byval Par_byte As Byte) As Byte
Declare Sub Send(byval Sendbyte As Byte) As Byte

'config SPI
Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 64 , Noss = 0
'Config Spi = Soft , Din = Pinb.4 , Dout = Portb.3 , Ss = Portb.2 , Clock = Portb.5

'init the spi
Spiinit

Waitms 100

Toggle Led


Call Rf_cmd(&Hcc00)
Call Rf_cmd(&H9072) '868MHzband, 12pf, fsk90kHz, 1MHz clock
Call Rf_cmd(&Ha686) '868,35 MHz
'Call Rf_cmd(&Hc811) '19,2 kbit
Call Rf_cmd(&Hc220) 'tx bit sync
Call Rf_cmd(&Hc001) 'TX off
Call Rf_cmd(&Hd240) 'PLL 25%
Call Rf_cmd(&Hbb00) 'OOK on, -9 db
Call Rf_cmd(&He000) 'disable wakeup timer

Do

Bitwait Taster , Set


Toggle Led

Call Rf_cmd(&Hcc00)
Call Rf_cmd(&Hc03 'TX on

Waitms 1

For Count = 1 To 12
Gosub Send_0
Next
Gosub Send_1

Call Send(hc1)
Call Send(hc2)
Call Send(ag)
Call Send(befehl)
Call Send(quersumme)
Gosub Send_0

Call Rf_cmd(&Hc001) 'TX off

Reset Led

Wait 2

Loop

Sub Send(byval Sendbyte As Byte) As Byte
For Count = 0 To 7
Temp = Sendbyte And &H80
If Temp = &H80 Then
Gosub Send_1
Else
Gosub Send_0
End If
Rotate Sendbyte , Left , 1
Next
Call Parity(sendbyte)
End Sub



Sub Parity(byval Par_byte As Byte) As Byte
Par = 0
For Count = 0 To 7
Par = Par Xor Par_byte.count
Next
If Par = 1 Then
Gosub Send_1
Else
Gosub Send_0
End If
End Sub



Send_0:
Set Fsk
Waitus 400
Reset Fsk
Waitus 400
Return

Send_1:
Set Fsk
Waitus 600
Reset Fsk
Waitus 600
Return


Sub Rf_cmd(byval Tmp As Word) As Word
Cmd(2) = Tmp And 255
Shift Tmp , Right , 8
Cmd(1) = Tmp
Spiout Cmd(1) , 2
End Sub