Autor |
DMX Tester mit Atmel Suche nach: dmx (395) |
|
|
|
|
BID = 415983
JoJo1987 Gerade angekommen
Beiträge: 8 Wohnort: Willstätt
|
|
Hallo,
ich brauche dringend eure Hilfe,
ich muss für die Schule (Informationstechnisches Gymnasium)im Rahmen einer Projektarbeit eine Arbeit mit dem Mikrocontroller Atmel 8051. Wir haben hierzu fertig aufgebaute Platinen mit Taktgeber, Stromversorgung und 4 Ports.
Ich habe mit jetzt als Thema eine DMX Tester ausgesucht. Hierzu möchte ich an Port 1 ein schiebe Poti anschließen um den DMX Wert einzustellen und an Port 2 8 Schalter und den Kanal zu adressieren. an Port 3 möchte ich dann den DMX Wert ausgeben.
Das Ganze muss in Assembler programmiert werden.
meine frage ist nun wie schaffe ich es den DMX Wert von dem 8 Poligen Port auf den 3 Poligen Seriellen DMX zu bringen?
Hab ihr so etwas vielleicht schon einmal gemacht?
Ist es sehr kompliziert?
Helft mit bitte es geht um mein Abitur.
Falls dann noch jemand einen Quelltext für mich hat währe das Genial.
Danke im Voraus
mfg
JoJo |
|
BID = 415992
cholertinu Inventar
Beiträge: 3755 Wohnort: CH
|
|
Zitat :
JoJo1987 hat am 21 Mär 2007 13:12 geschrieben :
|
wie schaffe ich es den DMX Wert von dem 8 Poligen Port auf den 3 Poligen Seriellen DMX zu bringen?
|
Dabei handelt es sich grundsätzlich um eine Art Parallel-Serie-Wandlung.
Ansonsten: DMX Protokoll studieren z.B. hier oder hier.
Dann mal eigene Ideen entwickeln und hier posten, wir helfen dann weiter wenn du Probleme hast. Einfach so wird dir hier keiner ein fertiges Projekt abliefern.
Zeig mal her was du bisher gemacht hast.
Bis wann muss die Arbeit fertig sein, wie sehen deine bisherigen Kenntnisse bezüglich uC aus?
Edit: Willkommen im Forum!
[ Diese Nachricht wurde geändert von: cholertinu am 21 Mär 2007 13:34 ] |
|
BID = 416008
JoJo1987 Gerade angekommen
Beiträge: 8 Wohnort: Willstätt
|
Hi,
mir ist klar das mir niemand ein fertiges Projekt liefert. Das möchte ich auch gar nicht. Ich möchte bei dem ganze ja auch ein bischen etwas lernen.
Das Projekt steht noch komplett am Anfang fertig sein muss es anfang Juli.
Meine kentnississe für µC's halten sich in Grenzen. In der Schule haben wir uns mit den grundkentnissen von Asambler und µC#s befasst. (Schleifen, Intrups, verwenden von Tabellen ect.) In dem Projekt sollen wir zeigen dass wir mit diesen Grundkentnissen in der Lage sin auch kompliziertere Aufgaben zu lösen. Wobei natürlich hilfestellungen aller Art erlaubt sind solange wir si angeben.
Ich arbeite in meiner Freizeit sehr viel mit Licht und Tontechnik und daher habe ich mir das Thema ausgewählt.
Mit dem DMX Protokoll habe ich mich auch schon beschäftigt. Ich bräuchte lediglich ein paar Ansätze zu umsetzung.
Der schwerpunkt des ganzen wird ja in der Paralel seriel Wandlung liegen. Der rest erscheint mir recht einfach mit meinen Kentnissen umzusetzen.
Ich würde mich also freuen wenn ihr mir ein bischen weiterhelfen könnt und mich durch dieses Projekt begleiten würdet.
mfg
|
BID = 416016
cholertinu Inventar
Beiträge: 3755 Wohnort: CH
|
Ist dir serielle Datenübertragung ein Begriff? Du musst an einem Port Pin die auszugebenden Daten "hintereinander" ausgeben, z.B. zuerst Bit0, dann Bit1... Bit7 des ersten Datenbytes, dann Bit0..Bit7 des zweiten Datenbytes usw. Die Reihenfolge der Bits und Bytes sowie Zugemüse (Start/Stop/Ack usw) ist vom Protokoll abhängig, in deinem Fall DMX.
Der Empfänger liest dann diese seriellen Daten ein und setzt sie wieder zu (parallel gelesenen) Datenbytes zusammen.
Mach dich mal schlau über die serielle Datenübertragung.
Wenn du dann die Ausgabe der DMX Daten in eine timergesteuerte Interruptroutine packst, dann klappt das auch mit dem Timing.
[ Diese Nachricht wurde geändert von: cholertinu am 21 Mär 2007 14:46 ]
|
BID = 416037
JoJo1987 Gerade angekommen
Beiträge: 8 Wohnort: Willstätt
|
Ok das mit der Timeroptimirten Ineruproutine müsste ich hin bekommen. Dann werde ich mir mal das DMX Protokoll genauer betrachten. und mir eine Lösung einfallen lassen wie ich das mit dem hintereinander senden der Daten hin bekomme.
Werde mich gleich mal über die Serielle Datenübertragung schlau machen.
Ich melde mich dann wieder
Danke
|
BID = 416045
JoJo1987 Gerade angekommen
Beiträge: 8 Wohnort: Willstätt
|
Hier bin ich nochmal,
ich habe mir die Protokolle ienmal näher betrachte und muss zugeben ich verstehe sie nicht so ganz.
http://mikrocontroller.cco-ev.de/de/dmx512.php
Ich werde daraus nicht ganz schalu wie ich dies umsetzten soll. Vileicht hat von euch jemand eine Ahnung von diesem Protokoll und kann es mir in einfache Worte zusammenfassen.
Der Kontroller mit dem ich arbeite ist eine AT89S8252. Ich habe auch hiervon schon die Datenblätter studiert und stellte mir die frage auf welchem Port gebe ich denn die Daten aus.
In den Datenblättern fand ich heraus, dass der Kontroller über ein SPI Serial Interface verfügt. Kann ich dieses Interface auch zur Ausgabe verwende und wenn ja wie.
Ich lese jetzt seit Stunden Protokolle und Datenblätter ich steige aber nicht so ganz dahinter wie ich dieses Problem lösen könnte.
Nehmt euch bitte die Zeit für mich und helft mir auf die Sprünge!
Vilen Dank
|
BID = 416083
JoJo1987 Gerade angekommen
Beiträge: 8 Wohnort: Willstätt
|
die frage mit der SPISchnitstelle hat sich geklärt.
Dumme frage!
|
BID = 416095
cholertinu Inventar
Beiträge: 3755 Wohnort: CH
|
Ein Hardware-Serial Interface (SPI, I2C, ...) bringt dir nichts, da diese immer ein spezifisches Protokoll implementieren.
Du musst die Bit- und Bytefolgen in Software nachbauen und das Timing genau einhalten, sonst kann der Empfänger nichts mit deinen Daten anfangen - ausser er ist robust implementiert.
|
BID = 416134
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
Mit der UART sollte es aber wohl gehen. Diese stellt man auf 250kbit/s ein und der Rest des Protokolls ist nur Software. Bis eben auf die Verdrahtung und die Abschlusswiderstände. Aber das ist ja eh klar.
Was ich ziemlich blöd finde:
http://www.mikrocontroller.net/topic/37890
Hier steht das z.B. auch mit der UART und mit den 250kbit/s (kbaud). Da hast du dich doch angemeldet und bereits eine Frage formuliert. Hast du da oben nicht mitgelesen?
Weiterhin frage ich mich, wieviel ihr gemacht habt bzw. wie du sowas alleine schaffen willst, wenn du nicht mal in der Lage bist, die richtigen Informationen zu finden. Sry, das ist nicht böse gemeint, aber ich frage mich halt...
_________________
|
BID = 416153
photonic Schreibmaschine
Beiträge: 1301 Wohnort: Zürich, Schweiz
|
Wenn du die Hardware von DMX genauer angeschaut hast ist dir sicher etwas in Sachen RS-485 aufgefallen. Für dieses Problem musst du noch einen passenden IC haben, z.B einen MAX485...
|
BID = 416184
cholertinu Inventar
Beiträge: 3755 Wohnort: CH
|
Schliesse mich der Meinung von DonComi an. Möge sich JoJo1987 alias <siehe link?> entscheiden, in welchem Forum/Thread er das Thema weiterbearbeitet haben will.
|
BID = 428207
JoJo1987 Gerade angekommen
Beiträge: 8 Wohnort: Willstätt
|
Hi,
entschuldige mich nochmal, dass ich in mehreren Foren gleichzeitig nach Hilfe gesucht habe. Ich habe mich aber definitiv für euch entschieden.
Ihr habt gemeint, ihr helft mir wenn ich euch einen Ansatz schicke.
Hier ist einmal ein kleines Programm. Problem ist nur es fuktionirt nicht. Könnt ihr mir da bitte weiterhelfen?
Quelltext:
$import (reg52.inc)
org 0000h
S1 EQU P1.3
Daten EQU P0
;---------------------------------------------- Zum Hauptprogramm gehen
ORG 0000h
sjmp main
;---------------------------------------------- Hauptprogramm -----
ORG 0020h
main:
;init: mov P0,#11111111b ; setze P0 alles auf "1"
; mov TMOD,#00000010b ; Mode2 Timer (8 Bit - Reload!)
; mov TL0,#152d ; Startwert
; mov TH0,#152d ; Reloadwert
; mov IP,#00h ; Priorität der Interrupts ist gleich!
; setb EA
; setb ET0
; setb TR0
mov DPTR,#Kanalwerte
mov R0,#0
;mov R2,#8 ;Hier Anzahl der Kanäle einstellen! ===========> Anzahl der Kanäle unten beim cjne einstellen!
WARTEN: jb S1,WARTEN
bytes_send:
mov P0,#00h
mov R1,50
break_time: djnz R1,break_time ;100µs break_time!
mov P0,#255 ;(1 MZ) ;MAB (Mark after Break 12 µs (8xNOP + mov + movc + mov = 12µ)
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
fetch_byte:
mov A,R0 ;(1 MZ)
movc A,@A+DPTR ;(2 MZ) Byte holen
mov P0,#0 ;MAB Ende => Startbit beginnt (low)
mov R1,#8 ;Zählregister für 8 Bits initialisieren
inc R0 ;Kanalzähler schonmal erhöhen
NOP
mov P0,A ; LSB
rr A
NOP
NOP
mov P0,A ; 2. Byte
rr A
NOP
NOP
mov P0,A ; 3. Byte
rr A
NOP
NOP
mov P0,A ; 4. Byte
rr A
NOP
NOP
mov P0,A ; 5. Byte
rr A
NOP
NOP
mov P0,A ; 6. Byte
rr A
NOP
NOP
mov P0,A ; 7. Byte
rr A
NOP
NOP
mov P0,A ; HSB
rr A
mov P0,#255 ;Stoppbits (2x 4µs)
NOP
NOP
; nach Sprung noch 4 MZ für fetch_byte
cjne R0,#8,fetch_byte ;(2 MZ) DEBUGGING: Braucht der CJNE noch einen MZ zum springen?
sjmp warten
Kanalwerte:
DB 0,255,255,0,255,0,255,0
end
Sagt mir bitte bescheid was ich anderst machen muss bzw. wo mein mein Fehler liegt.
Dank im voraus
gruß
JoJo
|