PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Long in Bytes zerlegen - RS232 - und wieder zusammenbauen ??



m@rkus33
25.01.2006, 20:36
Hallo zusammen,


ich komme hier nicht weiter.

Ich habe zwei Mega8 die ständig mit einander über RS232 kommunizieren.

Ich habe nun Long-Variablen die ich in Bytes zerlegen, über RS232 senden und auf der Gegenseite wieder zusammenbauen möcht.

Also die Kommunikation über RS232 mit Startbyte, Array und Checksum funktioniert alles einwandfrei.

Momentan gehe ich bei der Zerlegung der Variablen "mathematisch" vor. Das ist glaub ich weder effektiv noch elegant und ein Resoursenfresser.

Ich habe es bisher so beim Sender:



....

Dim Eu as Long
Dim Eur1 as Long
Dim Eur2 as Long
Dim Eur3 as Long

Dim Eu1 as Byte
Dim Eu2 as Byte

'als Beispiel nur eine der insgesamt 7 Variablen des Arrays

Eu= 89800 'Beispielwert

Eur1 = Eu / 255
Eur3 = Eur1 * 255
Eur2 = Eu - Eur3

Eu1 = Eur1
Eu2 = Eur2

'geht das da oben nicht einfacher??????????


C = 0
D = 0

Stb = 233

B(1) = VariableX
B(2) = VariableA1
B(3) = VariableA2
B(4) = T1
B(5) = T2
B(6) = Eu1
B(7) = Eu2


For D = 1 To 7
C = C Xor B(d)
Next
Printbin Stb ; B(1) ; C

Senden und Empfangen ist kein Problem!



Mir ist wichtig das ich die Bytes der "aufgeteilten" Variablen ganz klar unterseiden kann. Also am liebsten so.

B(6) = Teil eins der Variablen EU
B(7) = Teil zwei der Variaben EU

Hier der Empfänger:




......
Dim Eu As Long
Dim Euneu3 As Long
Dim Euneu2 As Byte
Dim Euneu1 As Byte

' hier werden die Daten empfangen----

Euneu3 = Euneu1 * 255
Euneu = Euneu3 + Euneu2



Ich hab irgendwie was von SHIFT usw. gelesen. Aber irgendwie peil ich das gar nicht.

Wie geht das denn einfacher, ohne viele Variablen zu "verbraten" und mir den Controller zukleistere?

Gruß
Markus

PicNick
26.01.2006, 08:30
Guck mal da, so könnte das gehen
https://www.roboternetz.de/wissen/index.php/Bascom_UART_Input#OVERLAY

m@rkus33
26.01.2006, 11:30
Hallo PicNic,

...hmm klappt nicht so richtig.

Ich habe nun:


Dim D as Byte
Dim C as Byte

Dim Stb2 As Byte
Dim Tvb1 As Word
Dim Schwelle1 As Word
Dim Dfmvolumen1 As Long
Dim S2(8) As Byte At Tvb1 Overlay

.......

Readeeprom Tv , 1
Readeeprom Schwelle , 10
Readeeprom Dfmvolumen , 300

cls
Locate 1,1
Lcd tv
Locate 1,10
Lcd schwelle
Locate 2,1
Lcd Dfmvolumen

Tvb1 = Tv
Schwelle1 = Schwelle
Dfmvolumen1 = Dfmvolumen

D=0
C=0
Stb2 = 233

For D = 1 To 8
C = C Xor S2(8)
Next

Printbin Stb2 ; S2(8) ; C


Im Terminalprogramm steht aber nur "233 0 0"
also ist S2(8) leer obwohl die daten da sind und auf den LCD angezeigt werden.

Gruß
Markus

PicNick
26.01.2006, 11:38
S2 (8) ist das höchst-signifikante byte vom dfvolumen1.
Wenn du in dfvolumen1 = 300 reinschreibst,
ist S2(5) = 0x2c
ist S2(6) = 0x01
ist S2(7) = 0x00
ist S2(8) = 0x00

Rage_Empire
26.01.2006, 11:48
Hm, hatten wir nicht erst ein ähnliches Thema?

https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=16141&highlight=

m@rkus33
26.01.2006, 17:06
@rage_empire

sorry hab ich ganz vergessen.



Zerleg doch dein Long in Bytes. Das kannst du ganz einfach mit "DIM.....at...overlay" Dann schickst du die Bytes rüber und dein Empfänger baut diese dann wieder zu Long.


Das hab ich mir echt zig mal angeschaut. Beim Sender funktioniert das schon.

Nur wie mache ich das nun genau beim Empfänger? Siehe unten

@PickNic

ah ja richtig ich habe ja nur S2(8) im Print drin. Logisch kann net gehen.

Also müsste es dann richtig lauten:

Printbin S2(1) , 8 richtig?

Nur wie fasse ich die 8 Bytes dann am Empfänger wieder zusammen.

Reicht das wenn ich beim Empfänger schreibe:

Dim Tvb1 as Word
Dim Schwelle1 as Word
Dim Dfmvolumen1 as Long
Dim S2(8) as Byte at Tvb1 Overlay

Inbputbin S2(1) , 8

Wie weise ich dann den Variablen beim Empfänger dann wieder die richtigen Bytes zu??

Sorry aber ich check des echt noch nicht ganz.

Gruß
Markus

PicNick
26.01.2006, 19:10
wenn du sendest
printbin s2(1), 8
mußt du auch empfangen
inputpin s2(1), 8
mehr isses eigentlich nicht

m@rkus33
26.01.2006, 23:46
.... auf die Gefahr hin das ich nerve....

also das Senden funzt. Auf dem Terminalprogramm sehe ich es wunderbar. 8 Datenbytes gehen raus

Aber das Empfangen nicht.

Beim Empfänger hab ich:

Dim A As Word
Dim B As Word
Dim C As Long
Dim S2(8) As Byte At A Overlay

inputbin S2(1) , 8

Warum sind dann die Variablen alle mit "0" wenn ich mir es anzeigen lasse?

Beim Sender ist alles identisch halt nur mit printbin S2(1) , 8

Sorry aber ich raff dat net warum das nicht geht.


Mein Empfänger hat nix in den Variablen.

Gruß
Markus