-
        

Ergebnis 1 bis 10 von 10

Thema: Byte empfangen über RS232

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    87
    Beiträge
    627

    Byte empfangen über RS232

    Anzeige

    Hallo,
    ich möchte 10 werte = 10 Byte von einem µC zum anderen senden.
    Es sind immer 10 Werte und es sendet immer der selbe µC.

    Am Anfang sende ich "250" als Start, dann die 10 DatenBytes und dann Wert "251"

    Code:
     Dim Test(10) As Byte                                       'als Array
     Dim C As Byte
    '---
    Do
    
    For C = 1 To 10
      Test(c) = C                                               'fill array
    Next
    
    Print Chr(250);                                           'zum starten
    Printbin Test(1) ; 10                                    'hier die Daten
    Print Chr(251);                                           'Ende
    
    
        Wait 2
    
    
    Loop
    
    End

    Das funktioniert und ich kann die Daten am PC sehr schön sehen!

    Nun der Empfang:

    Wert 250 wird empfangen und setzt Variable N auf "0"
    Bei jedem empfangenem Byte wird N um 1 hochgezählt
    und "E_byte" wird in "Test(N)" übertragen.
    Wird 251 empfangen soll die Variable z.B. "Test(3)" auf dem LCD angezeigt werden.
    Leider wir nur T:T:T:T:T:T:T:T:T:T:T:T: angezeigt....

    Was muss ich ändern?
    Tobias

    Code:
    Dim N As Byte
    Dim Test(10) As Byte                                        'als Array
    
    'Für RS232:
    On Urxc Onrxd                                               'Interrupt-Routine setzen
    Enable Urxc                                                 'Interrupt URXC einschalten
    Enable Interrupts                                           'Interrupts global zulassen
    
    Do
    
    Loop
    End
    
    
    Onrxd:
    Incr N 
    
    E_byte = Udr
    
    Select Case E_byte
      Case 250 : N = 0                                          'Empfang starten
                  Cls
      Case 251 :    Lcd "T:" ; Test(3)                       'Empfang beenden
    
      Case Else : Test(n) = E_byte
    
    End Select
    
    
    Return
    ...

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    87
    Beiträge
    627
    Der Empfang klappt - aber nur einmal...

    Ich sende 1 mal pro Sekunde 10 neue Werte. Leider zeigt der Empfänger keine Veränderung.
    Die Variable "N" hat immer den Wert 14!

    Tobias
    ...

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.410
    Blog-Einträge
    101
    Hallo,
    ein PRINT sendet immer noch ein CR LF von sich aus hintendran.

    Mit Print Chr(250); geht 0xFA 0x0D 0x0A über die RS232 raus.
    Der Zähler N wird mit 250 auf 0 gesetzt und mit dem CR LF geht er auf 2
    Es folgen 10 Byte durch Printbin und Zähler N ist auf 12.
    Mit Print Chr(251); müßte im Empfänger N auf 15 gezählt werden; vielleicht wird durch das Lcd Kommando da der Empfang eines Zeichens verhindert oder der Indexüberlauf von test(n) zerstört etwas.

    Statt PRINT könntest Du PUT benutzen.

    Soweit meine Theorie.

    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    87
    Beiträge
    627
    Hallo,
    das ist nicht ganz richtig:
    Der Printbefehl sendet grundsätzlich CR & LF mit. Durch das ";" hinter dem Printbefehl wird das verhindert.
    Deshalb das ";" am Ende: Print Chr(250);

    Aber davon abgesehen wartet der Empfänger bis 251 gesendet wird und zählt nicht die eingehenden Pakete ab.

    Da muss noch etwas anderes sein.

    Tobias
    ...

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.410
    Blog-Einträge
    101
    Hallo,

    Der Printbefehl sendet grundsätzlich CR & LF mit. Durch das ";" hinter dem Printbefehl wird das verhindert.
    Stimmt! Hab ich bisher nicht beachtet.

    Neue Theorie:
    Könnte es sein, daß Du das RS232 Signal vom Sender zum Empfangs µC noch invertieren mußt?

    Ein Interface zwischen µC und PC invertiert gewissermaßen - da kommen Deine Daten gut im PC an. Wenn Sender- und Emfangs-µC direkt verbunden sind, könnte durch die Nichtinvertierung was schiefgehen. Die ankommenden Daten könnten auf dem Lcd nicht darstellbar sein. Irgendwas kommt ja an, sonst wäre N nicht auf 14?

    http://de.wikipedia.org/wiki/RS-232#...men_und_Timing

    Entschuldige, wenn das Murks ist was ich geschrieben habe. Ich nehme SW-UART und wenn die Daten nicht richtig sind, kann man da im OPEN Kommando mit INVERTED die Polaritäten auf TX invertieren.


    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  6. #6
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Denke, dein PC-TErminal ist vifer als dein Empfangs-µC

    Du schickst binäre Zeichen (&H01-&H0A). Das kann dein LCD nicht herzeigen.
    Mach als Test erstmal druckbare Zeichen, zB so:
    Code:
    For C = 1 To 10
      Test(c) = C + 47                                               'fill array &H30 - &H39 d.i.   ascii "0" - "9"
    Next

    und probier's dann
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    87
    Beiträge
    627
    merkwürdiger weise steht nun 48 49 53 54 auf dem LCD - ich habe aber die ersten 4 abgefragt... (also 48,49,50,51)

    so - nun mal etwas aufwändiger:

    Beide µC haben ein LCD.
    Der Sender hat zusätzlich ein Poti um den Wert zu erhöhen(0-1023)
    Sender LCD zeigt Poti=0; Werte sind 1,2,3,4,5,6,7,8,9,10 auf dem LCD
    Am Anfang wird "250" gesendet, dann die Werte udn am Ende "251"
    Am PC kann ich genau diese Kette korrekt sehen(siehe Bild).

    Nun zum Empfang:
    Das LCD zeigt: 1,2,6,7,8,9,10,0,0,0

    In der Do...Loop steht nichts.
    Code:
    Onrxd:
    Incr N
    
    E_byte = Udr
    
    Select Case E_byte
      Case 250 : N = 0                                          'Empfang starten
                 Cls
      Case 251 : Gosub Anzeige
    
      Case Else : Test(n) = E_byte
    
    End Select
    Return
    
    Anzeige:
    Locate 1 , 1
    Lcd Test(1)
    Locate 1 , 5
    Lcd Test(2)
    Locate 1 , 9
    Lcd Test(3)
    Locate 1 , 13
    Lcd Test(4)
    Locate 1 , 17
    Lcd Test(5)
    Locate 2 , 1
    Lcd Test(6)
    Locate 2 , 5
    Lcd Test(7)
    Locate 2 , 9
    Lcd Test(8)
    Locate 2 , 13
    Lcd Test(9)
    Locate 2 , 17
    Lcd Test(10)
    Return
    Wenn ich das Poti verändere ändern sich auch die Werte auf beiden LCD´s. Nur das bei dem Empfänger immer dieser Sprung ist.

    Hardware: beide µC nutzen HW-UART 9600Baud und haben je einen MAX232 - und die Hardware läuft denke ich einwandfrei.
    Der Wert "250" am Anfang wird wohl erkannt, da die Empfangsreihenfolge stimmt - die "251" wird erkannt, da sonst das empfangene nicht auf dem LCD erscheinen kann.

    Tobias
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken input.PNG  
    ...

  8. #8
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    bei meiner Testgeschichte hab ich dir was unterschlagen:
    da müsstes du schreiben

    Lcd "T:" ; chr(Test(3) )
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  9. #9
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    Vielleicht doch mal das CLS in die Ausgabe verschieben. Was besseres fällt mir auch grad nicht ein. Sehr sonderbarer Effekt.

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    87
    Beiträge
    627
    Zitat Zitat von radbruch Beitrag anzeigen
    Vielleicht doch mal das CLS in die Ausgabe verschieben. Was besseres fällt mir auch grad nicht ein. Sehr sonderbarer Effekt.
    frag mich bitte nicht was das CLS das zu suchen hat und wie es da hingekommen ist...
    ja, das war der Fehler - so ein blöder Fehler...

    @all: vielen Dank für eure Hilfe!!!

    Tobias
    ...

Ähnliche Themen

  1. Daten mit RN-Control über RS232 empfangen
    Von Torrentula im Forum C - Programmierung (GCC u.a.)
    Antworten: 0
    Letzter Beitrag: 28.12.2010, 12:32
  2. Über RS232 etwas empfangen
    Von MechMac im Forum C - Programmierung (GCC u.a.)
    Antworten: 0
    Letzter Beitrag: 12.09.2010, 20:19
  3. Über RS232 Wort Empfangen und auswerten
    Von winke im Forum Controller- und Roboterboards von Conrad.de
    Antworten: 3
    Letzter Beitrag: 19.08.2006, 21:30
  4. 8 Byte über RS232 | Protokoll?
    Von Goblin im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 12
    Letzter Beitrag: 12.07.2006, 20:48
  5. Befehle über RS232 empfangen
    Von addict im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 11.02.2005, 20:09

Stichworte

Berechtigungen

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