1. Home
  2. Chat
  3. Forum
  4. Kalender
    1. Termine
    2. Karte
  5. Lexikon
    1. Letzte Änderungen
  6. Marktplatz
    1. Bewertungen
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Artikel
  • Forum
  • Termine
  • Lexikon
  • Marktplatz-Eintrag
  • Seiten
  • Erweiterte Suche
  1. PA-Forum
  2. Forum
  3. Selbstbau
  4. Selbstbau und Reparatur Technik

DMX Steuerung mit dem AT89S8252

  • AndyK
  • 2. August 2004 um 19:46
  • AndyK
    Beiträge
    118
    • 2. August 2004 um 19:46
    • #1

    Hi!

    Kennt sich jemand mit Assemblerprogrammierung und DMX aus?

    Wälze nun schon seit Tagen diverse Seiten (soundlight, http://www.dmx512-online.com/, usw), und habe heute mal versucht, ein kleines Testprogramm auf den µController zu schreiben.

    Leider funzt das Teil nicht. Vermutlich liegt es an den Timings. Kann das bitte mal jmd nachprüfen? Der µC wird mit 12 MHz angetrieben.

    Code
    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
    Alles anzeigen

    Ist vielleicht n bissel krank, weil ich die Serielle Schnittstelle nochmal neu erfunden habe, aber ich wollts mal von Grund auf probieren.
    Wie gesagt irgendwas geht ned! :oops: :oops:
    :?: S.O.S :?:

    Danke an alle, die sich sogar nur mal den Code bis hier her gelesen haben,
    und ein rießen Dankeschön an diejenigen, die mir antworten :wink:

    Gruß

    Andy

  • Sven M
    Profi
    Beiträge
    2.530
    • 2. August 2004 um 20:31
    • #2

    Puh, meine Assemblerzeit ist (gottseidank) etwas her und nutzte den 8051.
    Aber ich mache recht viel mit ATMegas, aber in c.. kannst du dein Programm etwas mehr kommentieren? Und vielleicht mal andeuten wo du den Fehler vermutest.
    Ansonsten ist Mikrocontroller.net auch immer recht hilfreich.

    Was sagt der Raver auf der Techno-Party, wenn sein Extasy aufhört zu wirken?

    "Was ist denn das für eine sch... Mucke hier?"

  • Henne
    Beiträge
    1.580
    • 2. August 2004 um 20:40
    • #3

    Mit den alten 8bitRISC von Atmel kenn ich mich nicht aus.
    Vielleicht hilft Dir aber mein Assemblercode für einen mega8515...
    (das ganze ist auch so gut wie's geht erklärt)

    Den findest du im Lichttechnikbereich meiner Site.

    Grüße, Hendrik

    @ BigSound:

    C kannst du für viele DMX-Geschichten vergessen, da die Architektur oft nur ungenügend ausgenutzt wird... Was ist jetzt eigentlich mit dem LED-Kram los? Sollen wir's auf Eis legen? (Momentan finde ich SMPS eigentlich spannender...)

    Henne's Sites

  • Sven M
    Profi
    Beiträge
    2.530
    • 2. August 2004 um 21:26
    • #4

    Henne, auch wenn das hier OT wird, ich wollte dir auch ne mail zurückschreiben, aber momentan ists der hammer hier..so viel Arbeit.
    Ich melde mich, wir sollten in lockerem Kontakt bleiben.
    In C habe ich schon nen einfachen DMX empfänger programmiert, das war eigentlich ganz easy.

    Was sagt der Raver auf der Techno-Party, wenn sein Extasy aufhört zu wirken?

    "Was ist denn das für eine sch... Mucke hier?"

  • AndyK
    Beiträge
    118
    • 3. August 2004 um 03:09
    • #5

    Henne

    :) Auf deiner Seite hatte ich mich schon sehr ausgiebig umgeschaut, aber ich verstehen deinen Assembler überhaupt nicht! Die Kommentare haben mich auch nicht weitergebracht.
    (Ich kann z. B. deine UART INIT Block kein bisschen verstehen, weil die Architektur bei mir wohl komplett anders ist.... Außerdem wollte ich es ja mal ohne UART probieren, praktisch selbst ein Bit nach dem anderen im richtigen Takt in die Leitung schieben (das macht der Befehl rr A (rotate right Akku)), so kann ich einfach vom LSB zum HSB ein Byte z. B. auf Pin P1.1 legen! Dann beschäftige ich den Controller mit mov und NOP befehlen 4µs lang....


    Naja.. vielleicht sollte ich es doch lieber lassen....

    Trotzdem Danke! Wollte halt spieeeeeeeeeeelen !

    Gruß & Gute Nacht

    Andy

  • Henne
    Beiträge
    1.580
    • 3. August 2004 um 09:39
    • #6
    Zitat

    aber ich verstehen deinen Assembler überhaupt nicht! Die Kommentare haben mich auch nicht weitergebracht.

    Das tut mir wirklich Leid :( Ich hate mir echt Mühe gegeben... Hoffen wir, dass es am AT89-Assmebler liegt :wink:

    Was zwingt Dich eigentlich dazu, auf einem AT89 zu entwickeln?? Mit einer aktuellen MCU und USART hättest du weniger Probleme und könntest auch auf mehr fertigen Code zurückgreifen!

    Ohne USART verbringt die mcu sowieso zu viel Zeit mit dem DMX-Empfang, dass nichts Großartiges mehr nebenher Platz hat.

    Grüße, Hendrik

    Henne's Sites

  • AndyK
    Beiträge
    118
    • 3. August 2004 um 13:37
    • #7

    Ja sorry, die Befehle von Grund auf zu erklären währe jetzt echt zu kompliziert, wenn du keine Ahnung von meinem Assembler (und ich keine Ahnung von deinem) hast oder auch kein Befehlslisting mit den MZs vor dir hast. :oops: :oops:.

    Ich glaube der AT89S8252 ist gar nicht so veraltet. Eine (oder gar 2 ?) UART Schnittstellen hat er, aber ich check das noch nicht. Ich beginne eigentlich jetzt zum ersten mal, nichts komplett eigenes zu schreiben, sondern mit schon vorhandenen Protokollen oder Systemen zu kommunizieren.
    Um das Protokoll mit allen Timings von Grund auf zu verstehen (so dachte ich mir) wollte ich es mal so probieren.

    Gibt es jmd der meine "Sprache spricht" und mir ungefähr erklären kann, wie eine UART funktioniert?

    Vielen Dank für deine/eure Mühe

    Ändy Kei.

  • TomyN
    Profi
    Reaktionen
    1.755
    Beiträge
    6.778
    Termine
    26
    Marktplatz Einträge
    2
    • 4. August 2004 um 10:25
    • #8

    Hi,

    nur so zur Info: bei DMX funktioniert die Synchronisation durch ein Low (?)Signal das länger ist, als das normale Datenbyte, d.h. mit ner normalen Seriellen Schnittstelle kommt man erstmal nicht weit. Man muss die Synchronisation suche, indem man den Pin (oder nen anderen, an dem auch das gewandelte DMX Signal anliegt überwacht, bzw. einen Timer runterzählt, denn man bei nem Hi wieder auffüllt und stoppt.
    Mehr Details zu DMX gibt es z.B. bei Soundlight.de

    Tomy

    SIM II Operator und Dante Level I-II-III (Dante sogar dreimal :)
    Jugendschwimmabzeichen, Rettungsschwimmabzeichen in Bronze
    Meine kommerziellen Softwareprodukte SATlive und LevelCheck

  • Sven M
    Profi
    Beiträge
    2.530
    • 4. August 2004 um 10:57
    • #9

    Synchronisation kann man bei den Atmels prima durch den Frame Error auswerten. Bit gesetzt? dann ist das nächste gültige Kanal 0.

    Was sagt der Raver auf der Techno-Party, wenn sein Extasy aufhört zu wirken?

    "Was ist denn das für eine sch... Mucke hier?"

  • TomyN
    Profi
    Reaktionen
    1.755
    Beiträge
    6.778
    Termine
    26
    Marktplatz Einträge
    2
    • 4. August 2004 um 11:13
    • #10

    ähhh du verlässt dich auf eine Fehlermeldung ????

    Tomy

    SIM II Operator und Dante Level I-II-III (Dante sogar dreimal :)
    Jugendschwimmabzeichen, Rettungsschwimmabzeichen in Bronze
    Meine kommerziellen Softwareprodukte SATlive und LevelCheck

  • Sven M
    Profi
    Beiträge
    2.530
    • 4. August 2004 um 11:20
    • #11

    Ja..
    Warum nicht. Das ist ein µC. da gibts kein Windows oder so, etweder Bit gesetzt oder nicht.

    Was sagt der Raver auf der Techno-Party, wenn sein Extasy aufhört zu wirken?

    "Was ist denn das für eine sch... Mucke hier?"

  • TomyN
    Profi
    Reaktionen
    1.755
    Beiträge
    6.778
    Termine
    26
    Marktplatz Einträge
    2
    • 4. August 2004 um 11:25
    • #12

    :D Ist mir schon klar. Nur hätte ich halt immer etwas Bauchschmerzen bei ner Verwendung einer Fehlermeldung für den Normalbetrieb.
    Aber wenn es funktioniert..

    Tomy

    P.S. das nächste Byte ist nicht der Kanal 0, sondern noch ne Kennung, für die aber imho nur der Wert 0 definiert ist. Dann geht es weiter mit den Kanälen 0..511

    SIM II Operator und Dante Level I-II-III (Dante sogar dreimal :)
    Jugendschwimmabzeichen, Rettungsschwimmabzeichen in Bronze
    Meine kommerziellen Softwareprodukte SATlive und LevelCheck

  • Henne
    Beiträge
    1.580
    • 4. August 2004 um 11:29
    • #13

    Prinzipiell hat BigSound Recht!

    Der MAB wird einfach über einen FE erkannt. Allerdings muss der MAB durch das folgende Startbyte nachträglich validiert werden.

    Das ist aber alles scheinbar nicht das Problem (habe ich ja ausführlich bei mir erklärt) sondern die Umsetzung in den AT89-Dialekt.

    (Die Teile scheinen übrigens wirklich keine Auslaufmodelle zu sein. Warum fahren dann blos alle auf die AT90-Architektur ab???)

    Grüße, Hendrik

    Henne's Sites

  • Sven M
    Profi
    Beiträge
    2.530
    • 4. August 2004 um 11:47
    • #14

    Hey tomy, heute bist du aber spitzfindig.
    In der Literatur wird oft der erste valide Kanal als 0 bezeichnet, darauf folgt 1-512 (du stellst für Startadresse 1 ja auch nicht 0 ein sondern die kleinste Startadresse ist 1)
    Kanal 0 ist dazu gedacht weitere Informationen (Dimmerkurven..) zu übertragen, aber imo macht das keiner, somit ist der Wert in der Praxis 0. Bei den Atmegas funktioniert das jedenfalls prima.

    Was sagt der Raver auf der Techno-Party, wenn sein Extasy aufhört zu wirken?

    "Was ist denn das für eine sch... Mucke hier?"

  • AndyK
    Beiträge
    118
    • 6. August 2004 um 15:54
    • #15

    Juhu... es funktioniert....

    Das Timing des letzten Bits war zu kurz....
    http://www.progforum.com konnte helfen!

    Trotzdem danke an alle. Jetzt werd ich mich mal ans Programmieren der UART machen....
    Weis jmd. ob ich dazu einfach einen anderen Quarz einsetzen kann? (8 oder 16 mhz) ohne die Kondensatoren beim Quarz anzupassen?

    Gruß

    Andy

  • Henne
    Beiträge
    1.580
    • 6. August 2004 um 16:40
    • #16

    Im Datasheet zu Deiner mcu stehen die empfohlenen Cs drin.
    Wenn' stabil laufen soll, würde ich mich daran halten!

    Grüße, hendrik

    Henne's Sites

Anstehende Termine

  • PA-Forum Stammtisch LeatCon

    Dienstag, 6. Oktober 2026, 13:00 – 14:00
  • PA-Forum Stammtisch LeatCon

    Mittwoch, 7. Oktober 2026, 13:00 – 14:00
  • PA-Forum Stammtisch LeatCon

    Donnerstag, 8. Oktober 2026, 13:00 – 14:00
  • Competent Person for Event Rigging according to IGVW SQQ 2 | Level 1 | Munich (English)

    Dienstag, 13. Oktober 2026 – Freitag, 23. Oktober 2026
  • Combined seminar for experts in lifting gear and lifting beam systems (AnschlägerPlus)

    Dienstag, 13. Oktober 2026 – Donnerstag, 15. Oktober 2026

Letzte Themen

  1. Leatcon 2026 Forumstreffen

    skyper
    3. Oktober 2026 um 10:00
  2. Eminence Kappa 15 (LF) Bauvorschläge für Bassreflex oder Horn

    soundralf
    2. Oktober 2026 um 12:44
  3. Kleine PA und nur Fragen!!!

    Alex Bundschuh
    1. Oktober 2026 um 18:47
  4. Welche DI-Box/Line-Übertrager für Laptop/Kopfhörerausgang?

    wusel123
    30. September 2026 um 12:29
  5. Ersatzteilversorgung Lautsprecher (speziell Seeburg A3 MKII)

    Hanseat
    29. September 2026 um 18:25
  6. Neues Online-Simulationstool für Treiber / Gehäuse / Leistung / Filter

    Blancblue
    29. September 2026 um 13:16
  7. Subwoofer 80cm x 40cm x 80cm

    zegi
    28. September 2026 um 17:06
  8. Frontschaum in "Würfeloptik"

    Blancblue
    28. September 2026 um 15:41
  9. ADJ Entour Venue Hazer: Frage zum Heizelement

    skippa
    27. September 2026 um 10:16
  10. EU Cyber Resilience Act (CRA)

    alexanderjoseph
    26. September 2026 um 20:14

Benutzer online in diesem Thema

  • 1 Besucher
  1. Datenschutzerklärung
  2. Impressum
Community-Software: WoltLab Suite™