mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik UART Break


Autor: Sören Roh (monofone)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sören Roh (monofone)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
komisch das bild wollte nicht

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sören Roh (monofone)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Joerg Wolfram (joergwolfram)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Bernd Rüter (Firma: Promaxx.net) (bigwumpus)
Datum:

Bewertung
0 lesenswert
nicht 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."

Autor: Sören Roh (monofone)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sören Roh (monofone)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Bernd Rüter (Firma: Promaxx.net) (bigwumpus)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Sören Roh (monofone)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Stefan Wimmer (wswbln)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.