Seite 2 von 2

Re: Frage zum Com Port

Verfasst: 08.04.2010 13:01
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?

Re: Frage zum Com Port

Verfasst: 08.04.2010 18:13
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

Re: Frage zum Com Port

Verfasst: 08.04.2010 19:24
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.

Re: Frage zum Com Port

Verfasst: 09.04.2010 17:22
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


Re: Frage zum Com Port

Verfasst: 09.04.2010 19:54
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...

Re: Frage zum Com Port

Verfasst: 10.04.2010 09:23
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.