m@rkus33
18.01.2006, 12:54
Hallo zusammen,
ich drehe bald am Rad. Folgendes Problem:
Ich muss von einem Mega8 auf einen anderen über RS232 permanent Daten übertragen. Das Ganze wird als Array mit Starbit, 5 Nutzdatensätze, Checksum übertragen.
Das Problem ist: Die Nutzdatensätze können nicht alle als Byte definiert werden, da die Wertegrößen teilweise im Tausender Bereich liegen. Also sind die 5 Datensätze gemischt mit "Byte" und "Long" definiert.
Ich bekomme zwar die Daten gesandt, aber am Empfänger nicht ausgewertet. Habe schon etliche Versuche auch mit Hilfe mit veränderungen hinter mir. Nix geht.
Hier mal der Sendercode:
$regfile = "m8def.dat"
$crystal = 3686400
$baud = 9600
Dim Tank As Byte
Dim Eu As Word
Dim Tanum As Long
Dim Dfmimpulse As Long
Dim Stb As Byte
Dim C As Long
Dim B(5) As Long
Dim D As Long
'-----------------------------------------------------------------
'hier ist die Do-Loop mit dem Sammeln und schreiben der Daten
'sind alle Daten abgefragt folgt der Sprung ins Sub "Datensenden"
'-----------------------------------------------------------------
'------------------------------
'Sub Datensenden
'------------------------------
Datensenden:
Stb = 15 'Starbyte
C = 0
B(1) = Tank 'Wert von 1 - 20
B(2) = Eu 'Wert vom ADC 0-1023
B(3) = Tanum 'Wert von 0 - 10.000
B(4) = 55 'Testwert
B(5) = Dfmimpulse 'Wert von 0 - 90.000
For D = 1 To 5
C = C Xor B(d)
Next
Printbin Stb ; B(1) ; C
Waitms 250
Return
Und hier der Empfänger:
$regfile = "m8def.dat"
$crystal = 3686400
$baud = 9600
'----------------------------------------
'Hauptschleife Abfrage RS232
'---------------------------------------
D = 0
C = 0
Do
If Ischarwaiting() = 1 Then Gosub Empfang
If D = 7 Then Gosub Auswertung
'-------------------------------------
'Hier werden die Daten bearbeitet und am LCD visualiesiert
'--------------------------------------------
D = 0
C = 0
Loop
'----------------------------------------
'Subroutinen für RS232
'---------------------------------------
Empfang:
A = Inkey()
If D > 0 Then Goto Empfang2
If A = 15 Then Incr D
Return
Empfang2:
If D < 6 Then B(d) = A
C = C Xor A
Incr D
Return
Auswertung:
If C <> 0 Then
D = 0
C = 0
Return
End If
B(1) = Tank
B(2) = Euneu
B(3) = Tvnum
B(4) = Gosetup
B(5) = Dfmimpulse
D = 0
C = 0
Return
Was ist denn hier noch machbar? Gerade das Problem mit den Variablen die nicht als "Byte" definiert sind?
Gruß
Markus
ich drehe bald am Rad. Folgendes Problem:
Ich muss von einem Mega8 auf einen anderen über RS232 permanent Daten übertragen. Das Ganze wird als Array mit Starbit, 5 Nutzdatensätze, Checksum übertragen.
Das Problem ist: Die Nutzdatensätze können nicht alle als Byte definiert werden, da die Wertegrößen teilweise im Tausender Bereich liegen. Also sind die 5 Datensätze gemischt mit "Byte" und "Long" definiert.
Ich bekomme zwar die Daten gesandt, aber am Empfänger nicht ausgewertet. Habe schon etliche Versuche auch mit Hilfe mit veränderungen hinter mir. Nix geht.
Hier mal der Sendercode:
$regfile = "m8def.dat"
$crystal = 3686400
$baud = 9600
Dim Tank As Byte
Dim Eu As Word
Dim Tanum As Long
Dim Dfmimpulse As Long
Dim Stb As Byte
Dim C As Long
Dim B(5) As Long
Dim D As Long
'-----------------------------------------------------------------
'hier ist die Do-Loop mit dem Sammeln und schreiben der Daten
'sind alle Daten abgefragt folgt der Sprung ins Sub "Datensenden"
'-----------------------------------------------------------------
'------------------------------
'Sub Datensenden
'------------------------------
Datensenden:
Stb = 15 'Starbyte
C = 0
B(1) = Tank 'Wert von 1 - 20
B(2) = Eu 'Wert vom ADC 0-1023
B(3) = Tanum 'Wert von 0 - 10.000
B(4) = 55 'Testwert
B(5) = Dfmimpulse 'Wert von 0 - 90.000
For D = 1 To 5
C = C Xor B(d)
Next
Printbin Stb ; B(1) ; C
Waitms 250
Return
Und hier der Empfänger:
$regfile = "m8def.dat"
$crystal = 3686400
$baud = 9600
'----------------------------------------
'Hauptschleife Abfrage RS232
'---------------------------------------
D = 0
C = 0
Do
If Ischarwaiting() = 1 Then Gosub Empfang
If D = 7 Then Gosub Auswertung
'-------------------------------------
'Hier werden die Daten bearbeitet und am LCD visualiesiert
'--------------------------------------------
D = 0
C = 0
Loop
'----------------------------------------
'Subroutinen für RS232
'---------------------------------------
Empfang:
A = Inkey()
If D > 0 Then Goto Empfang2
If A = 15 Then Incr D
Return
Empfang2:
If D < 6 Then B(d) = A
C = C Xor A
Incr D
Return
Auswertung:
If C <> 0 Then
D = 0
C = 0
Return
End If
B(1) = Tank
B(2) = Euneu
B(3) = Tvnum
B(4) = Gosetup
B(5) = Dfmimpulse
D = 0
C = 0
Return
Was ist denn hier noch machbar? Gerade das Problem mit den Variablen die nicht als "Byte" definiert sind?
Gruß
Markus