DMX Steuerung mit dem AT89S8252

  • 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.



    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

  • 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?"

  • 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, 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?"

  • 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

  • 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

  • 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.

  • 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 and Dante Level I-II-III (alles sogar zweimal :)
    Jugendschwimmabzeichen, Rettungsschwimmabzeichen in Bronze
    Meine kommerziellen Softwareprodukte SATlive und LevelCheck

  • 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?"

  • 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?"

  • :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 and Dante Level I-II-III (alles sogar zweimal :)
    Jugendschwimmabzeichen, Rettungsschwimmabzeichen in Bronze
    Meine kommerziellen Softwareprodukte SATlive und LevelCheck

  • 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

  • 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?"

  • 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