www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik DMX mit AVR empfangen - wer hats schon gemacht?


Autor: Sven Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, bitte verweist mich nicht auf Google oder die Forensuche, die
habe ich schon bemüht..
Ich möchte gerne mit nem AVR (momentan Mega16) DMX empfangen.

Programmiersprache:C (Codevision)

Hardware: STK 500, SN 75176

Sagt mir mal ob ich auf dem richtigen Weg bin:

-Uart auf 250kbaud eingestellt (UBRRL = (CPU_Takt  16  baud) - 1;)
-1 Start Bit, 8 Daten Bit, 2 Stop Bit (UCSRC = (1<<7) | (1<<3) | (1<<1)
| (1<<0);)
-RX Interrupt an, Receiver an (UCSRB = (1<<7) | (1<<4);)
-Globale Interrupt an (#asm("sei");)

Soweit die initialisierung.

Dann muss ich ja auf nen Break warten, (Frame Error)
wie mache ich das am besten? in meiner Interruptroutine (wenn FE
gesetzt, dann channel =0, da ja das nächste Byte ohne Frame error Kanal
0 (Start) is? oder besser in meinem Hauptprogramm while (FE gesetzt)
channel =0;?

Das erste Wort lese ich doch einfach mit value = UDR ein, oder? und
zähle meinen channel hoch, bis zum nächsten FE, da setze ich channel
wieder auf 0..

Wo ist der Fehler??

Danke, sven

Autor: mmerten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das 1. Byte eines DMX-Frame ist der Startcode (im Regelfall 0 für
Dimmerdaten) ab dem 2. Byte folgen die eigentlichen Daten max. 512 Byte

Autor: Sven Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
genau, das habe ich verstanden. eventuell könnte man das erste Byte als
Verpolungstest nutzen?

Aber ist der Rest ok. Ich wäre froh wenn ich das 1. Byte richtig
empfanken könnte..

Autor: leo9 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
genaugenommen muß das Byte nach dem Frameerror Null sein, sonst sind die
nachfolgenden Daten keine Kanaldaten. Andere Werte kennzeichnen z.B.
Dimmerkurfen oder irgendwelche Konfigurationsdaten, das ist aber von
Hersteller zu Hersteller unterschiedlich implementiert. Schau mal bei
www.soundlight.de vorbei, dort gibts auch die DMX-Spezifikationen.

grüsse leo9

Autor: Sven Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja. soundlight kenne ich ebenfalls.

Aber den Uart vielleicht nicht genau genug. jedenfalls funktioniert
mein Code nicht.

mir würde es ja schon reichen den Break zu detektieren. Wo prüfe ich am
besten auf einen Frame Error?

In der Interruptroutine (wird einer während MARK / Reset ausgelöst?
oder polle ich das FE bit im Hauptprogramm und gebe wenn gesetzt den
IRQ frei??

Autor: Stefan Kleinwort (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde alles in der IR-Routine machen, inkl. FE-Erkennung.

Wenn FE, dann Kanal-Nr NULL setzen.

Wenn Kanal-Nr = NULL, dann muss empfangenes Byte auch NULL sein,
ansonsten sind die Daten ungültig -> verwerfen bis zum nächsten FE.

Wenn Kanal-Nr >= Empfangs-Kanal, dann Empfangsdaten in einem
Empfangs-Array speichern. Auf diese Daten kann dann das HP zugreifen.

Sinnvoll ist es, bei gültigen Daten eine LED und dazu einen Timer zu
setzen. Die LED zeigt den DMX-Empfang an, wenn der Timer abgelaufen ist
oder ungültige Daten empfangen werden, wird die LED wieder gelöscht.
Sehr hilfreich bereits während der Entwicklung und auch später beim
Betrieb!

Stefan

Autor: Sven Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Stefan, das hilft mir weiter.
hast du sowas schonmal umgesetzt? oder jemand anders, der mir zumindest
mal seine UART initialisierung zeigt..

Autor: Stefan Kleinwort (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, vor ein paar Jährchen ... allerdings auf einem 80517 (8031-Clon), in
Assembler. Wird Dir als AVR-C-Programmer garantiert nicht weiterhelfen,
aber wenn Du willst kannst Du das Assemblerzeugs mal haben.

Stefan

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.