Seite 1 von 2
Problem mit ComRead der MVCOM
Verfasst: 08.11.2006 09:45
von Graffiti
Hallo
ich sende über den Com Anschluß 8 Byte an einen Microcontroller und mittels des Pingkomando sendet der MC die selben Befehle unmittelbar zurück.
Aber es kommt nicht genauso zurück wie es gesendet wird.
Ich habe schon mehrere Variationen versucht ohne Erfolg, entweder bekam ich nur das erste Byte nach dem Ping zurück oder eine Zahl um die 142000
Code: Alles auswählen
Procedure ausgabemvcom()
Dim Buffer.c(7)
Buffer(0) = 26
Buffer(1) = 29 ; Komando Ping
Buffer(2) = 2
Buffer(3) = 4
Buffer(4) = 8
Buffer(5) = 16
Buffer(6) = 0
Buffer(7) = 0
ComWrite(Hcom, @Buffer(0), 8)
EndProcedure
; sollte eigentlich 2 4 8 16 0 zurückkommen in 5 Bytes
comread ??????
gruß und schonmal Danke
Graffiti
Verfasst: 08.11.2006 21:13
von super_castle
zeig mal deine comread...
Verfasst: 08.11.2006 22:04
von Graffiti
und jetzt was zum lachen !!!
ich glauge so doof wie ich ist hier keiner im Forum
ICH HABE DIE PROCEDUR ZUM INITIALISIEREN
DES COMPORT NICHT AUFGERUFEN.
OHNE COM KEINE ANTWORT
oh mann und ich mach stundenlang daran rum,
bin fast am verzweifeln und sehe den Wald vor lauter Bäumen
nicht mehr
und siehe da jetzt reagiert sogar der Microcontroller
nix für ungut, gruß Graffiti
Verfasst: 08.11.2006 22:20
von Graffiti
noch schnell der Code wie es auch geht
Code: Alles auswählen
Global Hcom
Procedure Initmvcom()
MyCom.s = "Com1: baud=9600 Parity=n Data=8 stop=2"
Hcom = ComOpen(MyCom,0,255,255)
EndProcedure
Procedure ausgabemvcom()
Dim Buffer.c(7)
Buffer(0) = 26
Buffer(1) = 29;befehl
Buffer(2) = 2;wert1
Buffer(3) = 4;wert2
Buffer(4) = 8;wert3
Buffer(5) = 16;wert4
Buffer(6) = 0;wert5
Buffer(7) = 0
ComWrite(Hcom, @Buffer(0),8)
EndProcedure
Dim Bufferaus.c(7)
Initmvcom() ; <--------------------- hier hab ichs vergessen
ausgabemvcom()
ComRead(Hcom,@Bufferaus(0),8)
Debug Bufferaus(0)
Debug Bufferaus(1)
Debug Bufferaus(2)
Debug Bufferaus(3)
Debug Bufferaus(4)
Debug Bufferaus(5)
Debug Bufferaus(6)
Debug Bufferaus(7)
ComClose(Hcom)
Verfasst: 08.11.2006 22:34
von ts-soft
Geht das auch so:
Code: Alles auswählen
Hcom = ComOpen("Com1: baud=9600 Parity=n Data=8 stop=2", 0, 255, 255)
Buffer.q = 17626613030170
ComWrite(Hcom, @Buffer,8)
Haste mal probiert mit Quad?
Verfasst: 08.11.2006 22:54
von Graffiti
habe ich noch nicht probiert,sieht aber interessant aus
wie ist das ganze organisiert?
ich kann eigentlich die 8 Bytes nicht rauslesen
wo das eine anfängt und das andere aufhört
kannste mir mal ein Beispiel posten
zB. 26 , 29 , 255 , 16 , 8 , 100 , 0 , 0
Verfasst: 08.11.2006 23:03
von ts-soft
Ich hab mir einfach gemacht, weil Dein Code ja existiert
Code: Alles auswählen
Dim Buffer.c(7)
Buffer(0) = 26
Buffer(1) = 29;befehl
Buffer(2) = 2;wert1
Buffer(3) = 4;wert2
Buffer(4) = 8;wert3
Buffer(5) = 16;wert4
Buffer(6) = 0;wert5
Buffer(7) = 0
Debug PeekQ(@Buffer())
Im ASCII-Modus ist Dein Buffer ja 8 Byte gross, sowie ein Quad auch.
Nachtrag:
Sollte eigentlich gehen
Code: Alles auswählen
Buffer.q = 17626613030170
For I = 0 To 7
Debug PeekB(@Buffer + I)
Next
Verfasst: 08.11.2006 23:21
von Graffiti
der Code ändert sich ständig, da die Daten im Microcontroller nie die selben sind.
das größte Problem das ich noch habe ist eine Bitschieberei, da im Microcontroller von Wert 1 bis Wert 4 nie eine 1 auf dem Bit 0 sein darf
Beispiel:
das LSB von Wert1 muß auf Bit 7 von Wert 5
das LSB von Wert2 muß auf Bit 6 von Wert 5
das LSB von Wert3 muß auf Bit 5 von Wert 5
das LSB von Wert4 muß auf Bit 4 von Wert 5
(LSB = Bit 0)
wenn Wert1 ursprünglich 57 ist,
wird Wert1 56 und Wert5 -> 1000000 (128)
und wenn dann Wert3 ursprünglich 177 ist,
wird Wert1 176 und Wert5 -> 1010000 (160)
das ist noch ne riesen Denksportaufgabe für mich
Verfasst: 09.11.2006 00:33
von Helmut
Warum, was soll das werden? Prüfsummenermittlung?
Meinst du es so?
Sorry wenn es nicht übereinander steht, liegt am Editor....
LSB-Negierung für Wert1 bis Wert4
Wert1= XXXX XXXX , Flag für Wert1(-4) setzen, wenn Bit0=1 war
AND 1111 1110
Ergebniss XXXX XXX
Beispiel 1110 0101 Flagw1=1
AND 1111 1110
Ergebiss 1110 0100
Wenn Flagw1 =1 ist
den Wert5 mit 1000 0000 verodern
Beispiel mit Wert3, soll 1 im Bit0 gewesen sein:
Wert5 XXXX XXXX
OR 0010 0000
Ergebniss XX1X XXXX
mit LEVELN
Wert5 1011 1110
OR 0010 0000 (Flagw3 war 1)
Ergebniss 1011 1110
Verfasst: 09.11.2006 00:58
von Kiffi
<OT>
Helmut hat geschrieben:Sorry wenn es nicht übereinander steht, liegt am Editor....
Dafür kannst Du prima die Code-Tags (