-
-
Erfahrener Benutzer
Begeisterter Techniker
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
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen