Hallo.
leider komme ich doch nicht weiter...
Ich wollt dieses Programm anpassen doch ich sehe das nicht durch:
https://www.roboternetz.de/community...k%FCbertragungCode:$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
Vielleicht hat ja einer den Durchblick, dass ich das oben genannte Protokoll senden kann.
Danke... Gruß Uwe






Zitieren
Lesezeichen