Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
-schumi-

Anmeldungsdatum: 28.10.2009 Beiträge: 131 Wohnort: Südbayern
|
Verfasst am: 31.12.2010, 19:44 Titel: Open Com: Baudrate ohne "close" ändern |
|
|
Und gleich noch ne Frage
ich hab mit
Zitat: | open com "/dev/serial/by-id/"+connectionport+": 38400, N, 8, 1,cs0,ds0,cd0,rs" AS #1 |
meinen USB<->Seriell adapter geöffnet. (in der Variable "connectionsport" steht die genaue Bezeichnung)
Funktioniert soweit wunderbar.
Jetzt möchte ich aber die Baudrate auf 500000 erhöhen, aber OHNE den Port zu schließen...
(genau genommen darf RTS seinen Pegel nicht verändern, denn sonst wird beim erneuten öffnen der Pegel verändert und der Robo der dranhängt resettet)
wenn ich das "close #1" davor einfach weglasse macht der Compiler zwar keine Fehlermeldung, aber anscheinend funktioniert das nicht...
Währe auch hier für Hilfe sehr dankbar
MfG
-schumi-
PS: OS ist wie dem Codeschnippsel zu entnehmen Linux, genauer genommen Lubuntu |
|
Nach oben |
|
 |
XOR
Anmeldungsdatum: 23.07.2010 Beiträge: 161
|
Verfasst am: 31.12.2010, 20:10 Titel: |
|
|
Ich benutze zwar nicht open com aber koennte es sein ,dass 500000 eine zu hohe Baudrate ist?
In der befehlsreferenz steht
Zitat: |
Option________ | Bereich
-------------------+------------------------------------------
Geschwindigkeit | 75, 110, 150, 300,.., 115200
|
soweit ich das entnehme kann man frei Raten zwischen 300 und 115200 waehlen. 500000 erscheint mir da ein bisle zu gross.
Wozu willst du denn ueberhaupt die Baudrate erhohen? |
|
Nach oben |
|
 |
-schumi-

Anmeldungsdatum: 28.10.2009 Beiträge: 131 Wohnort: Südbayern
|
Verfasst am: 31.12.2010, 21:52 Titel: |
|
|
schon mal Danke für deine Antwort!
Kennst du den Roboter RP6? ( http://arexx.com/rp6/html/de/index.htm )
Der hat einen Bootloader drauf damit das Flashen schneller geht als mit ISP und man mit nur einer Leitung sowol Flashen als auch über UART kommunizieren kann.
Das Computerprogramm um ein Hexfile über den Bootloader auf den Robo zu kriegen ist der "RobotLoader". Der ist aber in Java geschrieben, braucht lange zum starten und lässt sich nicht über Kommandozeile steuern. Ausserdem ist er Closed Source und es gibt keine Chance da was zu ändern
Also will ich selbst so einen Loader schreiben.
Klappt so weit ganz gut. Kommunikation klappt, Akkuspannung kann ausgelesen werden, er erkennt welcher Controller drangesteckt ist etc.
Wenn ich aber Flashen möchte wird die Baudrate von 38400 auf 500KBaud erhöht, damit das Flashen nicht so lange dauert (bei 500KBaud dauerts meistens 1-5 Sec,)
Dummerweise kennt der Bootloader auf dem AVR nur diese beiden Baudraten, und mit 38400 dauerts a wenge lang...
Sag also dem Bootloader er soll jetz auf 500KBaud umschalten, dann schalte ich am PC um, dann wird die Verbindung nochmals überprüft (läuft ja jetz auf HighSpeed) und dann endlich das Hexfile geuploadet. Danach gehen beide wieder auf 38,4KBaud runter...
Wenn ich aber den Port Close bevor ich ihn mit 500KBaud erneut öffnen kann wird der RTS-Pin geschalten (bzw. ich glaub getoggelt) und der Roboter resettet -> Umschaltbefehl für 500KBaud hat er vergessen...
@XOR
Das währ ja gagge... Könnte es sein dass das nur für die "echte" RS232 stimmt? der RP6 wird nämlich über nen USB-Adapter angeschlossen der sich als ttyUSB0 oder sonst ne nummer anmeldet.
Gibt es vielleicht irgend ein Register in dem die Baudrate eingetragen ist so dass man sie während der Laufzeit verändern kann?
MfG
-schumi-
PS: Ich glaub sogar dass ich des schon mal hinbekommen hab. aber
1. Finde ich den Sourcecode nicht mehr (auch nirgends in den Foren)
2. Warn das noch die "dunklen" Windowszeiten^^ - Und wer weis - vielleicht funzt des ganze unter Windows a weng anders |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 31.12.2010, 22:35 Titel: |
|
|
Unter Linux:
und
ich meinte, gewisse Kontrollparameter auch mitten in offenen Dateien - sprich laufenden Kommunikationen - ändern zu können.
Ansonsten hat es einen bestimmten Grund, dass mit wechselnder Baudrate gearbeitet werden muss? _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
-schumi-

Anmeldungsdatum: 28.10.2009 Beiträge: 131 Wohnort: Südbayern
|
Verfasst am: 01.01.2011, 02:46 Titel: |
|
|
Danke! ich glaub es funktioniert - ganz genau sagen kann ich es aber noch nicht, weil ich anscheinend noch nen Fehler an anderer Stelle hab..
So hab ichs jetz implementiert - und es gibt auch keine Fehlermeldung
Code: | if exec ("stty", "-F /dev/serial/by-id/"+connectionport+" 500000") then errorhandler("Not able to set up High-Speed") |
Die Baudrate muss nicht zwingend geändert werden, aber dann dauert wie oben beschrieben der Upload des Programms in den Controller so lange...
Falls es dann doch wieder nicht funktionieren sollte melde ich mich nochmal
MfG + Danke nochmal!
-schumi- |
|
Nach oben |
|
 |
funkeld gesperrt
Anmeldungsdatum: 10.10.2009 Beiträge: 179
|
Verfasst am: 02.01.2011, 14:26 Titel: |
|
|
hmmm...., wenn du 500000 baud einstellst und damit pro byte mit kontrollbit 10bit überträgst sind es immer noch 50000byte/sec und der atmega32 hat nur 32kbyte. da die programme im durchschnitt ca 16-24kb gross(grösser sind sie auf dem rp6 nie) sind müsste es in 0,3 - 0,5 sekunden gehen und nicht in 1-5 sec.
irgendetwas machts du falsch oder dir wird nur vorgegaukelt das 500000baud übertragen werden.
wahrscheinlich ist dein bootloader der flaschenhals.
bootloader kann ich nicht empfehlen, ist nur eine notlösung.
ps:
die zeit für die flashlänge wird im datenblatt vom atmega32 vorgeschrieben, damit die daten fehlerfrei abgelegt werden.
wenn die flashzeit unterschritten wird beim atmega8/16/32/64/644...
dann wird keine datensicherheit gewährleistet.
denk mal drüber nach, datenblatt vom atmega lesen. |
|
Nach oben |
|
 |
-schumi-

Anmeldungsdatum: 28.10.2009 Beiträge: 131 Wohnort: Südbayern
|
Verfasst am: 02.01.2011, 16:46 Titel: |
|
|
Bootloader:
- Ist schon von Haus aus drauf, und der ist auch schneller als ISP (bzw. USBasp, und der ist ja verhältnismäßig schnell)
- Ist closed Source, genauso wie der RobotLoader mit dem geflasht wird
- Stellt sicher dass der Atmega nicht verfust, das schafft jeder mindestens 1x, und auf dem RP6 ist der nicht so leicht aus- & einzulöten
Ich kann also nicht genau sagen wo der Flaschenhals ist, ober Der Robotloader oder der Bootloader so langsahm ist (kleine Programme schafft er auch unter 1 sec.), aber ich schätze dass der Bootloader noch so lange braucht um die Daten ins Flash zu schreiben die er empfängt
Zitat: | wenn die flashzeit unterschritten wird beim atmega8/16/32/64/644...
dann wird keine datensicherheit gewährleistet. |
Ich gehe mal schwer davon aus dass Arexx sich da an das Datenblatt hällt
MfG
-schumi- |
|
Nach oben |
|
 |
funkeld gesperrt
Anmeldungsdatum: 10.10.2009 Beiträge: 179
|
Verfasst am: 06.01.2011, 16:11 Titel: |
|
|
Da der Bootloader immer seriell betrieben wird, hast du da die Bremse , der Atmega macht seriel bei 115000 schon die grätsche.... auf dem RP6.
Mach eine Zusatzplatine oben auf dem RP6 , ich hatte bei mir den 644p drauf mit 20 mhz.
Der Atmega 32 auf der RP6-Platine hat nur den Motor angesteuert bei mir, das andere habe ich alles auf dem 644p ausgelagert, später kam der 1284p drauf, konnte dann mit 16kb SRam richtig rumspielen.
Gruss |
|
Nach oben |
|
 |
-schumi-

Anmeldungsdatum: 28.10.2009 Beiträge: 131 Wohnort: Südbayern
|
Verfasst am: 06.01.2011, 16:50 Titel: |
|
|
Zitat: | der Atmega macht seriel bei 115000 schon die grätsche.... lächeln |
Das kann nicht sein, mein Kollege (Er entwickelt das selbe in C#) hat die 500KBaud implementiert - und es funzt einwandfrei
Oder meinst du dass der Atmega zwar die 500KBaud schafft, aber die Daten so langsahm weiterverarbeitet, dass es im Endeffekt so aus aussieht als würde er nur mit 115KBaud arbeiten?
Ansonsten haben wir unsere Programme so weit dass wir sie demnächst veröffentlichen werden...
Zitat: | 644p ausgelagert, später kam der 1284p drauf, konnte dann mit 16kb SRam richtig rumspielen. |
Ja, mal sehen. Vielleicht werd ich ihn demnächst auch erweitern (die M32 mit 16MHz hat er schon langen und seit ein paar wochen nochmal einen Atmega32 mit 16Mhz + Funkmodul)
Gruß
schumi |
|
Nach oben |
|
 |
-schumi-

Anmeldungsdatum: 28.10.2009 Beiträge: 131 Wohnort: Südbayern
|
Verfasst am: 08.01.2011, 01:22 Titel: |
|
|
So, das Problem ist zwar nicht gelöst, aber der Grund für den fail endlich bekannt, denn dreals Methoden funktionieren auch nicht.
Grund:
Hab ich auf http://www.mikrocontroller.net/topic/166175 gefunden, Zitat von DS66:
Zitat: | Der "Fehler" liegt im Treiber und zwar hier
pl2303.c:
622 if ((cflag & CBAUD) == B0)
623 priv->line_control &= ~(CONTROL_DTR | CONTROL_RTS);
624 else
625 priv->line_control |= (CONTROL_DTR | CONTROL_RTS);
626 if (control != priv->line_control) {
627 control = priv->line_control;
628 spin_unlock_irqrestore(&priv->lock, flags);
629 set_control_lines(serial->dev, control);
630 } else {
631 spin_unlock_irqrestore(&priv->lock, flags);
632 }
Beim wechsel der Baudrate ungleich "B0" wird DTR und RTS immer auf HIGH
gesetzt, egal, ob vorher nicht gesetzt oder gesetzt.
Du müsstest dir den Treiber ohne diese Zeilen übersetzen, dann sollte es
funktionieren.
(hab gerade dasselbe Problem) |
Der Bug ist zwar schon 8 Monate alt, aber anscheinen haben sich inzwischen nur die wenigsten Leute darüber geärgert, so dass er bis heute anscheinend nicht gefixt wurde...
(Punkt an Jojo )
Nur damit das mal der Vollständigkeit halber noch ergänzt ist. Hoffentlich bringe ich es fertig den Treiber selbst zu fixen, sonst ist Essig mit HighSpeed-flashing..
MfG
-schumi- |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 08.01.2011, 19:28 Titel: |
|
|
Vielleicht als Anregung zum Testen: Unter Windows einmal HyperTerminal aufrufen bzw. minicom unter Linux und einmal die Befehle zum Geschwindigkeit umschalten und Flashvorgang von Hand eingeben.
Als ähnlicher Fall kenne ich sonst die etwas älteren Router von ZyXEL, bei welchen es ausser dem berühmten http://192.168.1.1 halt eben noch eine serielle Konsole gibt. Dort kann ich mit
ebenfalls die Geschwindigkeit umschalten (und muss diese im Anschluss auch im Terminalprogramm umschalten), danach kann dort mit
der Firmware-Updateprozess eingeleitet werden -> jetzt muss im Terminalprogramm die .bin-Datei mit X-Modem gesendet werden.
=> In Deinem Fall versuchen, einmal analog vorzugehen. Ich habe in meinem Fall nie näher untersucht, ob es bei HyperTerminal auch diese Signalwechsel gibt, aber ich weiss nur, dass sich das ZynOS deswegen nicht aus dem Tritt bringen lässt. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
-schumi-

Anmeldungsdatum: 28.10.2009 Beiträge: 131 Wohnort: Südbayern
|
Verfasst am: 06.03.2011, 18:36 Titel: |
|
|
====================================================
So, nach einiger Zeit beschäftige ich mich nun wieder mit dem Projekt.
Allerdings funktioniert das Ganze jetzt noch weniger als vorher
Ich kann mit FB nicht mal mehr den USB-RS23-Wandler öffnen, ohne dass RTS so lange gesetzt bleibt bis ich den Port wieder schließe -> Dauerreset am Robby
Habe natürlich nochmal die FB-Refferenz rausgekrahmt und viel mit den Paramtern von OPEN COM rumgespielt, aber gänzlich erfolglos, das Problem muss also irgendwo anders liegen schätze ich...
@dreal:
Hab ich mit HyperTerminal unter Linux probiert
-> Ich wenn ich ttyUSB0 öffne wird RTS kurz gesetzt (ideal währe natürlich wenn er garnicht gesetzt würde)
Ich kann auch die Baudrate erhöhen (während der Port offen ist) und es finden KEIN Reset statt, RTS bleibt also wie es ist
Wenn ich die Baudrate allerdings wieder runtersetzten will macht er das nicht während dem Betrieb... (Muss also Port schließen und wieder öffnen)
=> Bitte helft mir!
Es kann ja wohl nicht sein dass dieses Projekt wegen so einem Fliegendreck jetzt scheitern muss!
Ratlos und leicht verärgert
-schumi-
PS:
Mit "stty" und "setserial" hab ich bereits nochmal rumgespielt, brachte aber nix... |
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 07.03.2011, 13:13 Titel: |
|
|
-schumi- hat Folgendes geschrieben: | Zitat: | der Atmega macht seriel bei 115000 schon die grätsche.... lächeln |
Das kann nicht sein, mein Kollege (Er entwickelt das selbe in C#) hat die 500KBaud implementiert - und es funzt einwandfrei
Oder meinst du dass der Atmega zwar die 500KBaud schafft, aber die Daten so langsahm weiterverarbeitet, dass es im Endeffekt so aus aussieht als würde er nur mit 115KBaud arbeiten? |
Das liegt wohl eher daran, weil der ATMega kein besonders guten UART implementiert hat.
Sieh dir mal die Daten auf einem Skope an. Das sind keine sonderlich guten Signale mehr. Sie sind verschliffen und kaum noch Rechteckig.
Wenn kein Schmittrigger dahinter hängt, kann das zu Problemen mit der Kommunikation führen.
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
 |
-schumi-

Anmeldungsdatum: 28.10.2009 Beiträge: 131 Wohnort: Südbayern
|
Verfasst am: 07.03.2011, 19:10 Titel: |
|
|
Zitat: | Sieh dir mal die Daten auf einem Skope an |
Hab leider keins
Zitat: | kann das zu Problemen mit der Kommunikation führen. |
Also der Originalloader flasht auch mit 500kBaud, und bis jetzt gab es noch keinen einzigen Übertragungsfehler. Allerdings weis ich auch nicht ob der Robo bei einem Fehler die Daten wieder neu anfordert (Bis jetzt war in den Logs des Originalloaders noch nichts dergleichen zu finden)
Ich fasse nochmal zusammen:
FreeBASIC: RTS wird zwangsläufig gesetzt
HTerm: RTS wird beim öffnen 1x getoggelt, Frequenzänderung funktioniert halb
Java-programm: Laut Log wird RTS zum resetten manuell gesetzt -> öffnen ohne RTS-toggler, Baudrate ändern ohne RTS-toggler
Also liegt es letzenendes doch wieder an FB?? (HTerm funzt (einigermaßen), und das ist schätze ich nicht in FB geschrieben)
Ratlos
-schumi- |
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
|
Nach oben |
|
 |
|