DMX Empfänger für ATtiny2313

#2443211
Lesenswert?

Ich suche eine Programmierhilfe, oder ein funktionierendes Programm, 
welches mir das DMX512-Protokoll auf einem ATTiny2313 entschlüsselt. Die 
fertige Hardware habe ich neben mir aufgebaut. 8Mhz Quarz mit 22pF 
Kondensatoren und einem SN17576 zur Umwandlung des differenziellen 
Signals.

Ich sitze nun seit Wochen an diesem Projekt und alle C-Codes, die ich 
bisher gefunden habe, haben nich funktioniert, oder ich habe sie beim 
Umschreiben so verändert, dass sie nicht mehr funktionierten (da möchte 
ich mich jetzt nicht festlegen), oder ich finde nur HEX-Files.

Am besten wäre eine Erklärung, was man beachten muss und wie man das 
UART für DMX am besten einstellt. Fast genausogut wäre auch ein QT, in 
dem nur die Entschlüsselung auf Grundlage der Parameter [Anzahl Kanäle] 
und [Kanal] die entsprechenden Bytes liefern würde.

Die Ausgabe mache ich dann individuell, je nach dem, was ich benötige.

Falls jemand so einen Code oder Infomaterial hat, würde ich mich sehr 
freuen.
Vielen Dank schoneinmal!

Grüße Carsten
Gast #2443603
Lesenswert?

Hallo, Carsten.
Vom Prinzip her sollte Dein 2313 das können. Er hat allerdings etwas 
wenig Flash, 2kByte. Mein DMX-Programm braucht ca. 3kByte.

Du brauchst 2 Dinge. 1. Einen Timer, der das "Break"-Signal feststellt. 
Dann die USART, die die bis zu 512 Bytes aufnimmt. Dein 2313 hat nur 
wenig SRAM, darum solltest Du Dein Programm so schreiben, dass es nur 
die relevanten Adressen in Variablen für späteren Gebrauch speichert.

DMX512 läuft mit 250kHz, 8N2. Dein 8MHz-Quarz passt also. Mir scheint, 
die USART kann keine BREAK-Kondition erkennen. Musst Du dann selbst 
machen, per Timer-Interrupt.

Kannste alles selber machen, brauchst keine Software von woanders, die 
dann eh' nicht läuft.

Der müde Joe.
#2463818
Lesenswert?

So, nachdem ich nun endlich mal weider Zeit gefunden habe, mich mit dem 
Thema zu beschäftigen habe ich den Code getestet.
Statt des DIP Schalters habe ich nach dem Einlesen der DIP-Werte im 
Programm einfach die Variable "DMXAddress" auf 1 gesetzt. Da ich nur 
8Mhz Quarze hier habe, musste ich noch den Wert von "UBRRL" von 3 auf 1 
setzen.
An die 4 PWM ausgänge habe ich LEDs angeschlossen, ebenso wie an den 
Error Ausgang, welcher auch nach bedsagten 4s zu leuchten beginnt, wenn 
der Watchdog greift.

Zum Test habe ich PWM1 manuell mit verschiedenen Werten gefüttert. PWM 
funktioniert, allerdings mit einer viel zu niedrigen Rate (ca. 20Hz).
Auf dem DMX Bus hängt noch ein PAR-PWM-Strahler mit gleicher Addresse, 
welcher die Daten richtig verarbeiten. Daten kommen auch auf jeden Fall 
am Controller an. Ich habe mal eine LED zwischen SN75176 und ATtinx2313 
geklemmt, welche augenscheinlich genauso flackert wie die LED am Sender.

Woran könnte es noch scheitern? Mir fällt zur Zeit nichts ein, was ich 
noch prüfen kann. Mich wundert hauptsächlich die langsame PWM. Wenn ich 
von Quarz auf internen 8Mhz Oszillator umschalte blinkt die LED jedoch 
genauso langsam...

Grüße Carsten

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren