closed

Loginbox

Please enter your username and password into the following fields to log in.


  • Username:
  • Password:
  •  
  • Auto log in on every visit.


  •  

Serielle Baudrate zur Laufzeit ändern?



Harry offline
PowerUser
Avatar
Gender: male
Location: GERMANY  zwischen Augsburg und Ulm
Age: 54
Posts: 1520
Registered: 03 / 2003
Private message
Subject: Serielle Baudrate zur Laufzeit ändern?  -  Posted: 26.11.2017 - 09:47   -  
Hallo @ all,

mir schwirrt da eine Idee im Kopf rum, aber dazu müßte ich im laufenden Programm die Baudrate der seriellen (UART) Schnittstelle ändern können - geht das und wenn ja, wie?

Controller wäre ein XMega256A3U. Schnittstelle D1 (PortD die #1 (nicht #0)).

Gruss
Harry
Elektronik arbeitet mit Rauch - wenn man den Rauch raus läßt, funktioniert es nicht mehr.
Electronics works with smoke - if you let the smoke out, it works no longer.
go down go up
Harry offline
PowerUser
Avatar
Gender: male
Location: GERMANY  zwischen Augsburg und Ulm
Age: 54
Posts: 1520
Registered: 03 / 2003
Private message
Subject: Re: Serielle Baudrate zur Laufzeit ändern?  -  Posted: 26.11.2017 - 13:57   -  
ok hat sich erledigt - grad gefunden:
Code

SerBaud (SerBaud1, SerBaud2, SerBaud3, SerBaud4)
XMega
SetSerBaud
Stellt die BaudRate der seriellen Schnittstelle zur Laufzeit ein.
Elektronik arbeitet mit Rauch - wenn man den Rauch raus läßt, funktioniert es nicht mehr.
Electronics works with smoke - if you let the smoke out, it works no longer.
go down go up
Lschreyer offline
Benutzer
Avatar
Gender: n/a
Location: n/a 
Age:
Posts: 456
Registered: 02 / 2007
Private message
Subject: Re: Serielle Baudrate zur Laufzeit ändern?  -  Posted: 28.11.2017 - 12:49   -  
Genau damit geht das, ich nutze das um vom PC aus die Baudrate zu ändern, ich sende dazu einen Befehl über den Serport, der Controller setzt dann entsprechend die Baudrate. So kann mein Anwender auch bei lahmen PCs / alten Laptops die Baudrate senken wenn es zu Übertragungsfehler kommt.
go down go up
Harry offline
PowerUser
Avatar
Gender: male
Location: GERMANY  zwischen Augsburg und Ulm
Age: 54
Posts: 1520
Registered: 03 / 2003
Private message
Subject: Re: Serielle Baudrate zur Laufzeit ändern?  -  Posted: 28.11.2017 - 16:48   -  
Das setzt aber doch schon eine funktionierende Verbindung voraus ;)
Elektronik arbeitet mit Rauch - wenn man den Rauch raus läßt, funktioniert es nicht mehr.
Electronics works with smoke - if you let the smoke out, it works no longer.
go down go up
rh offline
Administrator
Avatar
Gender: male
Location: GERMANY  Germany
Age:
Posts: 5450
Registered: 03 / 2002
Homepage Private message
Subject: Re: Serielle Baudrate zur Laufzeit ändern?  -  Posted: 28.11.2017 - 16:59   -  
Hallo Harry
Es gibt aber einen Trick dafür. Der host sendet immer wieder daß gleiche Zeichen. Der slave erhöht zyklisch die Baudrate bis das Teichen sicher erkannt wird.
Das Zeichen muss ein bestimmtes sein. Welches weiß ich nicht mehr.
rolf
Cars don't buy cars -- Autos kaufen keine Autos.
Henry Ford
This post has been edited 1-times. Last edit: 28.11.2017 - 17:00 by rh.
go down go up
miparo offline
Schreiberling
Avatar
Gender: male
Location: GERMANY  Germany
Age: 52
Posts: 670
Registered: 09 / 2007
Private message
Subject: Re: Serielle Baudrate zur Laufzeit ändern?  -  Posted: 28.11.2017 - 17:17   -  
$55 und $AA zusammen waren das
Kein Support per PN! | No support via PM!
go down go up
tbegle offline
Benutzer
Avatar
Gender: n/a
Location: n/a 
Age: 59
Posts: 34
Registered: 01 / 2018
Private message
Subject: Re: Serielle Baudrate zur Laufzeit ändern?  -  Posted: 26.12.2018 - 17:41   -  
Hallo Power User!

ich habe mir eine 2. Serielle I/O an meinem nano Board(ATMEL 328p) mit einem 2 fach Analog Switch(TS5A23157 VSSOP) für 47Cent gebastelt!.
Jetzt kann ich wahlweise mit meinem Board mein Nextion Display und meinen Bluetooth Transceiver betreiben
Wenn ich nun noch zur Laufzeit! meinen 328p(Serport) - 115200Bd(Nextion Display) und 9600Bd(Bluetooth) umschalten könnte!
Im Forum habe ich nichts gefunden oder den falschen Suchbegriff eingegeben

Grüsse
Toni
go down go up
Thomas.AC offline
Benutzer
Avatar
Gender: n/a
Location: n/a 
Age: 38
Posts: 228
Registered: 07 / 2013
Private message
Subject: Re: Serielle Baudrate zur Laufzeit ändern?  -  Posted: 26.12.2018 - 19:54   -  
es wurde weiter oben geschrieben, dass das mit Serbaud geht. Oder habe ich die Frage falsch verstanden?
Gruß
Thomas
go down go up
tbegle offline
Benutzer
Avatar
Gender: n/a
Location: n/a 
Age: 59
Posts: 34
Registered: 01 / 2018
Private message
Subject: Re: Serielle Baudrate zur Laufzeit ändern?  -  Posted: 27.12.2018 - 19:58   -  
Hallo ich noch X,

ich habe den Fehler nun gefunden wieso der Befehl setbaud(...) ; nicht funktioniert
Sobald ich die Word Grenze unterschreite z.B. 57600Bd funktioniert der Befehl !
Kann mir jemand sagen wie ich dennoch 115200Bd (zur Laufzeit) verwenden kann? - 57600Bd und ander Baudraten hat mein Display nicht am Schirm!
Umschaltung Display(115200Bd) <-> Bluetooth(9600Bd)

Grüsse
Toni
go down go up
Gunter offline
Administrator
Avatar
Gender: male
Location: GERMANY  Frankfurt Main / Germany
Age:
Posts: 1619
Registered: 02 / 2003
Private message
Subject: Re: Serielle Baudrate zur Laufzeit ändern?  -  Posted: 27.12.2018 - 21:06   -  
Hallo Toni,

die Online Hilfe für setbaud (Taste F1) zeigt das auch an:
Procedure SetBaud1 (var:baud: word);
Mehr als Word geht da auch nicht, da es Prozessor intern nur
2 Byte für die Einstellung der Baudrate gibt.

Für die Erzeugung höherer Baudraten muss bei kleinen Quarz Freuenzen
ein "Double Speed Bit" gesetzt werden.
Dadurch wird die eingestellte Baudrate einfach verdoppelt.
Mit Setzen dieses Bits stellst du dann (9600 div 2) bzw. (115200 div 2) ein
was zu realen 9600 bzw. 115200 Bd führt.
(analoges Prinzip wie die CKDIV8 Fuse arbeitet)

Füge einfach am Ende der Prozedur Init folgendes ein:
ASM: UCSR0A := UCSR0A OR %0000 0010; //set Serport 0 double speed
und benutze überall "gewünschte Baudrate" div 2.
(am Ende von Init weil
1. da noch keine Interrupts aktiv sind und
2. der vom AVRco generierte Init-Teil mit diesem Register "durch ist" und
dieses Bit garantiert nicht mehr überschreibt).

Soweit ich gesehen habe, wird diese Atmel Spezialität vom AVRco erst
bei XMEGA unterstützt.

Gruß
Gunter

P.S.:
die vom AVRco im ASM Listing angebenene Abweichung der realen von
der eingestellten Baud Rate stimmt dann natürlich nicht mehr. Der Compiler
bekommt von dieser Manipulation schließlich nichts mit.
Da musst du die Tabelle im Prozessor Manual als Anhaltswert nehmen:
siehe "Examples of Baud Rate Setting" Table 19-11
2 Dinge sind unendlich: das Universum und die menschliche Dummheit.
Aber bei dem Universum bin ich mir noch nicht ganz sicher
--
Albert Einstein

---
The concept of global warming was created by and for the Chinese in order to make U.S. manufacturing non-competitive
--
Donald J. Trump on Twitter
This post has been edited 11-times. Last edit: 28.12.2018 - 01:52 by Gunter.
go down go up
tbegle offline
Benutzer
Avatar
Gender: n/a
Location: n/a 
Age: 59
Posts: 34
Registered: 01 / 2018
Private message
Subject: Re: Serielle Baudrate zur Laufzeit ändern?  -  Posted: 28.12.2018 - 15:34   -  
Hallo Gunter,

danke für die rasche Auntwort und Unterstützung!

Da wäre ich selbst niemals darauf gekommen! - unglaublich wie tief du ATMEL bzw. den ELAB-Copiler verinnerlicht hast !
Ich werde deinen Vorschläg nächstes JAHR (hihi) in die Tasten klopfen

Mir ist soeben eingefallen, mit dem Befehl "SerPort = 115200, Stop1;- fünktioniert die Übertragung! - mit dem Befehl setbaud(9600); könnte ich
den Bluetooth Transceiver betreiben! - aber wie komme ich wieder auf die 115200Bd?(Display)

Ein schönes neues Jahr 2019
Gruss
Toni
go down go up
Gunter offline
Administrator
Avatar
Gender: male
Location: GERMANY  Frankfurt Main / Germany
Age:
Posts: 1619
Registered: 02 / 2003
Private message
Subject: Re: Serielle Baudrate zur Laufzeit ändern?  -  Posted: 28.12.2018 - 17:54   -  
Hi Toni,

nur über den "Trick" mit double speed und dann SetBaud (115200 div 2).
War auch nicht ganz richtig, was ich oben geschrieben habe.
1. gibt es sogar nur 12 Bit für die Baud Rate Einstellung
2. wird da auch ein errechneter Wert (und nicht die Baud Rate) eingetragen
(nämlich die Anzahl der Taktzyklen die zwischen 2 Bits bei dieser Baud Rate
und dieser Taktfrequenz liegen, also praktisch das "Sample Intervall").
Aber egal. Solange das SetBaud so bleibt wie es ist, hilft nur der Trick.
Oder eine eigene Prozedur für SetBaud, die per ASM die Register manipuliert,
was aber ohne double Speed auch erst >1 Mhz Clock funktioniert

Guten Rutsch, Gunter

edit:
Die Definition "Serport = ..." wird vom Compiler ausgwewertet.
"SerBaud" ist eine Laufzeitfunktion und muss vom Controller ausgeführt werden. Daher die Beschränung auf 16 Bit.
2 Dinge sind unendlich: das Universum und die menschliche Dummheit.
Aber bei dem Universum bin ich mir noch nicht ganz sicher
--
Albert Einstein

---
The concept of global warming was created by and for the Chinese in order to make U.S. manufacturing non-competitive
--
Donald J. Trump on Twitter
This post has been edited 4-times. Last edit: 30.12.2018 - 02:38 by Gunter.
go down go up
 


Registered users in this topic
Currently no registered users in this section

Delete cookies of this forum  •  FAQ / Help  •  Team page  •  Imprint   |  Local time: 20.06.2019 - 15:38