Forum: Mikrocontroller und Digitale Elektronik DMX Empfänger mit PIC16F877


von Michael Wulz (Gast)


Lesenswert?

Ich programmiere mir grad einen DMX512 Empfänger mit einem PIC16F877,
hab beim USART Modul des PIC jedoch einige Probleme!

Das Modul empfängt Daten, jedoch ist der Buffer gleich voll und ich
bekomme einen OERR (Overrun Error) dann leere ich den Buffer und
starte
das USART von neuem.

Dies funktioniert soweit schon, jedoch wenn ich die Daten die ich aus
dem Buffer hole anschau, sind diese alles andere als DMX512 Werte ;-)

hat jemand eine Ahnung davon?
bzw. schon mal mit RS485 und PIC USART Schnittstellen
herumprogrammiert?

Ich bin über jede Hilfe froh!!!

besten Dank
Michael Wulz

von Tom (Gast)


Lesenswert?

Schau mal bei den alten Beiträgen unter "PIC verschluckt zeichen" oder
so. das hatte ich einen code für die USART hineingestellt. vieleicht
hilft dir der weiter.

von Gralf (Gast)


Lesenswert?

>Dies funktioniert soweit schon, jedoch wenn ich die Daten die ich aus
dem Buffer hole anschau, sind diese alles andere als DMX512 Werte

Leider kenne ich den PIC nicht, bisher nur AVR. Da klappt das mit DMX
über den UART ohne Probleme. Das sind keine DMX-Werte, was Du
empfängst? Das geht doch gar nicht. DMX sendet ja auch nur ein
8bit-breites Byte.

Das DMX-Protokoll kennst Du doch hoffentlich? Begriffe wie Break und
Mark und von dem Startcode und dem zweiten Stopp-bit hast Du schon
gehört?

von Michael Wulz (Gast)


Lesenswert?

ich programmiere schon seit 4 jahren DMX Empfänger, nur bisher nach
einem etwas eigenem Prinzip ;)

nur ich brauch ab nun mehr Rechenleistung, und da hab ich das USART
Modul des PIC Ausprobiert!

Es funktioniert bereits!

Ich bekomme immer wenn ein Byte im USART Buffer empfangen wurde einen
Interrupt, dann messe ich die Zeit zwischen den Interrupts!
Ist eine Zeit eimal größer 88µS dann habe ich die BREAK entdeckt, folgt
darauf noch ein Startbyte welchs (normalerweise 0 ist) dann ist die
Initialisierung fertig und ich kann die einzelnen DMX Werte
(0...255)x512 einlesen;-)

das einzige was halt blöd ist wenn mal ein MARK zwischen den Bytes
größer ist als die Break und der darauffolgende DMX Wert 0 ist dann
wird dies ebenfalls als Break identifiziert ;-(

Was gibts da für Möglichkeiten, sowas vorzubeugen?
mfg Michael

von Gralf (Gast)


Lesenswert?

Beim AVR gibt es das sog. Fehler-Bit im UART-Register. Das ist gesetzt,
wenn nach einem Byte kein korrektes Stop-Bit empfangen wurde. Außerdem
kann der UART vom AVR auch 9 Datenbits auswerten. Nimmt man das 9. Bit
als Stop-bit an, so kann man schon mal die gesamte Empfangsroutine an
den UART abgeben. Die Auswertung des Break geschieht dann mit Hilfe des
Fehlerbits. Schon bemerkt? Ein Break = 88µs = 2 Byte incl.
Startbit+2Stopbit. Wenn ich also ein Zeichen empfangen habe, aber das
Fehlerbit gesetzt ist gehen ich davon aus, daß nach einem weiteren
Zeichen der Startcode beginnt.

Leider kenne ich die PIC nicht. Mußt also schon selbst sehen, ob es
dort ähnliche Möglichkeiten gibt. Dann sparst Du Dir das messen.
Denn wer viel mißt, mißt Mist!

Gralf

von Michael Wulz (Gast)


Lesenswert?

ahh, ;-)
thx für die Hilfe!

werd ich gleich ausprobieren!

Michael

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.