Ich habe jetzt eine sehr einfache und zufriedenstellende Lösung gefunden die sehr schnell läuft. Erst wird ein Byte mit der Adresse empfangen. Diese ist entweder 253, 254 oder 255. Danach wird das Byte zur Motorsteuerung übertragen (dieses Byte wird immer zwischen 0 und 252 liegen). Ich glaube ich werde auch ohne Checksum keine Probleme mit Übertragungsfehlern bekommen. Wenn ich mit 200Hz Daten übertrage läuft mein µC statt mit 357 Hz noch mit 320 Hz. Das ist gut genug, da ich wohl nur mit max 10Hz Daten übertragen werde.
Wenn ich die Baud Rate auf 115200 erhöhe sind es sogar nur 12 Hz Unterschied.
Code:
$regfile = "m32def.dat"
$framesize = 64
$swstack = 64
$hwstack = 64
$crystal = 16000000
$baud = 38400
Config Serialin = Buffered , Size = 20
Enable Interrupts
Dim Recipient As Byte
Dim Message1 As Byte
Dim Message2 As Byte
Dim Message3 As Byte
Const Address1 = 253
Const Address2 = 254
Const Address3 = 255
Do
If Ischarwaiting() > 0 Then
If Recipient <> Address1 And Recipient <> Address2 And Recipient <> Address3 Then
Inputbin Recipient
End If
End If
If Recipient = Address1 Then
If Ischarwaiting() > 0 Then
Inputbin Message1
Print Recipient ; " " ; Message1
Recipient = 0
End If
End If
If Recipient = Address2 Then
If Ischarwaiting() > 0 Then
Inputbin Message2
print recipient;" ";message2
Recipient = 0
End If
End If
If Recipient = Address3 Then
If Ischarwaiting() > 0 Then
Inputbin Message3
Print Recipient ; " " ; Message3
Recipient = 0
End If
End If
Loop
Lesezeichen