- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 9 von 9

Thema: Senden vom Controller zum PC

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.09.2009
    Beiträge
    164

    Senden vom Controller zum PC

    Anzeige

    Praxistest und DIY Projekte
    Hallo zusammen,

    ich sende in einem Programm ständig Daten vom PC zum Controller und wieder ständig zurück. Das Senden vom PC zum Controller klappt wunderbar. Die Daten kommen auf dem Controller an und werden 1:1 zurück zum PC geschickt. Es kommen auch Daten am PC an, allerdings nicht in der richtigen Länge. z.B.: Ich sende den Wert "327LX" vom PC zum Controller. Nun erhalte ich den Wert "LX327L" zurück.

    Das senden vom Controller zum PC erfolgt in der do-Schleife, also ständig. Ich kann den vom Controller gesendeten Wert nicht exakt auf dem PC greifen.

    Die Länge des zu sendenden Wertes ist variabel zwischen 1 und 8 Zeichen lang.

    Controller-Programm:

    Code:
    $prog , 255 , &B11011100 ,                                  '&B11011001 ,                                  'Quarz an / Teiler aus / Jtag aus
    $regfile = "m2560def.dat"
    $hwstack = 82                                               '80
    $framesize = 68                                             ' 64
    $swstack = 68                                               '44
    $crystal = 16000000                                         'Quarzfrequenz
    Config Pind.5 = Output
    Led Alias Portd.5
    $baud = 19200
    
    
    'Config Com1 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
    'Config Com2 = 38400 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
    Config Com3 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
    'Config Com4 = 38400 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
    'Open "com1:" For Binary As #1                               'RS232
    'Open "com2:" For Binary As #2                               'RS232
    Open "com3:" For Binary As #3                               'RS232
    'Open "com4:" For Binary As #4                               'RS232
    
    
    'Dim Eingabe As Byte
    Dim Eingabe As String * 10
    Dim Ausgabe As String * 10
    
    
    Config Porth = Output
    Out1 Alias Porth.0
    Out2 Alias Porth.1
    Out3 Alias Porth.2
    Out4 Alias Porth.3
    Out5 Alias Porth.4
    Out6 Alias Porth.5
    Out7 Alias Porth.6
    Out8 Alias Porth.7
    
    
    Led = 0
    
    Do
    
     Input Eingabe
    
     Print Eingabe
    
     Led = 0
     Waitms 10
     Led = 1
     Waitms 10
     Led = 0
     Waitms 10
     Led = 1
     Waitms 10
     Led = 0
     Waitms 10
     Led = 1
     Waitms 10
     Led = 0
     Waitms 10
     Led = 1
     Waitms 10
     Led = 0
     Waitms 10
     Led = 1
     Waitms 10
     Led = 0
     Waitms 10
     Led = 1
     Waitms 10
    
    Loop
    
    End
    Hat jemand eine Idee woran das liegt?

    Vielen Dank und Grüße

    datatom

  2. #2
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Das liegt eventuell daran das der PC noch ein CR (ASCII 13) und LF (ASCII 10) hinterherschickt. Der einfachste Weg herauszufinden was nun wirklich gesendet wird ist indem du an die RS232 Schnittstelle deines PCs eine Brücke machst, sodass du das Empfängst was du sendest und es dir dann mal mit einem Hex-Terminal anschaust. Bei Bascom ist auch ein kleines Problem. Wenn du einen "Print" Befehl hast, sendet der "Print" Befehl am Ende automatisch noch ein CR (ASCII 13) und
    LF (ASCII 10) mit. D.h. wenn du nur z.B. 8 Zeichen übertragen willst und dein Wort 8 Zeichen lang ist bekommst du so Probleme, weil durch ein einfaches "Print" 10 Zeichen übertragen werden.
    Damit du aber dann nur die reinen 8 Zeichen überträgst musst du das so schreiben:

    Print "Test";

    und falls du dann doch nen CR brauchst so:

    Print "Test" + (13);

    Aber dein Problem würde ich einfach mal mit einem hinterher senden von CR und LF vermuten. Einfach mal mit einem Hex-Terminal analysieren was da gesendet wird. Das Hilft unheimlich viel.

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.555
    Zitat Zitat von datatom Beitrag anzeigen
    [/CODE]

    Hat jemand eine Idee woran das liegt?

    Vielen Dank und Grüße

    datatom

    Code:
    'Open "com1:" For Binary As #1                               'RS232
    'Open "com2:" For Binary As #2                               'RS232
    Open "com3:" For Binary As #3                               'RS232
    'Open "com4:" For Binary As #4                               'RS232
    
     Input Eingabe                                                       ' #?
    
     Print Eingabe                                                        '#?
    Fehlt da nicht die com Nummer?

    Gruß Richard

  4. #4
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Zitat Zitat von Richard Beitrag anzeigen
    Code:
    'Open "com1:" For Binary As #1                               'RS232
    'Open "com2:" For Binary As #2                               'RS232
    Open "com3:" For Binary As #3                               'RS232
    'Open "com4:" For Binary As #4                               'RS232
    
     Input Eingabe                                                       ' #?
    
     Print Eingabe                                                        '#?
    Fehlt da nicht die com Nummer?

    Gruß Richard
    Nein das geht auch so. Die COM-Nummer brauchste nur wenn du über mehrere UARTs was senden willst. Wenn du keine Nummer hinschreibt nimmt er standartmässig den ersten.
    Habs gerade mal in der Simulation getestet und da gehts.

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.555
    Zitat Zitat von Kampi Beitrag anzeigen
    Nein das geht auch so. Die COM-Nummer brauchste nur wenn du über mehrere UARTs was senden willst. Wenn du keine Nummer hinschreibt nimmt er standartmässig den ersten.
    Habs gerade mal in der Simulation getestet und da gehts.
    eine Print Anweisung Im Simulator nimmt immer die Hartware RS232 im Programm werden aber Software COM Schnittstellen eingerichtet die sollten schon eindeutig zugeordnet werden, das erleichtert auch das Lesen des Codes. Ansonsten Hterm ist ein sehr gutes Terminal Prog und kann ASCII, DEZ. BIN und HEX gleichzeitig anzeigen, das ist bei Fehlersuche sehr hilfreich und kostet nichts.

    Gruß Richard

  6. #6
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Oh ok wieder was gelernt
    Aber ich denke das es trotzdem kein Fehler ist der durch die COM Schnittstelle verursacht wird. Analysier einfach mal das was der Controller und der PC senden mit nem Hex-Terminal und vergleich sie. Ich bin in Moment leider nicht Zuhause sonst würde ich auch mal gucken.
    Ich vermute mal ganz stark das der Fehler in dem "Print" Befehl von Bascom steckt. Der sendet da sicher zu viel. Weil ein PC sendet, soweit ich mich richtig erinner, nur das was man auch im Terminal eingibt. Wenn man also H eingibt sendet er das. Wenn man im Bascom "Print "H" schreibt sendet der Controller H + CR + LF weil Bascom das im Compiler so hat das nach einem Text ein Zeilenumbrch kommt.

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.555
    Zitat Zitat von Kampi Beitrag anzeigen
    Oh ok wieder was gelernt
    Aber ich denke das es trotzdem kein Fehler ist der durch die COM Schnittstelle verursacht wird. Analysier einfach mal das was der Controller und der PC senden mit nem Hex-Terminal und vergleich sie. Ich bin in Moment leider nicht Zuhause sonst würde ich auch mal gucken.
    Ich vermute mal ganz stark das der Fehler in dem "Print" Befehl von Bascom steckt. Der sendet da sicher zu viel. Weil ein PC sendet, soweit ich mich richtig erinner, nur das was man auch im Terminal eingibt. Wenn man also H eingibt sendet er das. Wenn man im Bascom "Print "H" schreibt sendet der Controller H + CR + LF weil Bascom das im Compiler so hat das nach einem Text ein Zeilenumbrch kommt.
    Das ein CRLF angehängt wird kann man mit einen ";" unterdrücken. Was ich seltsam finde, es kommt ja der richtige String aber "rückwärts"?? Jedenfgalls wenn ich das richtig gelesen habe, da scheint schon bei input Eingabe etwas nicht zu stimmen. Print Eingabe sentet deshalb etwas Falsch "gelesenes" zurück?

    Gruß Richard

  8. #8
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Ne ich glaube das siehst du falsch
    Er sendet ein 327LX und erhält ein LX327L. Ich vermute das das LX327 von einer Übertragung davor stammt. Weil Bascom sendet ein 327LX plus ein CR und LF. Das sind zwei Zeichen mehr als er eigentlich erwartet und darum verschiebt sich das so.

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.555
    Zitat Zitat von Kampi Beitrag anzeigen
    Ne ich glaube das siehst du falsch
    Er sendet ein 327LX und erhält ein LX327L. Ich vermute das das LX327 von einer Übertragung davor stammt. Weil Bascom sendet ein 327LX plus ein CR und LF. Das sind zwei Zeichen mehr als er eigentlich erwartet und darum verschiebt sich das so.
    Input wartet so lange auf Eingabe bis ein CR gesendet wird, Print Eingabe hängt ein CR an. Print Eingabe ; hängt nichts an.

    Gruß Richard

Ähnliche Themen

  1. Controller, Board, Servo Controller fuer den Spiderbot?
    Von Kiraminh im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 1
    Letzter Beitrag: 11.12.2007, 16:38
  2. RXD/ TXD - Controller <--> Controller - Tutorial?
    Von squelver im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 27.08.2007, 12:50
  3. senden an controller
    Von q3 im Forum Schaltungen und Boards der Projektseite Mikrocontroller-Elektronik.de
    Antworten: 6
    Letzter Beitrag: 12.06.2007, 18:13
  4. Integer-Werte mit VB senden u. mit Controller auswerten
    Von jay-1982 im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 10.09.2005, 14:47
  5. [ERLEDIGT] 3,3V Controller mit 5V Controller verbinden
    Von im Forum Elektronik
    Antworten: 3
    Letzter Beitrag: 10.09.2004, 21:20

Berechtigungen

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

12V Akku bauen