Forum: Mikrocontroller und Digitale Elektronik UART Datenempfang


von Uli (Gast)


Lesenswert?

Hi,

Ich versuche mich gerade mit dem UART anzufreunden. Habe einen 4414 und 
einen 8515 zur Auswahl.
Nun wurde uns folgende Aufgabe gestellt:

Baudrate: 250kBaud

Im Ruhezustand liegt die Datenleitung auf hohem Potential (MARK). Der 
aktive Pegel ist Low (BREAK, SPACE); die Begriffe MARK, SPACE und BREAK 
entstammen der Terminologie serieller Schnittstellen. Die Übertragung 
beginnt mit einem BREAK, der mindestens 88 us Dauer aufweisen soll (2 
Framezeiten). Dieser Break wird als RESET-Signal interpretiert.

Der RESET wird von einem MARK gefolgt, der den Beginn der 
Datenübertragung signalisiert. Dieser MARK soll eine feste Länge von 8 
us nicht unterschreiten.
Im Anschluß hieran werden n+1 Datenbytes gesendet, die die Daten für n 
Kanäle enthalten. Jedes Byte wird von einem Startbit (SPACE) eingeleitet 
und mit zwei Stopbits (MARK) beendet; das Übertragungsformat ist also 
8N2. Man beachte jedoch, daß eine zu sendende 0 als BREAK, eine zu 
sendende 1 als MARK gesendet wird. Das erste gesendete Byte wird als 
Startbyte bezeichnet und hat den festen Wert Null (00h).

Das Problem was nun vorliegt ist nicht die Daten auszuwerten, sondern 
die Erkennung des RESET-Signals mit anschließendem high-Pegel(MARK). 
Denn erst wenn dies korrekt ist kann man ja den UART freigeben.
Des weiteren muß ständig überprüft werden ob dieses RESET-Signal kommt, 
damit bei der Auswertung immer eindeutig ist welches das STARTbyte ist 
und wann Daten kommen.


Wenn also jemand zu diesem Problem eine Antwort weiß so bitte ich diese 
zu posten.
Ich hoffe es sieht jetzt nicht so aus als wolle ich mir keine Arbeit 
machen, aber ich bekomme diese ständige Überprüfung nicht vernünftig 
hin!

ULI

von mikki merten (Gast)


Lesenswert?

Die Überprüfung mit FE-Bit reicht zur Starterkennung eines DMX Frames 
vollständig aus. Lediglich beim Sender mußt du dafür Sorgen, daß als 
BREAK min. 88 µs Space gesendet wird und das MAB min. 8 µs breit ist, 
läßt sich aber über Timer leicht lösen. Ebenso die TimeOut-Erkennung > 1 
sec.

von Uli (Gast)


Lesenswert?

Danke mikki,

leider kann ich mit dem FE Bit nicht sehr viel anfangen, da der UART 
relativ Neuland für mich ist.

Kannst du mir es etwas verdeutlichen und wie eine solche umsetzung zu 
realisieren ist. Vom ablauf her gesehen.

Ach ja ich benötige den UART nur zum empfang nicht zum senden der daten.

von mikki merten (Gast)


Lesenswert?

Mit Beginn des Breaksignal, welches der UART ja als Startbit erkennt 
wird der Empfangsbetrieb gestartet. Da ja nun das Stop-Bit nicht an 
entsprechender Stelle empfangen wird, wird im UART Status-Register das 
FE-Bit gesetzt (d.h. min. 10 Bit nacheinander waren Space) also kein 
Datenbyte. Als zusätzliche Sicherung kannst du noch die Überprüfung auf 
Startbyte = 0 (DMX1990 Standard) einbauen.

von Uli (Gast)


Lesenswert?

Wenn ich dich jetzt richtig verstanden habe brauche ich nur den UART 
starten und wenn das FE-Bit log.1 ist befindet man sich irgendwo im 
RESET-Signal und sobald dann das FE-Bit nicht mehr log.1 ist kommt 
entweder das Startbyte oder die Daten des ersten DMX Kanals.

von mikki merten (Gast)


Lesenswert?

Das 1. fehlerfreie Byte nach einem FE ist immer das Startbyte
und ist bei Dimmer-Daten immer 0

von Uli (Gast)


Lesenswert?

Vielen Dank das werde ich dann mal versuchen.

Machst du selber etwas mit DMX oder woher kommt es dass du darüber 
bescheid weißt??

Uli

von mikki merten (Gast)


Lesenswert?

@uli
schau dir den Beitrag an und folge den Anweisungen:
http://www.mikrocontroller.net/forum-extern/read-5-29075.html

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.