-         
Ergebnis 1 bis 9 von 9

Thema: probleme mit der seriellen verbindung

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    10.10.2004
    Ort
    Reutlingen
    Alter
    29
    Beiträge
    704

    probleme mit der seriellen verbindung

    Anzeige

    Ich hab hier ein Notebook mit serieller schnittstelle (genauer gesagt mit usb-seriell konverter) und eine c-control II auf meinem großen Roboter draufsitzen.
    Das Programmieren der c-control funktioneirt auf diese art und weise perfekt, und auch der Empfang der , von der cc gesendeten daten funktioniert.
    Nur wenn ich Zahlen (bytes) vom rechner aus an dei c-control senden will , dann kommt nur schrott dabei raus.

    Im c-control Programmcode vewende ich zum auslesden der gesendeten daten im Moment den "get" befehl, aber auch bei input kommt nix gscheides dabei raus.

    meine Frage :
    wie muss ich ein byte (zahlen von 0 - 255) vom rechner aus senden , damit ich es in der c-control später in eine Byte-Variable auslesen (Print , get oder was anderes ? print ist doch nur für strings ???) und auswerten kann ?

    so viele fragen auf ein mal ...

    ich hoff , dass mir irgendjemand weiterhelfen kann ...

    mfg
    Michi
    mfg
    Michael Eisele

    www.brainrobots.de
    www.facebook.com/brainrobots
    ---
    the most astonishing adventure in the universe begins when the world ends
    ---

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    03.09.2005
    Ort
    Dachau
    Alter
    34
    Beiträge
    210
    hallo Michi (ich heiß übrigens auch so :-P )
    also ich denke du hast nicht die C-Control 2 sondern die 1 (ist eigentlich eher Generation) weil du in basic programmierst.
    also den input befehl kannst du vollig vergessen, weil er sich kaum auswerten lässt. besser ist da der befehl get, und put (von mir auch auch Print).
    aber erstmal zum Put und Get.
    mit den zahlen 0-255 definiest du eigentlich ein Zeichen, auch zeilenvorschub, escape, .... sind zeichen. einfach mal in google "Ascii Tabelle" eingeben.

    Mal ein Beispielprogramm
    <code>get 72 'sendet H
    get 65 'sendet A
    get 76 'sendet L
    get 76 'sendet L
    get 79 'sendet 0
    </code>

    genauso funtioniert es mit mit Put,
    es wird allerdings immer nur ein Zeichen gelesen.

    also der PC sendet <code>"HALLO"</code>, und du must 5 mal get benutzen.

    ein <code>Print "AD1: ";port_ad1</code>
    ist sinnvoll informationen lessbar im terminal auszugeben!
    ein Print springt allerdings immer in die nächste zeile

    meine erfahrung zeit ein handshake zeichen zu benutzen,
    also in deinem fall nehmen wir ein "$" Zeichen her.

    der PC sendet "$", mit get wird an der C-Control dann 36 emfangen
    die C-Control sendet dann z.B. Print "HWOK" für Hardware ist da!
    dann sendet der PC ein vordefinierten code, z.b. "e5Z"
    dann 3 mal get in verschienden Vatiablen und dann zuweisen,
    kleines beispiel:
    <code>
    #start
    do
    IF RXD THEN goto receiveddata
    loop
    #receiveddata
    get handshake
    if handshake <> 36 then goto start
    Print "HWOK"
    get a
    get b
    get c
    byteport = a
    DA1 = b
    DA2 = c
    goto start

    </code>

    das "IF RXD" frägt den ringpuffen nach einem vorhandenem byte ab und springt bei vorhanden in ein unterporgramm.
    sonst wird die programmausführung am get angehalten.

    ich geh jetzt ins bett gute nacht!
    für mehr infos einfach posten!

    gruß Michi

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    10.10.2004
    Ort
    Reutlingen
    Alter
    29
    Beiträge
    704
    danke michi ...
    ich hab mich n bisschen verschrieben . IChmein, ich hab die cc1 m-unit2,sorry.

    Zuerst mal genauerses zumeinem Programm, ich glaub , ich hab das etwas undeutlich ausgedrückt ...

    Ichhabhierein Beispielscript (von die-hard), mitdem man Servos an port4und 5 steuern kann. Dieses script hab ich etwas umgeschrieben.
    Um die Servos anzusteuern , muss man mit dem sript nur nen integerwert zwischen 0 und 255 in byte[1] bzw.2 speichern.
    Meine Absicht war, diese integerwerte über die serielle Verbindungan die cc zu senden, und dort in die Byte-variablen zu speichern.

    Die eigentliche frage lautet alsokonkret:
    wiesende ich ZAHLEN zwischen0 und 255 am gescheidesten auf die cc?

    sorry ,dassich michso undeutlichausgedrückthab ...
    ich hoff , mirkann trotzdem ncoh einer helfen
    mfg
    Michi
    mfg
    Michael Eisele

    www.brainrobots.de
    www.facebook.com/brainrobots
    ---
    the most astonishing adventure in the universe begins when the world ends
    ---

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.09.2004
    Beiträge
    264
    Ah, jetzt kommt Licht ins Dunkel....

    Wenn Du eine 255 am PC sendest, dann mußt Du die C-Control 3 byte einlesen lassen. Du erhältst einen ASCII-Code. Wenn Du 48 davon abziehst, erhältst Du die Zahl selber. Nun noch eine mal 100, eine mal 10 und die dritte dazuaddieren und die erhältst die 255. Ich weiß im Moment nicht, in welcher reihenfolge die 3 Zahlen kommen. Viel Spaß beim Probieren.

    mfg


    Stefan

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    10.10.2004
    Ort
    Reutlingen
    Alter
    29
    Beiträge
    704
    ah , thx , ich versuchs mal

    mfg
    michi

    edit: tut auch , wenn man einfahc mit nem VB-programm das , in der ascii - tabelle dem wert zugewiesenen Zeichen sendet ...
    ist aber komplizierter
    mfg
    Michael Eisele

    www.brainrobots.de
    www.facebook.com/brainrobots
    ---
    the most astonishing adventure in the universe begins when the world ends
    ---

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.12.2003
    Beiträge
    163
    Zitat Zitat von michiE
    ah , thx , ich versuchs mal

    mfg
    michi

    edit: tut auch , wenn man einfahc mit nem VB-programm das , in der ascii - tabelle dem wert zugewiesenen Zeichen sendet ...
    ist aber komplizierter
    Hallo....
    In diesem Fall ist die INPUT Anweisung die bessere Wahl.
    Das sollte so funktionieren, aber getestet hab ichs nicht.
    Noch eine Info. Die alte OS Version 2.01 (2004) hat einen
    Bug in der Input Routine. Aber davon solltest du nicht betroffen sein.
    Welche OS Version hast du?

    '--------------------------
    '------ I/O PORTS ---------
    '--------------------------
    define SERVO1 port[4]
    define SERVO2 port[5]
    '--------------------------
    '---- SYSTEM MEMORY -------
    '--------------------------
    define POS1 byte[1]
    define POS2 byte[2]

    '--------- SETTING AUTO SYSTEMCALL ----------------
    SYS &HFD35
    '--------- DRIVER PORTS TO OUTPUT -----------------
    SERVO1=off:SERVO2=off


    '--------------------------------------------------
    '------ SETTING SERVO POSITIONS ---------
    '------ ALTERNATING MIN/MAX POSITIONS ---------
    '--------------------------------------------------
    #b
    INPUT POS1
    INPUT POS2
    goto b
    '-------------------------------------------------
    syscode "M20_SERVO_P4P5_PAGE0.s19"

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    10.10.2004
    Ort
    Reutlingen
    Alter
    29
    Beiträge
    704
    thx =)

    Code:
    VB-code rechnerseitig:
    
    i = ne andere variable mit irgendnem wert zwischen 0 und 255 
    MSComm1.Output = Chr(i)
    @Die Hard : genau die Version hab ich ... 2.01, gekauft hab ich die cc Anfang 2005

    mfg
    Michi
    mfg
    Michael Eisele

    www.brainrobots.de
    www.facebook.com/brainrobots
    ---
    the most astonishing adventure in the universe begins when the world ends
    ---

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.12.2003
    Beiträge
    163
    Zitat Zitat von michiE
    thx =)

    Code:
    VB-code rechnerseitig:
    
    i = ne andere variable mit irgendnem wert zwischen 0 und 255 
    MSComm1.Output = Chr(i)
    @Die Hard : genau die Version hab ich ... 2.01, gekauft hab ich die cc Anfang 2005

    mfg
    Michi
    Ärgerlich, aber nicht schlimm. Guck hier:
    'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIII
    'II WORKAROUND BUG "INPUT" (ser. Schnittstelle) by DIE HARD 09-04 I
    'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIII
    ' BETRIFFT BETRIEBSSYSTEM VERSION 2.01
    '--------------------------------------------------------------------
    ' Die M 2.0 hat in diesem Teil des Betriebssystems einen Fehler
    ' Das Unterprogramm INPUTEMULATION übernimmt diese Funktion.
    '---------------------------------------------------------------------


    Define WERT word[1]
    define INBYTE byte[4]



    Wert=0
    #loop
    'input wert
    gosub INPUTEMULATION 'ERSATZ FÜR INPUT
    pause 50
    Print "Ausgabewert"
    Print wert
    Goto loop


    '-----------------------------------------------------------------
    '---- UNTERPROGRAMM ZUM ERSATZ DER FUNKTION INPUT ---
    '-----------------------------------------------------------------
    #INPUTEMULATION
    #INLOOP
    get INBYTE
    if INBYTE=&H2D then wert=-1 else WERT=1
    if INBYTE=&H2D then get INBYTE
    WERT=(INBYTE and &H0F)*WERT
    #INLOOP2
    get INBYTE:if INBYTE= &H0D then return
    INBYTE=INBYTE and &H0F
    if WERT<0 then WERT=WERT*10-INBYTE else WERT=WERT*10+INBYTE
    goto INLOOP2

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    10.10.2004
    Ort
    Reutlingen
    Alter
    29
    Beiträge
    704
    DANK =)
    tut perfekt ...

    thx euch allen & mfg
    Michi
    mfg
    Michael Eisele

    www.brainrobots.de
    www.facebook.com/brainrobots
    ---
    the most astonishing adventure in the universe begins when the world ends
    ---

Berechtigungen

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