Forum: Mikrocontroller und Digitale Elektronik DMX senden ohne Timer möglich?


von Rene (Gast)


Lesenswert?

Hallo,

Sorry für die Frage aber es muß sein.
Gibt es eine Möglichkeit DMX zu senden ohne einen Timer zur verfügung
zu haben. Ich haben nur noch die Uart zur verfügung mehr leider nicht.
Controller ist der ATMega 8515 mit 8MHz Takt. Habe im Web verschiedene
Sachen gefunden aber die Gingen alle mit Timer0 und der Uart.
Gibt es da Lösungsansätze? Eigentlich möchte ich nur DMX senden wenn
sich kanalwerte ändern die im RAM liegen.
Ich weiß auch nicht was ich jetzt momentan sende da kein Oszi zur
verfügung habe. Kann man im AVR studio simulieren was aus der Uart
rauskommt?

von HendrikHoelscher (Gast)


Lesenswert?

Du MUSST DMX in einer Schleife senden!!

Ich ärger mich tierisch über Transmitter die nur bei Änderungen
senden:
Bei langen Ketten und Einstreuungen kommt häufig statt der Änderung nur
noch Mist an.
Strobos, Nebelmaschinen, etc. erkennen noDMX und senden plötzlich
Ausfallszenen oder schalten ab - das ist einfach nur ärgerlich.

Statt einem Timer kannst Du natürlich immer Schleifen nehmen. Bei 80µs
geht Dir aber ordentlich Rechenzeit ab.

Deine Lösung wäre:
T0 mit fester Zeit arbeiten lassen und die einzelnen Routinen, die
seinen Tick brauchen mit einem softPrescaler versorgen
(Zählregister/SRAMzelle)
Falls es um meinen Transceiver geht (mega8515): mein Wizard setzt auch
auf diese T0-Aufteilung. Sollte ich vielleicht noch hübscher bauen...

Alternative wäre ein scheduler - für Dich aber wahrscheinlich noch
etwas krass...

von HendrikHoelscher (Gast)


Lesenswert?

Du siehst am TxD-Pin, ob was passiert. Zeit wird im Prozessor
angezeigt.

Ansonsten wäre Hapsim vielleicht eine Möglichkeit (noch nicht dafür
getestet...)

von Rene (Gast)


Lesenswert?

Hallo,
danke für die Antwort.

Eigentlich geht es darum zwischen einzelnen geräten daten zu
übertragen.
Das muß nicht per DMX passieren.
Es soll eine syncrone Master Slave funktion sein. Über Dipper soll
codiert werden wer Master und wer slave ist. Dh ein gerät soll senden
und die anderen Empfangen. Sone Art Syncroner Demo Mode.
Das müsste doch mit der Uart gehen oder?
Der master Wert im RAM 0x06A =100 übertrage an Slave diesen wert und
mach das selbe wie der Master.
Naja schwer zu beschreiben. Wie gesagt ist ist nur zu Demozwecken
gedacht.

von HendrikHoelscher (Gast)


Lesenswert?

Wenn alle geräte wissen, was sie machen sollen und Du nur selektieren
willst, solltest Du wirklich kein DMX nehmen.

RS485 ist hingegen eine gute Wahl für die Aufgabe. Wieso sendest Du
nicht einfach die jeweilige ID mit parity drei Mal hintereinander:
Falls ein PE aufgetreten ist, hast Du so noch die beiden anderen
Bytes.

Dann entfällt natürlich ein Timer - obwohl ich hier vielleicht einen
Timeout einbauen würde: Wenn x ms nix auf dem USART passiert ist, ist
das nächste Byte automatisch das Erste eines Tripels. (Und schon hast
Du wieder einen definierten Zustand, falls Dir der Bytecounter
abschmiert ;-)

von Rene (Gast)


Lesenswert?

Hallo,

DMX Hat den Vorteil das ich nicht alle Slave Geräte umschalten muß
sondern Sie Im Mormalen DMX Empfangsmode lassen kann Dh wenn kein
Steuergerät vorhanden ist dann brauch ich nur einen Dipper an einem
Gerät umzulegen und schon ist es der Master und alle anderen machen was
der master sagt. Für einfache anwendungen einfach nur einfach.

von HendrikHoelscher (Gast)


Lesenswert?

Wie sollen die Slaves zwischen DMX und SlaveMode unterscheiden?

So wie Du es planst, musst Du wohl doch ggf. ein korrektes DMX-Signal
generieren (auch kanal- und nicht szenenbasiert)...

von HendrikHoelscher (Gast)


Lesenswert?

ach ja: mit Timer ;-)

von René (Gast)


Lesenswert?

Hallo,

Die Slave Geräte müssen ja nicht unterscheiden DMX ist eben DMX.
Ich wollte ein bisschen konfort einbauen. Der Timerinterrupt wird
regelmäßig aufgerufen und darf eben nicht zwischendurch unterbrochen
werden wie es in der Software von Hendrik passiert. geht das nicht auch
ohne Unterbrechung? Bei mir ist der Vorteiler auch gleich 1 und bei
Hendrik 4. Dh. der Interrupt wird 4x so oft ausgeführt. Das könnte man
bber mit einem Zähler ändern so glaube ich. Aber wie verhindere ich das
der DMX Reset unterbrochen wird? Würde das nicht auch über einen Zähler
gehen?

von HendrikHoelscher (Gast)


Lesenswert?

Natürlich geht das:
Stichworte: Zählregister, Flags
(mit dem Register teilst du Dir die Frequenz zurecht und mit einem Flag
sagst Du, ob die Routine überhaupt angesprungen werden soll.)

Wenn den Kopf mal wieder frei habe, werde ich den Wizard mal auch so
umbauen, dass T0 einen gut handlebaren Systemtakt vorgibt, auf den dann
der andere Kram (s.o.) zugreifen kann...
Ich wusste gar nicht, dass es damit Probleme gibt.

Trotzdem hast Du nen Denkfehler:
DMX sendet x Kanalwerte.
Dein Slavekonzept wählt aber vorhandene Szenen aus.
Wenn das kompatibel sein soll, muss der Master alle Szenen haben und
die Kanäle als DMX-Stream an die Slaves ausgeben. (Vielleicht kanns wer
anders besser erklären...)

von Rene (Gast)


Lesenswert?

Hallo,

ich krieg das einfach nicht hin das das Teil DMX sendet.
Es sendet irgendwas aber was wiß ich nicht so genau da kein Oszi
vorhanden ist. Welche Geräte würden sich dafür eignen eine PC Variante
oder ein Richtiges.
Ich weiß auch nicht ob ich die Uart richtig eigestellt habe. Könntet
Ihr mal nachsehen?

ldi      TEMP,0x01           ;Load UART Bautrate Register with 0x01
out      UBRRL,TEMP
sbi      UCSRB,RXCIE            ;Enable RX Interrupt
sbi      UCSRB,UCSZ2            ;Enable 9-Bit Mode
sbi      UCSRB,RXEN             ;Enable RX-UART
ldi      temp, 0x00
out     UBRRH, temp
ldi      temp, (1<<URSEL)|(3<<UCSZ0)|(1<<USBS)
out     UCSRC, temp
sbi  UCSRB,UDRIE
sbi     UCSRB,TXEN

Wie gesagt DMX Senden und empfangen
Danke euch

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.