Forum: Compiler & IDEs DMX Empfänger für ATtiny2313


von Carsten B. (corvulus)


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

von Der müde Joe (Gast)


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.

von RonnyRoster (Gast)


Lesenswert?

Hallo,

falls noch nicht geschehen, schaue bitte einmal in der Codesammlung, da 
gibt es midestens 2 Beispiele direkt für einen 2313.

Mfg
Ronny

von Der müde Joe (Gast)


Lesenswert?

Genau; hatte ich glatt vergessen.
Das hier wird Dir helfen (über Schlagwort "DMX" gefunden):

DMX Receiver - 4Channel PWM (2*8bit lin, 2*16bit exp) - AtTiny2313

Beitrag "DMX Receiver - 4Channel PWM (2*8bit lin, 2*16bit exp) - AtTiny2313"

Der müde Joe.

von Carsten B. (corvulus)


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

von TestX .. (xaos)


Lesenswert?

hört sich so an als hättest du den controller mit internem 1mhz takt und 
clkdiv/8 am laufen ?
DMXAddress direkt setzen funktioniert selbstverständlich. habe den 
testaufbau hier, also der code funktioniert so wie er ist problemlos

von Carsten B. (corvulus)


Lesenswert?

Hey, coole Sache. :-) Den Fuse habe ich noch nie beachtet. Nachdem ich 
das Signal nun noch umgepolt habe funktioniert es.

Vielen vielen Dank!!! :-)

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.