-         

Ergebnis 1 bis 8 von 8

Thema: Komischer Fehler bei Rs232

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    20.02.2007
    Beiträge
    341

    Komischer Fehler bei Rs232

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Hi,

    ich sende einen String mit einem Zahlenwert an den µC

    Code dafür ist folgender:

    Code:
    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

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    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

    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 !

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    20.02.2007
    Beiträge
    341
    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

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    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 !

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    20.02.2007
    Beiträge
    341
    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

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.05.2007
    Beiträge
    329
    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.

  7. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    17.02.2005
    Ort
    NRW-Bergisches Land
    Beiträge
    311
    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.
    Gruß RePi!


    *** Holzhacken ist deshalb so beliebt, weil man bei dieser Tätigkeit den Erfolg sofort sieht. ***
    *** (Albert Einstein) ***

  8. #8
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.05.2007
    Beiträge
    329
    Hallo,

    sowas...

    Code:
       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

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •