Alternative zu ws2801 lpd6803 tm.... u.s.w gesucht!

  • Einfach mal überlegen, was da nun genau passiert ;)


    das untere ist schon "richtiger": wenn YL ungleich low(DMX_Buffer+DMX_Channels) ist, und/oder YH ungleich high(DMX_Buffer+DMX_Channels), dann kann die Zahl insgesamt nicht gleich sein, also geht es weiter mit dem Kopieren etc.


    Nur, so wie das da steht, springt er ja direkt wieder darüber - vergleicht also, ist nicht gleich, also wieder nach oben, vergleicht wieder - bis in alle Ewigkeit...


    einfach mal überlegen, was bei welcher Bedingung passieren soll, und wo Du dann also hin springen musst... in einem Fall muss eben die Schleife weiter laufen, im anderen ist sie beendet, je nachdem, ob Du nun die Zahl erreicht hast oder nicht...

    It's only light - but we like it!


    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!

  • Nee, das ist ja wieder das selbe!


    Noch mal zum Grundverständnis: So ein Assembler-Programm ist eine Liste von Befehlen, die der µC stur der Reihe nach abarbeitet - ausser Du sagst ihm eben, dass er an ner bestimmten Stelle weitermachen soll.


    Und das kann auch an eine Bedingung geknüpft sein, eben bei "brne" z.B. geht es an der angegebenen Stell weiter, wenn der Vergleich ergeben hat, dass die beiden Register (oder Register und Zahl) nicht gleich sind - wenn sie gleich sind, macht er mit dem nächsten Befehl weiter...


    was passiert nun hier..? - Du vergleichst in Zeile 3 YL mit einer Zahl, die sind nicht gleich - also springt er beim "brne" (in Zeile 4) wieder hoch zu Zeile 1, macht also als nächstes wieder den Vergleich...


    und da sich an YL ja nix geändert hat (wo auch, wurden ja in der Zwischenzeit keine anderen Befehle ausgeführt) ergibt der Vergleich also natürlich *wieder* "nicht gleich", also wieder hoch zu Zeile 1, usw., bis in alle Ewigkeit... bis zur Zeile 6 kommt er gar nicht!


    also, Du hast folgende Bedingungen:


    - YL ungleich low(DMX_Buffer+DMX_Channels) -> Schleife weiter machen, ansonsten weiter zum Vergleich von YH


    - YH ungleich high(DMX_Buffer+DMX_Channels) -> Schleife weiter machen, ansonsten Schleife beendet


    noch mal überlegen, wo Du nun bei welcher Bedingung hin springen muss, und bedenken: *In* der Schleife findet ja auch noch was statt, eben genau das Bitschieben und rumkopieren und Y-Pointer erhöhen... *dafür* machst Du die Schleife ja, nicht als Selbstzweck...

    It's only light - but we like it!


    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!

  • So. Wie siehts denn jetzt aus lieber Meister?


  • dieser Y+ unten ist also dafür dass der den Y Wert erhöht. Mann mann....

    Achso - dachte, das wäre klar, irgendwo muss ja Y erhöht werden, sonst bearbeitest Du ja immer die selbe RAM-Adresse, und die Schleife hört nie auf....


    wurde ja hier schon erklärt:

    dann in einer Schleife die Werte kopieren - immer erst den Wert aus dem DMX-Buffer holen mit Post-Increment (bedeutet, der Zeiger zeigt nach dem holen auf das nächste Byte):


    ld temp0, Y+

    das "Y+" ist eben das post-increment, siehe die schon mehrfach angesprochene Befehlsübersicht... ;)


    ja, so funktioniert das nun - ist aber ein bisschen "Spaghetticode"... ;)


    Also noch ein bisschen Feinschliff:


    Die Schleife muss ja auf jeden Fall mindestens 1x durchlaufen werden - also kannst Du die Abfrage, ob Du schon fertig bist, auch nach unten setzen ("fußgesteuerte Schleife")


    Damit wird das Ganze wesentlich übersichtlicher, weil Du läufst dann einfach durch die Bitschieberei, dann kommt die Abfrage, ob alle Bytes durch sind. Wenn nicht, geht's wieder nach oben, wenn ja, dann geht's weiter zum Ende der Routine - ohne das ganze hin- und hergespringe, da wird kein einziger "rjmp" gebraucht.... ;)


    und die Register temp3 und temp2 brauchst Du ja gar nicht in der Routine, also musst Du die auch nicht sichern - spart auch wieder 4 Anweisungen, also sowohl Platz im Flash, wie auch Zeit bei der Ausführung...


    kannst Du ja zur Übung noch machen, und dann ist die Routine perfekt, und hast Du eh' schon einiges gelernt :thumbup:


    ist doch gar nicht so schwer, oder...? - wenn man das mit den Schleifen, Sprüngen, Pointern, etc. mal kapiert hat, und die 10, 15 häufigsten Befehle auswendig weiß, und eben genau, *was sie machen*, dann reicht das für 90% aller Programmierfälle... ist in jeder anderen Sprache (dieser Art natürlich, bei objektorientiert wie Java etc. sieht's wieder anders aus, aber das nimmt ja keiner für µC-Programmierung) genauso.

    It's only light - but we like it!


    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!

  • Hi,

    Post-Increment

    Den Begriff hatte ich leider nicht so gut verstanden.

    ist aber ein bisschen "Spaghetticode

    Yep, hab schon gelesen, zu viele GO TO's (jumps) u.s.w ;)

    Die Schleife muss ja auf jeden Fall mindestens 1x durchlaufen werden - also kannst Du die Abfrage, ob Du schon fertig bist, auch nach unten setzen

    Du ohne Witz, daran habe ich auch schon vorhin, vor dein Post gedacht, warum ich da unnötige jumps mache und warum ich das einfach nicht mit BRNE löse. Ist ja auch so ne art jump Funktion.

    und die Register temp3 und temp2 brauchst Du ja gar nicht in der Routine

    Stimmt, ich depp!! Warum sind die überhaupt noch da ? Wird ja eh nicht benutzt! :D


    So, wenn ich das so mache wie mein Logik mir es vorschreibt waer die Finale version dann so:



    Wenns Passt, bitte Applaus!! ;)

  • *Applaus* :thumbup: ;)


    ...und Gute Nacht! :sleeping:

    It's only light - but we like it!


    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!

  • YES!!!!


    Ein ganz Herzlichen Dank für dein Geduld lieber Pesi. Ohne Deine Hilfe waer das echt nicht Realisierbar für mich.


    Noch kurz eine Frage: ;)


    Diese Bit Umwandlung ist doch wie ich verstehe nicht echtes 12bit sondern es wandelt nur die 8 bit Werte auf 12bit um aber ausgegeben werden dann doch noch 8 bit qualitaet oder? Also erst mit der mit gamma table kommen glaub ich erst die kompletten 12bit werte ins Spiel? Oder versteh ich das falsch?

  • Genau, da werden eben nur die Bits um 4 nach links geschoben, damit Du den kompletten Wertebereich ausnützt (also bei 255 eben ganz hell ist), aber die Auflösung erhöht sich natürlich nicht... es bleibt weiter bei 255 möglichen Helligkeitsstufen


    wie gesagt, das ist der Vorteil an diesem "modularen" SW-Aufbau mit Subroutinen, Du kannst dann später mal einfach die Routine "Change_8Bit_to_12Bit" durch eine ersetzen, die in ner Tabelle nachschaut, und hast dann so Deine Gamma-Korrektur drin, ohne sonst an der SW groß umbauen zu müssen...


    auch da hast Du dann nur 255 einstellbare Stufen, aber die sind eben anders verteilt, also praktisch ne Teilmenge aus den möglichen 4.096 Stufen des TLC, so dass die Helligkeitsverteilung für's Auge gleichmäßiger ist....

    It's only light - but we like it!


    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!

  • genau, das Problem sind immer die unteren Bereiche, weil es da so "abgestuft" ist - an sich reichen 255 Werte, im oberen Bereich z.B. sieht man zwischen 250 und 254 eh' keinen Unterschied mehr - das wird mit der Gamma-Tabelle eben "entzerrt", so dass der Helligkeitszuwachs immer gleich ist, es also z.B. von 5 auf 6 eben um "das selbe Stück heller wird" wie von 230 auf 231...

    It's only light - but we like it!


    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!

  • Naa, ist hier schon was weiter gegangen...? ;) - Eigentlich hast Du's ja, DMX-Empfangsroutine, Umsortierroutine, Ausgaberoutine, musst Du ja nur noch zusammensetzen...


    wenn's dann läuft, hätte ich noch ne einfache Gammakorrektur für Dich.... ;)


    übrigens, wegen den WS2811, von denen hier auch mal die Rede war: habe nun solche Pixel da, und sie laufen auf Anhieb mit der TM1804-Ausgabroutine... Timing ist zwar lt. Datenblatt etwas unterschiedlich, aber anscheinend nicht so kritisch...


    das ist wohl wirklich als Alternative zum TM1804 von nem anderen Hersteller gedacht (Chinesen kupfern ja auch untereinander gerne ab), Pinbelegung ist auch exakt die selbe...

    It's only light - but we like it!


    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!

  • Ja, geht schon, aber im Moment Sylvester-Stress!!!! ;)


    Nach Sylvester werd ich mich wieder drauf Konzentrieren. Klar, fast alles ist schon fertig. Und mit der einfachen Gamma von Dir ist es natürlich Oberklasse!!! Spart Zeit und Nerven ;)


    Das mit ws2811 und tm1804 ist echt lustig. Dann haben wir ja damit kein stress auch die ws2811 zu Steuern ;) Heisst: We are ready for the future :D


    EDIT:
    Fast vergessen: Ein guten Rutsch & FROHES NEUES JAHR!!! Hoffe Ihr feiert auch ordentlich :)

  • Hi Pesi,


    Habe mal den TLC5947 ausprobiert, irgendwie wollen die leds nicht :(


    Unten mal die configuration.inc Datei. Waere das so richtig?


  • Im Prinzip ja, wenn Du diese Konstanten, also TLC_Data usw. richtig definiert hast...


    weil wenn da irgendwo (Bei mir ist das immer in ner extra Datei "Definitions.inc") z.B. drin steht


    .equ TLC_DDR = DDRC
    .equ TLC_Data = 0


    Du aber die Datenleitung an Port A 3 hast, dann funktioniert das natürlich nicht...


    ansonsten sind da natürlich noch mehr Stellen in der SW, wo irgendwas nicht passen kann, also ggfs. dann mal den *ganzen* Code posten (am Besten als .zip-Anhang)


    wegen Deiner PN: fertiges .hex-File für Rainbow habe ich nicht - Du kannst ja einfach mal die Ausgaberoutine aufrufen, nach dem Reset ist das RAM mit zufälligen Werten gefüllt, also irgendwas müssten die LEDs dann anzeigen...

    It's only light - but we like it!


    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!