DMX Empfänger mit PIC16F877

Gast #36822
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
Gast #36823
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.
Gast #36824
>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?
Gast #36825
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
Gast #36826
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 23 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.