Forum: Mikrocontroller und Digitale Elektronik UART Break


von Sören R. (monofone)


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

von Sören R. (monofone)


Angehängte Dateien:

Lesenswert?

komisch das bild wollte nicht

von Frank (Gast)


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

von Sören R. (monofone)


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

von Joerg W. (joergwolfram)


Lesenswert?

Das mit dem baudrate halbieren ist schon eine gute Idee, da ein Break 
ein Null-Signal von mindestens einer Bytedauer ist. Wenn man nur 0x00 
sendet kommt ja das Stop-Bit und das ist 1.

gruß Jörg

von Bernd R. (Firma: Promaxx.net) (bigwumpus)


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."

von Sören R. (monofone)


Lesenswert?

Danke Jörg,

also gehe ich recht in der Annahme das, mein Signal ein korrektes UART 
Break ist?

Achso vll. noch die Werte ich sende auf 9600 und beim Break auf 4800 
baud/s.

danke

Sören

von Sören R. (monofone)


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.

von Bernd R. (Firma: Promaxx.net) (bigwumpus)


Lesenswert?

oder hier:

http://www.lookrs232.com/rs232/waveforms.htm

logisch "0" wäre richtig (von mir).
Es gibt also ein Startbit, aber kein Stopbit...

von Sören R. (monofone)


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 ?

von Stefan W. (wswbln)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.