- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 8 von 8

Thema: M128 - Lesen von UART

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.04.2009
    Beiträge
    523

    M128 - Lesen von UART

    Anzeige

    Praxistest und DIY Projekte
    Hallo,
    so langsam nimmt mein Programm für die M128 Gestalt an, jetzt hapert es aber ein wenig am Lesen der über UART an den Roboter gesendeten Befehle.

    Hier erst mal ein wenig Code:
    Code:
    void task_Commands(void)
    {
        unsigned char tmp;
        tmp = Serial_ReadExt(0);
        if(tmp != 0)
        {
            clearLCD();
            setCursorPosLCD(0,0);
            writeStringLCD("Char: ");
            writeCharLCD(tmp);
            if (tmp =='#')
            {
                Thread_Delay(1);
                counter = 0;
            }
            text[counter] = tmp;
            //text[counter + 1] = '\0';
            counter++;
            //clearPosLCD(1,0,15);
            setCursorPosLCD(1,0);
            writeStringLCD(text);
        }
    Wie man hier sieht, wird immer ein Zeichen eingelesen, überprüft ob es gültig ist (Str_ReadExt liefert eine 0 wenn kein Zeichen vorhanden ist) und dann dem Text empfangener Zeichen hinzugefügt. Sonderfall: es handelt sich um ein '#', dies ist das Startzeichen eines Befehls. Also wird bei diesem Fall von vorne angefangen. Zwischen drin lasse ich mir noch über das LCD ein paar Debug-Sachen ausgeben: Das aktuell empfangene Zeichen und den gesamten Text.
    Das einzelne Zeichen klappt auch super, es wird immer korrekt angezeigt.
    Allerdings hat er ein Problem damit mehr als 4 Zeichen auf einmal zu empfangen...
    Hier mal eine kleine Tabelle was ich sende und was im Endeffekt ankommt:
    Code:
    Gesendet          Empfangen
    123                  123
    1234                1234
    12345              1235
    123456789       1239
    #1:123:123*    #1:* --> Das hier wäre ein richtiger Befehl, wie der Roboter ihn gesendet bekommen würde.
    Das heißt, er empfängt immer die ersten drei und das letzte Zeichen. Alles andere ignoriert er.
    Hat er vielleicht nur einen Buffer für 4 Zeichen oder so? Weil die Zeichen werden ja alle auf einmal gesendet.

    Ich habe auf der etwas dürftigen Seite von der C-Control das hier gefunden:http://www.c-control-pro.de/document...l_init_irq.htm

    Das sieht ja irgendwie nach dem Richtigen aus... Aber das klappt so leider auch noch nicht...

    Kann mir jemand helfen?

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    @Fabian E.:
    Versuch doch 'mal, die einzelnen Zeichen mit einer kleinen Verzögerung zu senden.

    Gruß Dirk

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.04.2009
    Beiträge
    523
    Ja, es halt darum den ganzen String zu senden... Konkret z.B.: "#1:100:100:0*". Wenn ich da alle Zeichen einzeln sende kommt alles an und wird auf dem Roboter auch korrekt ausgewertet und auf dem Display angezeigt.
    Nur überträgt/liest er halt nicht mehr als vier Zeichen auf einmal.
    Im Prinzip könnte ich es auch mit mehren "Blöcken" machen, aber eigentlich wäre das gepfuscht und das will ich ja nicht.

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.04.2009
    Beiträge
    523
    Keiner eine Idee? Können andere Besitzer einer M128 vielleicht mal dieses Verhalten testen? Ist das bei euch genauso?
    Ich würde äußerst ungerne mein PC-Programm umschreiben, damit es maximal 4 Zeichen aufeinmal sendet. Das wäre alles andere als schön...

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    39
    Beiträge
    1.516
    Hier:
    http://www.c-control.de/c-control-pr...sic_und_c.html

    Gibts Beispiele dazu (Ordner RS232). Du musst da nen Buffer beim serial_init zuweisen soweit ich mich erinnere.

    Die aktuellen Versionen der CCPRO IDE ham die Beispiele scheinbar irgendwie nicht mehr mit dabei? Warum auch immer. Nunja.

    MfG,
    SlyD

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.04.2009
    Beiträge
    523
    Okay, danke. Bei deinem Beispiel handelt es sich um Serial_Init_IRQ. Dabei kann man einen Buffer für Senden und Empfangen festlegen.

    Allerdings kommt dann beim Senden am PC nur noch zerstückelter Datenmüll an... Ein paar Sachen stimmen, andere werden verdreht, vieles fehlt...
    Das Empfangen allerdings klappt nun sehr gut, wenn auch recht langsam...
    Jemand eine Idee?

  7. #7
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    39
    Beiträge
    1.516
    Ohne Quelltext kann man sowieso nix sagen

    Zur C-Control kannst Du übrigens besser in dem Forum hier:
    http://ccpro.cc2net.de/forum/

    fragen da sind mehr Leute dazu unterwegs.
    Da gabs bestimmt auch schon Threads dazu also mal die SuFu dort benutzen.

    MfG,
    SlyD

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.04.2009
    Beiträge
    523
    Okay vielen Dank, das Forum kannte ich noch nicht.
    Ich habe jetzt festgestellt, dass UART zu langsam arbeitete um meinen gesamten Text zu senden, deswegen kam es zu einem Bufferoverflow.
    Vergrößerung des Buffers hats dann gebracht.

    Vielen Dank =)

Berechtigungen

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

Labornetzteil AliExpress