Frage zum Com Port

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: Frage zum Com Port

Beitrag von HeX0R »

H.Brill hat geschrieben: PS: Hab dein Code mal abgeändert (String = Space(16),
und ReadSerialPortData() auf 16, Right(..., 7, usw.).
Jetzt kommt an beiden nur noch Gemüse an.
Du musst darauf achten, das Programm nicht als Unicode Exe zu compilieren.
Ansonsten sollte kein Gemüse ankommen, hast dir den ganzen String auch mal angeschaut?
Hast du den Empfangs- und Sendepuffer in meinem Beispiel verändert?
Benutzeravatar
H.Brill
Beiträge: 496
Registriert: 15.10.2004 17:42
Wohnort: 66557 Neunkirchen

Re: Frage zum Com Port

Beitrag von H.Brill »

Unicode - exe benutze ich sowieso
so gut wie nie, besser hatte ich noch
nie gebraucht. Ist auch in den Optionen
ausgeschaltet.

Hatte gestern abend noch in meinem
Basom-Buch nachgesehen. Da stand
etwas versteckt, daß der Print - Befehl
(zum Senden an den Com Port) automatisch
ein CR/LF anhängt.

Habe jetzt das ganze mal auf 17 Zeichen
begrenzt und im Atmel das Chr(10) am Ende
weggelassen. Da ich die Daten später noch
in einem ListIcon-Gadget weiter verarbeiten
möchte, habe ich 2 Stringvariablen Global
eingeführt (Snsor1.s + Sensor2.s).
Führt auch nicht zu richtigen Ergebnissen.
Sobald ich die Sensoren berühre, zeigen die
Editfelder und auch die Debug-Ausgabe nicht
richtig an.

Code: Alles auswählen

If Bytes >= 17
   ;O.k., here we go, read this one
   ReadSerialPortData(#My_ComPort, @String, 17)
   Sensor1 = Right(String, 9) ; wg. CR/LF
   Sensor2 = Left(String, 7)
   SetGadgetText(#String_Sensor_1, Sensor1)
   SetGadgetText(#String_Sensor_2, Sensor2)
   ;CheckedSensor ! 1 ;<- will switch from 0 -> 1 and from 1 -> 0
   Debug String
EndIf
PB 6.10
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: Frage zum Com Port

Beitrag von HeX0R »

Wenn ich dir helfen soll, solltest du alle meine Fragen beantworten...

Nichts desto trotz:
Mach doch einfach mal ein

Code: Alles auswählen

Debug String
hinter

Code: Alles auswählen

ReadSerialPortData(#My_ComPort, @String, 17)
dann solltest du doch sehen, was überhaupt ankommt, und wo es klemmt.
Benutzeravatar
H.Brill
Beiträge: 496
Registriert: 15.10.2004 17:42
Wohnort: 66557 Neunkirchen

Re: Frage zum Com Port

Beitrag von H.Brill »

Steht doch oben in meinem Codeschnipsel.
Letzte Zeile vor dem Endif.
Habs jetzt auch mal direkt hinter ReadSerialData
geschrieben. Da aber die Variable String nicht
verändert wird, ists wohl sch...egal wo Debug
steht.
Hab den Debug-Output mal gespeichert
(siehe unten). Wenn ich stop mache und
wieder neu starte geht es wieder normal.
Unten sieht man schön, wenn ich an die
Sensoren greife. Das ist dort, wo die Werte
85.0 haben.
So, wie ich das sehe, ist das eher
ein Timing-Problem, da mein Programm
mitten in den Empfangsstream reingreift.
Und da der Atmel (alle 500 MS) und mein
Programm (alle 50 MS) laufen, kommen auch
immer die 3 Stellen falsch.

Code: Alles auswählen

+24.6 C|+25.3 C

+24.6 C|+25.3 C

+24.6 C|+25.3 C

+24.6 C|+25.3 C

+24.6 C|+25.3 C

+24.6 C|+25.3 C

+24.6 C|+25.2 C

+24.6 C|+25.2 C

+24.6 C|+25.2 C

+24.6 C|+25.2 C

+24.6 C|+25.3 C

+24.6 C|+25.3 C

+24.6 C|+25.3 C

+24.6 C|+25.3 C

+24.6 C|+25.2 C

+24.6 C|+25.2 C

+24.6 C|+25.2 C

+24.6 C|+25.2 C

+24.6 C|+25.2 C+2
4.6 C
+24.6 C|+8
5.0 C
+24.6 C|+8
5.0 C
+24.6 C|+8
5.0 C
+24.6 C|+8
5.0 C
+24.6 C|+2
5.3 C
+25.0 C|+2
5.3 C
+25.0 C|+2
5.3 C
+25.0 C|+2
5.3 C
+25.0 C|+2
6.0 C
+25.9 C|+2
6.0 C
+25.9 C|+2
6.0 C
+25.9 C|+2
6.0 C
+25.9 C|+2
6.8 C
+26.6 C|+2
6.8 C
+26.6 C|+2
6.8 C
+26.6 C|+2
6.8 C
+26.6 C|+2
7.5 C
+27.1 C|+2
7.5 C
+27.1 C|+2
7.5 C
+27.1 C|+2
7.5 C
+27.1 C|+2
8.0 C
+27.5 C|+2
8.0 C
+27.5 C|+2
8.0 C
+27.5 C|+2
8.0 C
+27.5 C|+2
8.3 C
+27.8 C|+2
8.3 C
+27.8 C|+2
8.3 C
+27.8 C|+2
8.3 C
+27.8 C|+2
8.7 C
+28.1 C|+2
8.7 C
+85.0 C|+2
8.7 C
+85.0 C|+2
8.7 C
+85.0 C|+2
9.0 C
+28.1 C|+2
9.0 C
+28.1 C|+2
9.0 C
+28.1 C|+2
8.8 C
+28.1 C|+2
8.8 C
+28.0 C|+2
8.8 C
+28.0 C|+2
8.8 C
+28.0 C|+2
8.7 C
+28.0 C|+2
8.7 C
+27.8 C|+2
8.7 C
+27.8 C|+2

PB 6.10
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: Frage zum Com Port

Beitrag von HeX0R »

H.Brill hat geschrieben:Steht doch oben in meinem Codeschnipsel.
Letzte Zeile vor dem Endif.
Habs jetzt auch mal direkt hinter ReadSerialData
geschrieben. Da aber die Variable String nicht
verändert wird, ists wohl sch...egal wo Debug
steht.
Ja Mist, sorry, da hatte ich die falsche Brille auf.
H.Brill hat geschrieben: So, wie ich das sehe, ist das eher
ein Timing-Problem, da mein Programm
mitten in den Empfangsstream reingreift.
Und da der Atmel (alle 500 MS) und mein
Programm (alle 50 MS) laufen, kommen auch
immer die 3 Stellen falsch.
Es ist aber eigentlich völlig egal, die Auslesezeit muss nur kleiner, als das Timing des Atmel sein.
Es wird gewartet, bis der String vollzählig ist und erst dann reagiert.

Das Problem ist hier:

Code: Alles auswählen

...
+24.6 C|+25.2 C+2
4.6 C
...
wie man hier deutlich sieht, fehlt das #CRLF$!
Ab dann ist klar, dass sich alles verschiebt.

Es scheint dein Atmel hat an dieser Stelle diesen String verschickt: +24.6 C|+25.2 C+24.6 C + #crlf$

Nur warum ist die Frage...
Benutzeravatar
H.Brill
Beiträge: 496
Registriert: 15.10.2004 17:42
Wohnort: 66557 Neunkirchen

Re: Frage zum Com Port

Beitrag von H.Brill »

Es funktioniert jetzt. :bounce:

Habe in Bascom wieder mal die Stringlänge
geändert und nach jedem Print ein Space(17)
auf die Variable eingefügt.

Da ich in diesem Fall 2 Systeme (das Bascom-Programm
und das PB-Programm) habe, war es halt etwas schwierig,
das Problem einzugrenzen.

Danke nochmals für die Bemühungen.
PB 6.10
Antworten