Hallo,
ich habe ein Problem mit dem Befehl "printbin". Ich möchte einfach vier bytes + crc8 checksumme per UART senden (im Moment sende ich an meinen Computer). Das senden geschieht einmal per FTDI USB-> UART Wandler und einmal drahtlos per xbee. Ob ich per Funk sende oder per Kabel macht keinen Unterschied, das Ergebnis ist gleich. Hier der gekürzte Code den ich benutze:
Komischerweise wird der Bytearray sehr oft fehlerhaft übertragen / losgeschickt. Die checksumme stimmt manchmal während 1-2 sekunden nicht, danach fängt sie sich wieder, stimmt aber sehr oft wieder nicht. Außerdem kommt es manchmal vor, dass bytes verrutschen, also z.B. command(2) plötzlich command(3) ist. Ich dachte so etwas sei eigentlich nicht möglich - wird denn nicht vor dem bytearray eine startmarkierung gesendet, und danach noch eine stoppmarkierung? Wie kann das dann verrutschen? Hat jemand einen Tipp wie ich eine zuverlässige und fehlerfreie UART Verbindung für 4 Bytes hinbekomme...?Code:$regfile = "m328pdef.dat" $framesize = 256 $swstack = 256 $hwstack = 256 $crystal = 8000000 $baud = 38400 Config Serialout = Buffered , Size = 120 Clear Serialout Enable Interrupts Dim Command(5) As Byte Dim I As Byte Do For I = 0 To 255 Command(1) = 255 - I Command(2) = I Command(3) = 255 - I Command(4) = I Command(5) = Crc8(command(1) , 4) 'checksumme aus den ersten vier bytes berechnen Printbin Command(1) ; 5 Waitms 50 Next loop
Vielen Dank für eure Tipps...!
Zur vollständigkeit: Ich empfange die Daten per VB.NET, mit folgenden Befehlen:
Code:'bytearray "input" mit den 5 Bytes füllen serialport1.Read(input,1,5) 'crc8 berechnen (code aus Bascom Hilfe): unction Docrc8(ByVal s As String) As Byte Dim j As Byte Dim k As Byte Dim crc8 As Byte Dim m As integer Dim x As integer crc8 = 0 For m = 1 To Len(s) x = Asc(Mid(s, m, 1)) For k = 0 To 7 j = 1 And (x Xor crc8) crc8 = Fix(crc8 / 2) And &HFF x = Fix(x / 2) And &HFF If j <> 0 Then crc8 = crc8 Xor &H8C End If Next k Next Docrc8 = crc8 End Function







 
			
			 
					
					
					
						 Zitieren
Zitieren

Lesezeichen