PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Komischer Fehler bei Rs232



Blamaster
20.07.2008, 15:10
Hi,

ich sende einen String mit einem Zahlenwert an den µC

Code dafür ist folgender:



Isrlabel:

Empfang = ""

Input , Empfang

Cls
Locate 1 , 1
Lcd Empfang

Y = Val(empfang)

Eekanal(x) = Y

Locate 2 , 1
Lcd Y

Incr X

Return


Wenn ich nun z.B. eine 12 als String an den µC sende wird auf dem display in der oberen Zeile die 12 als String angezeigt, und in der unteren Zeile auch die 12 umgewandelt in ein Byte.

Wenn ich nun noch eine weitere Zahl als string an den µC sende z.B. eine 13, dann steht in der oberen zeile des Displays vor der 13 ein komisches beinahe chinesisches Schriftzeichen und in der unteren eine 0, weil der String dann scheinbar nicht mehr in ein Byte umgewandelt werden kann.

Nun frage ich mich wo kommt dieses komische zeichen her ?

Beim 1. Senden über die rs232 schnitstelle an den µC funktioniert alles wie es soll, aber nach dem 1. Senden kommt jedesmal diese komische Zeichen.

Jemand eine Idee woran das liegen kann ?

mfg Blamaster

linux_80
20.07.2008, 16:28
Hi,

13 kann als Zeichen eig. nicht dargestellt werden, es ist als "Wagenrücklauf", besser bekannt in der engl. Abkürzung "CR", definiert.

Bei Text-LCDs können die ersten 8 Zeichen selber definiert werden, evtl. ist das dann ein Zufallswert aus dem RAM des LCDs :-k

Und, in 'ner ISR würde ich nicht soviele Funtionnen unterbringen, vor allen wenns um Zeichenausgabe auf LCD usw. geht. Denn was ist, wenn im Hauptprogramm der IRQ genau während einer LCD-Ausgabe auftritt, kommt nur Chaos raus, oder das LCD zeigt dann garnix mehr an !

Blamaster
20.07.2008, 16:39
Die 13 wird ja als string gesendet insofern sollte das nichts machen. Es ist auch total egal was ich an zahlen sende ... Beim 1. mal funktioniert es alle weiteren Male enthalten diese Zeichen.

Das ich nicht zu viel im Isrlabel unterbringen sollte weiß ich aber es geht momentan eher um testzwecke bis das Problem gelöst ist.

Ich hoffe es hat noch jemand eine Idee.

mfg Blamaster

linux_80
20.07.2008, 16:52
Du wandelst doch aber den Wert dann in eine Zahl um.
Wie ist Y dimensioniert ?
Wenn im String keine Zahl erkannt wird, oder u.a. ein weiteres Zeichen zB. " " vorkommt, gibts eine 0 !
Evtl. ist Y nur zu klein für den Wert !

Mit Input kann man auch gleich zB. einen Integer angeben, dann ist automatisch schon eingeschränkt was man und wieviel eingegeben werden kann.

Zeig mal mehr vom Programm, sonst wird das nur 'ne Ratestunde !

Blamaster
20.07.2008, 17:01
Y ist als Byte deklariert.

Das es zu dem Fehlwert von Y durch das zeichen im String kommt, habe ich mir ja auch schon gdacht. die Frage ist ja nur wodurch das zeichen erzeugt wird und wieso es erst ab dem 2. gesendeten string autaucht und nicht schon bei dem 1.

Der rest des codes ist unerheblich, da dieses hier die einzige stelle ist die im zusammenhang mit der rs232 schnitstelle steht.

mfg Blamaster

guenter1604
20.07.2008, 20:13
Hallo Blamaster,

linux_80 hat da schon recht. Ein bisschen mehr Code würde die Sache wesentlich erleichtern.
Wie schliesst du den String beim Senden ab? mit einem CR oder CR-LF ? Wie hast du den Empfang realisiert ? Bytematch = 13 ?

Dann würde ja noch ein LF im Puffer stehen und ein komisches Zeichen machen.

repi64
20.07.2008, 20:54
Hört sich an wie das alte Problem mit dem verbleibenden LF im Buffer.
Entweder strings nur mit CR terminieren (ohne LF) oder im µC unter Config Input die Terminierung auf CRLF stellen.
Oder aber vor dem nächsten Input den Buffer leeren.

guenter1604
20.07.2008, 21:10
Hallo,

sowas...



Input Serinpstr
'zum Abtrennen eines oder mehrerer LF am Anfang des Strings, das noch vom Vorg?nger-String im Buffer steht
While Asc(serinpstr) = 10
Strsize = Len(serinpstr) - 1
Serinpstr = Right(serinpstr , Strsize)
Wend
'Hier ist der String empfangen und ein event. LF entfernt



Günter