mikrocontroller.net

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


Autor: Michael Wulz (Gast)
Datum:

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

Autor: Tom (Gast)
Datum:

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

Autor: Gralf (Gast)
Datum:

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

Autor: Michael Wulz (Gast)
Datum:

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

Autor: Gralf (Gast)
Datum:

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

Autor: Michael Wulz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ahh, ;-)
thx für die Hilfe!

werd ich gleich ausprobieren!

Michael

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.