Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit RP6 Kommunikation
Ich hab ein Programm geschrieben das den RP6 vom PC aus steuert(bitte keine diskussion über den Sinn!).
Auf jedenfall hab ich ein Problem wenn ich das Programm zum ersten mal starte nachdem ich das USB interface angeschlossen hab. Dann geht der RP6 von StandBy in einen Zustand aus dem ich ihn nicht mehr herraus bekomme, bis ich mein PC Programm beendet hab. wenn ich dieses dann nochmal starte funktioniert das wie es soll.
So hier meine Fragen also in welchem Zustand ist der RP6 wenn er von StandBy anfäng so (0b101101) zu leuchten?
Und worin unterscheidet sich die Kommunikation des ComPorts wenn das USB Interface frisch eingesteckt ist?
P.S. Auf dem RP6 ist noch nichts von mir gestartet.
Hi,
ist nur ne Vermutung ....:
Zunaechst laeuft auf dem RP6 noch nichts (sagst Du ja selbst), also kann er auch nicht auf irgendwelche Steuerbefehle reagieren!
Du benutzt den mitgelieferten USB-Adapter. Ueber den kann per RESET der RP6 auch ferngestartet werden. (Normalerweise ueber den RP6Loader.)
Wenn Dein Programm (beim Beenden?) ein RESET ausloest, wird der RP6 gestartet und ist dann empfangsbereit. Deswegen klappts es dann beim zweiten Lauf Deines Programms, der RP6 ist empfangsbereit.
Also sollte es auch funktionieren, wenn Du statt dem Neustart Deines Programms den RP6 per Reset-Taster startest.
HTH
Kay
Danke für die schnelle antwort.
Aber leider kann es nicht daran liegen.
Das Problem tritt beim starten meines Programms auf nicht beim beenden. Und solange dieses Läuft reagiert der RP6 nicht wirklich (die LED´s flackern kurz) auf den Resetknopf.
Daher kann ich den RP6 nicht starten und nichts läuft...
Das passiert aber nur wenn ich den USB-Adapter das erste mal nach dem anschließen an den PC nutze.
Wenn ich mein Programm beende, den RP6 resette und das Programm neu starte tritt das nicht mehr auf.
roboterheld
29.11.2007, 23:48
löte ein max drauf , dann hast du die sorgen nicht mehr.
die platine ist ein bisschen eigenartig gestaltet. lass die finger mit der kommunikation von den scheiss usb und mach es über den stinknormalen max, dann verstehst du auch c mit der uart übertragung.
Das ist zwar eine mögliche Lösung, aber ich habe die Aufgabe den Robbi über USB anzusteuern. Und mit der Übertragung hab ich auch kein Problem mei Programm läuft. Nur beim starten auf PC seite tritt halt das Problem auf. Ach und neuerdings auch beim beenden. Da fangen die roten LED´s an zu blinken...
@roboterheld:
Das hat damit doch überhaupt nichts zu tun.
@Neburg:
OK - also Du hast ein Programm mit dem RP6Loader in den Roboter geladen und willst nun mit einer eigenen Software damit kommunizieren wenn ich es richtig verstanden habe.
Kein Problem: Nach einem Reset (Reset ist mit DTR verbunden am USB Interface) gibt der RP6Loader erst
"[RP6BOOT]"
und dann kurze Zeit später
"[READY]"
aus. Erst nachdem [READY] ausgegeben wurde, kannst Du das Programm starten indem Du ein "s" überträgst.
Wenn Du das eher überträgst wechselt der Bootloader in einen Fehlerzustand weil die Verbindung nicht korrekt aufgebaut wurde.
HTH
MfG,
SlyD
PS:
Wie greifst Du denn auf das USB Interface zu?
Das die roten LEDs blinken kann an Windows liegen - Windows schaltet gerne mal die Handshake Leitungen an und aus um auf irgendwelche neu angeschlossenen PnP Geräte zu testen. Im USB Modus sollte das nicht passieren (also wenn man den D2XX Modus der FTDI Treiber verwendet).
Das macht aber weiter nichts.
Sly danke für die Antwort.
Blos ich drücke nicht den Reset Knopf, der RP6 wurde von mir nur eingeschaltet und mit der USB Leitung verbunden.
Mein Problem tritt nur auf wenn ich das erste mal auf den Com Port mit meinem Programm zugreife. Das Programm startet den RP6 nicht es lauscht nur ob was über die Leitung kommt.
Aber du hast recht es könnte sein das Windows beim ersten start noch mit Handshake startet... kann man dagegen was tun (außer auf Linux umsteigen O:) )?
Momentan initialisiere ich Com 3 so.
extern HANDLE m_hSerialComm;
extern DCB dcbConfig;
m_hSerialComm = CreateFile("COM3",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL);
ZeroMemory (&dcbConfig, sizeof(dcbConfig));
dcbConfig.BaudRate = 38400;
dcbConfig.ByteSize = 8;
dcbConfig.Parity = NOPARITY;
dcbConfig.StopBits = ONESTOPBIT;
dcbConfig.fBinary = TRUE;
dcbConfig.fParity = FALSE;
dcbConfig.XonChar = 0;
dcbConfig.XoffChar = 0;
dcbConfig.fTXContinueOnXoff = 0;
dcbConfig.XonLim = 0;
dcbConfig.XoffLim = 0;
dcbConfig.fDtrControl = DTR_CONTROL_DISABLE;
dcbConfig.fRtsControl = RTS_CONTROL_DISABLE;
DCB neu;
SetCommState(m_hSerialComm, &dcbConfig);
P.S. Gibt es eigentlich auch einen Software Reset-Befehl den ich über USB senden kann?
Muss mich etwas beeilen - nur ganz kurze Antwort:
Ich verstehe Dein Problem leider nicht so ganz - ich habe Dir oben schon geschrieben wie es funktioniert - hier nochmal anders formuliert:
Du musst dein Programm auf dem Roboter starten indem Du ein "s" überträgst - sonst passiert genau gar nichts bis auf das RP6BOOT und READY erscheint.
Software Reset geht natürlich - wie ich es oben schon gesagt hatte - über das DTR Signal - das einfach kurz umschalten!
MfG,
SlyD
Leider verstehe ich das Problem auch nicht ganz. :-(
Ich habe erfolgreich einen NintendoDS ueber UART an den RP6 angeschlossen. Die Kommunikation funktioniert. Allerdings brauchte ich dazu zunaechst nur GND, RX und TX.
Ich vermute stark, das das Problem durch "unsachgemaessen" Pegel auf DTR zustande kommt.
Vielleicht solltest Du auch mal etwas ueber die Funktionsweise von Bootloadern recherchieren. IMHO ein undefinierter (falscher) Pegel auf DTR kann den RP6 glauben machen, das er neu geflasht werden soll. In diesem Zustand kann er natuerlich nichts senden.
Durch ein Reset (ausgeloest beim Beenden deines Programms) startet der RP6 das geflashte Programm und ist nun auch in der Lage zu senden und zu empfangen.
Warum der Pegel auf DTR allerdings falsch ist, kann ich nicht sagen. Evtl. eine Eigenheit von Windows im Zusammenspiel mit dem USB->Seriell Adapter.
HTH
Kay
undefinierter (falscher) Pegel auf DTR kann den RP6 glauben machen, das er neu geflasht werden soll.
Nein das erzeugt nur einen Reset - Flashen klappt nur wenn der Bootloader richtig initialisiert wurde - sonst wechselt dieser automatisch in einen Fehlerzustand damit nicht versehentlich das Programm überschrieben wird.
Allerdings kann es natürlich dennoch sein, das an DTR ein falsches Signal anliegt.
MfG,
SlyD
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.