Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Open Com: Baudrate ohne "close" ändern

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
-schumi-



Anmeldungsdatum: 28.10.2009
Beiträge: 131
Wohnort: Südbayern

BeitragVerfasst am: 31.12.2010, 19:44    Titel: Open Com: Baudrate ohne "close" ändern Antworten mit Zitat

Und gleich noch ne Frage grinsen

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 lächeln
MfG
-schumi-

PS: OS ist wie dem Codeschnippsel zu entnehmen Linux, genauer genommen Lubuntu
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
XOR



Anmeldungsdatum: 23.07.2010
Beiträge: 161

BeitragVerfasst am: 31.12.2010, 20:10    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
-schumi-



Anmeldungsdatum: 28.10.2009
Beiträge: 131
Wohnort: Südbayern

BeitragVerfasst am: 31.12.2010, 21:52    Titel: Antworten mit Zitat

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 neutral

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 31.12.2010, 22:35    Titel: Antworten mit Zitat

Unter Linux:
Code:
man stty

und
Code:
man ioctl

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
-schumi-



Anmeldungsdatum: 28.10.2009
Beiträge: 131
Wohnort: Südbayern

BeitragVerfasst am: 01.01.2011, 02:46    Titel: Antworten mit Zitat

Danke! ich glaub es funktioniert - ganz genau sagen kann ich es aber noch nicht, weil ich anscheinend noch nen Fehler an anderer Stelle hab.. lächeln

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 lächeln

MfG + Danke nochmal!
-schumi-
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
funkeld
gesperrt


Anmeldungsdatum: 10.10.2009
Beiträge: 179

BeitragVerfasst am: 02.01.2011, 14:26    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
-schumi-



Anmeldungsdatum: 28.10.2009
Beiträge: 131
Wohnort: Südbayern

BeitragVerfasst am: 02.01.2011, 16:46    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
funkeld
gesperrt


Anmeldungsdatum: 10.10.2009
Beiträge: 179

BeitragVerfasst am: 06.01.2011, 16:11    Titel: Antworten mit Zitat

Da der Bootloader immer seriell betrieben wird, hast du da die Bremse , der Atmega macht seriel bei 115000 schon die grätsche.... lächeln 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
Benutzer-Profile anzeigen Private Nachricht senden
-schumi-



Anmeldungsdatum: 28.10.2009
Beiträge: 131
Wohnort: Südbayern

BeitragVerfasst am: 06.01.2011, 16:50    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
-schumi-



Anmeldungsdatum: 28.10.2009
Beiträge: 131
Wohnort: Südbayern

BeitragVerfasst am: 08.01.2011, 01:22    Titel: Antworten mit Zitat

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 grinsen )

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 08.01.2011, 19:28    Titel: Antworten mit Zitat

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
Code:
atba5

ebenfalls die Geschwindigkeit umschalten (und muss diese im Anschluss auch im Terminalprogramm umschalten), danach kann dort mit
Code:
atur

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
-schumi-



Anmeldungsdatum: 28.10.2009
Beiträge: 131
Wohnort: Südbayern

BeitragVerfasst am: 06.03.2011, 18:36    Titel: Antworten mit Zitat

====================================================

So, nach einiger Zeit beschäftige ich mich nun wieder mit dem Projekt.

Allerdings funktioniert das Ganze jetzt noch weniger als vorher mit dem Kopf durch die Mauer wollen

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 grinsen
-> 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! missbilligen
Es kann ja wohl nicht sein dass dieses Projekt wegen so einem Fliegendreck jetzt scheitern muss! weinen

Ratlos und leicht verärgert
-schumi-

PS:
Mit "stty" und "setserial" hab ich bereits nochmal rumgespielt, brachte aber nix...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 07.03.2011, 13:13    Titel: Antworten mit Zitat

-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
Benutzer-Profile anzeigen Private Nachricht senden
-schumi-



Anmeldungsdatum: 28.10.2009
Beiträge: 131
Wohnort: Südbayern

BeitragVerfasst am: 07.03.2011, 19:10    Titel: Antworten mit Zitat

Zitat:
Sieh dir mal die Daten auf einem Skope an

Hab leider keins neutral

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 16.04.2011, 07:45    Titel: Antworten mit Zitat

aso .. darum gehts.

gut .. schau mal hier rein: http://book.opensourceproject.org.cn/embedded/addembed/opensource/ch06lev1sec2.htm

event auch hier: http://embedded.seattle.intel-research.net/wiki/index.php?title=Using_other_UARTs_in_Linux


Greez
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz