Problem mit ComRead der MVCOM

Hardware- und Elektronikbasteleien, Ansteuerung von Schnittstellen und Peripherie.
Fragen zu "Consumer"-Problemen kommen in Offtopic.
Graffiti
Beiträge: 173
Registriert: 30.08.2004 08:34
Wohnort: Thailand

Problem mit ComRead der MVCOM

Beitrag 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
super_castle
Beiträge: 557
Registriert: 29.11.2005 15:05

Beitrag von super_castle »

zeig mal deine comread...
Graffiti
Beiträge: 173
Registriert: 30.08.2004 08:34
Wohnort: Thailand

Beitrag 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
Graffiti
Beiträge: 173
Registriert: 30.08.2004 08:34
Wohnort: Thailand

Beitrag 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)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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?
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Graffiti
Beiträge: 173
Registriert: 30.08.2004 08:34
Wohnort: Thailand

Beitrag 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
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Ich hab mir einfach gemacht, weil Dein Code ja existiert :mrgreen:

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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Graffiti
Beiträge: 173
Registriert: 30.08.2004 08:34
Wohnort: Thailand

Beitrag 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
Benutzeravatar
Helmut
Beiträge: 162
Registriert: 20.09.2004 22:53

Beitrag 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
Benutzeravatar
Kiffi
Beiträge: 10719
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

<OT>
Helmut hat geschrieben:Sorry wenn es nicht übereinander steht, liegt am Editor....
Dafür kannst Du prima die Code-Tags (

Code: Alles auswählen

[/code ]) verwenden.

</OT>

Grüße ... Kiffi
a²+b²=mc²
Antworten