UART Break

OP #499994
Lesenswert?

Hi zusammen,

ich habe hier ein BT Modul welches sich über die UART Schnittselle 
konfigurieren lässt und dafür ein UART Break braucht um in den Command 
Mode(so heisst der) zu kommen.

Nun habe ich hier im Forum gesucht und auch eine Anleitung gefunden wie 
ich solch einen Break erzeuge.

Baudrate halbieren und ein 0x00 senden.

Allerdings bin ich mir nicht sicher ob das was ich da sende auch dem 
entspricht.

Ich habe mal das Signal mit dem Oszi aufgezeichnet und angehängt.

Es wäre super wenn mir jemand sagen könnte ob es dem entspricht was ich 
brauche bzw. wenn es nicht stimmt, ein Bild anhängen auf dem ich sehe 
wie das aussehen muss.

Gruß
monofone
Gast #500003
Lesenswert?

also klassisch wird ein Break durch 0x00 dargestellt. Wozu man da noch 
die Baudrate halbieren sollte bleibt mir verborgen. War vielleicht nur 
für einen speziellen Anwendungsfall gedacht. Eigentlich sollte dir das 
Datenblatt zu dem Modul Auskunft darüber geben wie das Ding gesteuert 
werden kann.

bye

Frank
OP #500009
Lesenswert?

wie die Steuerbefehle aussehen sollen geht aus dem Datenblatt hervor, 
ich fragte mich jetzt nur gerade ob "mein" UART Break so korrekt ist.

Aber wenn es ein einfaches ASCII NULL sein soll frage ich mich auch wie 
man transparent eine 0x00 über die Leitung übertragen kann. Denn ich bin 
ja bei einer UART Schnittstelle nicht darauf angewiesen nur ASCII 
zeichen zu senden, smoit würde bei jeder 0x00 ein Break ausgelöst 
werden, das kann ich mir ehrlich gesagt schlecht vorstellen.

Hier der Thread dazu
Beitrag "UART Break"

Gruß
Sören
(Firma: Promaxx.net) #500016
Lesenswert?

Nun, ein einfaches NULL wird kein Break ersetzen.

Ein Break setzt die Datenleitung auf "1", und zwar länger als jedes 
übertragene Byte.

Google liefert schnell:
"An RS-232 "break" signal is used to obtain the processor's attention. 
This signal consists of the RS-232 line being continually high (+12V, 
logical zero) for a period exceeding a normal character time. While 
break signals are passed through the switch, they are monitored, and if 
the length of a break exceeds a threshold, it is considered a request to 
enter command mode. The threshold is programmable for each port, in 
icrements of 10 milliseconds."
OP #500025
Lesenswert?

Und auch nochmal ein dickes Danke an Bernd, ich hoffe das war jetzt 
nicht der Votrag über suchen und nachdenken vorm schreiben ;-)

Ich habe natürlich auch google bemüht bin nur leider nicht auf die Idee 
gekommen nach einem rs232 break zu suchen. manchmal sind es die kleinen 
dinge die einen aufhalten.
OP #500488
Lesenswert?

So wie es aussieht komme ich mit meinem code nicht zu dem erwünschten 
erfolg:

void send_uartbreak(serial *interface){
  //set baudrate to half of original rate
  tWord baud = FRQ / (4800 *16L) -1;

  *interface->ubrrh = (tByte) (baud >> 8);
  *interface->ubrrl = (tByte) baud;

  //send ASCII NULL
  *interface->udr = 0x00;


  //restore original baudrate
  baud = FRQ / (UART_BAUD_RATE *16L) -1;

  *interface->ubrrh = (tByte) (baud >> 8);
  *interface->ubrrl = (tByte) baud;
}
ist das ein zu schneller wechsel zwischen den baudraten so das das 
interface schon wieder auf 9600 arbeitet bevor das zeichen überhaupt 
gesendet wurde ?
#500496
Lesenswert?

Sören Roh wrote:

> ist das ein zu schneller wechsel zwischen den baudraten so das das
> interface schon wieder auf 9600 arbeitet bevor das zeichen überhaupt
> gesendet wurde ?

...das kann gut sein. Du solltest nach dem Senden des Nullbytes warten, 
bis das TX-Shiftregister leer ist bevor Du die Baudrate wieder 
umschaltest.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren