3x3 RGB DMX Matrix (Softwareupdate: 12bit BCM - Seite 3)

  • Ja, das würde ich dir auch empfehlen. Es ist eben so, dass wenn man die gleichen Bausteine als TTL- oder LS-TTL-Versionen nimmt, eben keine Pull-Ups erforderlich sind, weil sich die offenen Eingänge meist von selbst auf HIGH-Pegel stellen. Bei praktisch allen CMOS-Baureihen ist das aber nicht so, diese brauchen bei offenem Eingang zwingend einen Pullup oder Pulldown, um einen definierten Pegel zu haben, ausser natürlich es ist ein spezieller Baustein mit explizit integrierten Pullups (wie ein paar Tasten-Entprell-und-Encoder-Bausteine aus der 74er-Reihe). Wenn man eben CMOS-Bausteine einsetzt und dabei Schaltungen mit den TTL-Pendants im Hinterkopf hat, passieren solche Fehler gern mal.


    Gruss
    Neni

  • Danke für die Tipps. Ich hab nun ein 100k Wiederstands Netzwerk eingebaut. Nun ist mir nur noch die schräge Brücke ein Dorn im Auge, aber das ist Kosmetik. Ich werde dann noch mal einen neuen Prototypen aufbauen, das Hühnerfutter kostet ja Mix, die LEDs werde ich wohl runter löten, die Studenten müssen sparen :/


    Gruß
    Gyver


    Edit: Die Brücke ist nun auch gerade ^^

  • Ja, das hatten wir auch schon, der Gyver und ich per PN, ich habe ihm gestanden dass ich selbst zuletzt immer 74LS165 benutzt und daher bei der Diskussion im Thread über die Schaltung nicht an die Pullups gedacht hatte - hatte ihm dann ja auch empfohlen, es mal mit Pullups zu probieren, aber nix mehr dazu gehört.... ;)


    Was halt nach wie vor seltsam ist, dass der Schieberegister-Takt den DMX-Empfang stört - werde es hier mal mit wesentlich weniger als 100 kHz probieren, dazu muss ich aber die SR-Abfrage-Routine irgendwie umbauen, dass sie auch im Timer-ISR mitläuft, sonst hängt der zu lange beim SR abfragen fest... evtl. geht's aber nun mit dem neuen Layout ja doch so wie es 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!

  • Also beim ersten (nicht mehr aktuellen) Layout fällt mir eher auf, dass die Leitung vom RS485-Transceiver zum AVR schon arg nahe an einem Pad vom Quarz vorbeischrammt und dann auch noch ne ganze Weile sehr nahe parallel zu der einen Quarzleitung verläuft, was ich mir dann eher als starke Störquelle vorstellen könnte. Warum das einen Zusammenhang mit dem Clock für das SR haben sollte, wüsste ich jetzt so auf Anhieb aber auch nicht, vielleicht bei einer schon gestörten Leitung der Tropfen, der das Fass zum Überlaufen bringt.
    Beim neuen Layout ist das schon etwas besser, zumindest ist der Abstand zum Quarz-Pad grösser, und es ist noch eine Massefläche dazwischen. Die Leitung verläuft dann zwar weiterhin parallel zur Quarz-Leitung, aber auch hier ist wohl der Abstand etwas vergrössert worden. Ich würde mir da aber doch noch einen klein wenig grösseren Abstand wünschen, so dass man vieleicht auch noch ne dünne Masseleitung (direkt als Verlängerung der Massefläche beim Pad) zwischen Quarz- und RX-Leitung bis möglichst nahe beim AVR führen könnte.


    Gruss
    Neni

  • So, nach nun fast einem Jahr hab ich das ding noch mal ausgebuddelt, entstaubt und mich noch mal dran gesetzt :thumbup:


    Der aktuelle Prototyp funktioniert. So wie es aussieht lag es dann doch an den Pull-Ups am Schiebregister. Ich habe aber noch mal das Design des Boards etwas aufgeräumt und versucht etwas zu optimieren.


    Die Platine ist immer noch einseitig geroutet. Sollte für den Hobby-Bastler einfacher sein zu Hause zu fertigen. Größtenteils in SMD, Wiederstände und Kondensatoren nicht kleiner als 1260.


    Die DMX-Adresse wird nur bei Power-Up aus dem Schiebregister gelesen. Liegt kein DMX-Signal an wird ein Standartfarbe auf dem Panel angezeigt (im Moment warm-weiß). Die Farbe kann im Code einfach eingestellt werden. Kann jeder also nach seinen Wünschen anpassen.


    Angehänt habe ich jetzt erstmal das Layout vom Board und vom Schaltplan. Außerdem die aktuelle Software. Eine kleine "Einkaufsliste" und das Layout im pdf-Format kommt dann noch nach, das is noch nicht so weit ;)


    Ein ganz großer Dank geht noch mal an Pesi, er hat für mich die Software entwickelt!


    Gruß
    Gyver


    Edit: Falsche Werte im Schaltplan korrigiert.

  • Schöne Platine! :thumbup:


    Im Prinzip könnte man sie noch weiter optimieren und einen ULN2004 samt C loswerden, denn es sind bei den 4 Exemplaren, die jeweils zwei RGB-LEDs treiben, ja insgesamt 4 Kanäle frei.
    Würde reichen für die neunte RGB-LED und eine Einzel-LED zur Signalisierung des Betriebszustandes etc.


    Ich vermute, Du hast auf diese weitere Optimierung verzichtet, weil trotz des gewonnenen Platzes durch den entfallenden Chip das Routing sonst wesentlich aufwendiger ausgefallen wäre?!


    Bin gespannt darauf, wie es weiter geht. ^^


    Schöne Grüße
    96fps

  • Ja, genau, absolut richtig vermutet. Der 5. ULN ist aus gründen des einfacheren Routings auf der Platine. Die Dinger kosten ja auch quasi nix ;)


    Ich werde wohl insgesamt 18 von den Modulen zu ner 9x18 Matrix zusammensetzten. Dafür werde ich dann wohl Platinen fertigen lassen. Ob sich dafür dann ein 2-seitiges Layout mache muss ich schauen. In dem Fall würde alles, bis auf die LEDs auf dir Rückseite wandern. Dann müsste auch genug Platz sein um das ganze Dingen mit nur 4 ULNs zu routen. Für ne zusätzliche Status-LED reichts dann trotzdem nicht mehr. Der Mega is schon voll :thumbup:


    Ob sich der ganze Aufwand aber für mich lohnt muss sich erst noch zeigen ;)



    McGyver
    ... entweder habe ich irgenwas verpasst oder die Widerständer R1...R27 sind um den Faktor 1000 zu groß ?( - oder sind das LED mit Strömen um 20µA ?


    vg espri128


    Ja, da hasst du recht. Ist mir aber auch erst beim bestücken aufgefallen. Da hat sich bei den LED-Wiederständen ein kleines "k" eingeschlichen :S Ich war noch nicht wieder an dem Rechner mit den Plänen. Werde das aber korrigieren, wenn ich die Teileliste und das Bord-Layout zum nachätzen einstelle.

  • Sop, hab oben noch mal die Werte der Schaltpläne korrigiert und ein kleines Archiv mit allen relevanten Projektdaten zusammengefasst. Damit sollte jeder einfach nachbasteln können :thumbup:


    Ich mach mich jetzt mal ran und ätze noch mal 3 Platinen. Schauen wa mal :)


    Gruß
    Gyver

  • Ich hol den guten Fred noch mal nach oben :thumbup:


    Es gibt n großes Software Update! Ich habe mich hingesetzt und mir eine 12 Bit BCM gebastelt. Die Matrix wurde mir im unteren Bereich einfach zu schnell zu hell. Ne gamma-Korrektur auf 8 Bit Basis war dann untenherum viel zu grob .... also musste was feineres her!


    Es laufen (nun endlich :whistling: ) alle LEDs intern mit 12 Bit Auflösung. Der 8 Bit DMX Wert wird gamma-korrigiert und in 12 Bit überführt (per Tabelle. Gamma = 1,85)


    Gearbeitet wird wie vorher mit ca. 244 Hz zeitlicher Auflösung. Der kleinste BCM-Schritt ist 16 Takte lang (da geht noch was, aber das wird mir dann zu frickelig :P :wacko: ). Ich verwende Timer1 des Mega32 im CTC-Mode. Setzte also den Zielwert in jedem BCM-Takt neu.


    Nebenbei hab ich die Software - mehr wegen der Verfügbarkeit - auf n Mega32 umgemodelt. Läuft aber mit ner kleinen Anpassung der Interrupttabelle auch ohne murren auf nem Mega16.


    Was jetzt wohl noch zum vollkommenem Glück fehlt ist eine RGB-HSV-RGB Umwandlung um die Gamma-Korrektur nur auf den Helligkeit-Wert anzuwenden. Man kann zwar eine kleine Farbverschiebung beobachten, jedoch ist die in meinen Augen recht gering. Darum habe ich den Mehraufwand gescheut. Wenn wer was in ASM fertig hat, her damit :P


    Ein paar Anmerkungen zur BCM:
    Der 4. bis 11. Schritt laufen 2 takte zu spät an, der 12. 4 Takte zu spät. Das sind im schlimmsten Fall 1,6% und nimmt dann drastisch ab. Daher habe ich mir eine Feinanpassung des Compare-Match-Zielwertes gespart. Kommt vielleicht noch mal bei nem Anflug von Langeweile ^^


    Im letzten Schritt werden die Werte für den 1. Schritt vor der Neuberechnung der Daten vorgeladen. Bedeutet: Kommt ein neuer DMX wert und es werden daraus die BCM-Daten errechnet, liegen im 1. Schritt der nächsten BCM-Runde noch die alten Daten an.
    Auch das vernachlässige ich. Die BCM-Daten werden außerhalb des BCM-Interrupts berechnet. Ich will nicht, dass der Mega zu lange im Interrupt hängt (wären dann im letzten schritt über 2000 Takte) und den DMX-Empfang verpasst. Wichtig is mir aber, das der wert für den 1. BCM-Schritt im letzten BCM-Schritt vorgeladen wird. Somit liegt zumindest ein fast korrekter Wert an. Und es geht hier nur wirklich um Kleinvieh. Die Rundungsfehler in der Look-up Tabelle sollten mehr ins Gewicht fallen :|
    Es tut also erstmal, was es soll. Wem die Fehler beim ansehen der Matrix auffallen bekommt n Bonbon von mir ^^ Ich kann hier nix erkennen. Vielleicht mertze ich aber auch das noch aus, wenn mal wieder Zeit über is. :led:


    Weil genug Speicher in den Megas vorhanden ist war ich bei der Umrechnung von DMX zu BCM Werten etwas verschwenderisch. So ist der code aber schneller als mit unzähligen Sprüngen und Zählern. Das war dann erstmal wichtiger.


    Es sind also doch noch ein paar Baustellen im Code. Verbesserungsvorschläge oder andere Tipps sind immer sehr willkommen :thumbup:



    Vielleicht komm ich auch dazu von meinen bisherigen 4 Matrizen mal n Video zu machen. Bis jetzt sieht das schon ganz ordentlich aus. Da freu ich mich glatt auf den nächsten Satz.


    Im Angang findet ihr jetzt erstmal die neue Software. Ich bin gespannt auf Feedback und Meinungen!


    Gruß
    Gyver

  • Schön, dass das mal jemand fertig gemacht hat! :thumbup: - meine 12-Bit-BCM liegt ja immer noch nicht ganz ausgereift rum... 8| :wacko:


    Gute Idee, das Umsortieren ausserhalb der ISR zu machen, und das mit nem Flag zu synchronisieren...


    Das Umsortieren selbst (das ist ja nix anderes, als Positionen der Bits zu tauschen) könnte man natürlich eleganter in ner Schleife machen - aber wenn's so auch geht... da hast Du dann zumindest auch die Möglichkeit, durcheinander angeschlossene LEDs zu patchen...


    Wegen der Lookup-Table: Du kannst auch mit ".dw" gleich 16-Bit-Werte in die Tabelle speichern, dann sparst Du Dir, 2x den Pointer zu laden (rausholen kannst Du sie ja trotzdem als Bytes, ist dann nur anders sortiert) - nur so als Hinweis für ähnliche Sachen in Zukunft... ;)


    ich bin mir auch sicher, dass man die 2 bzw. 4 Takte nicht sieht - da wird's sowieso ab&zu größere Abweichungen geben - wenn der µC grad' in der Routine für den DMX-Empfang steckt und genau da der Compare Match auftritt, dann wird die BCM-Routine ja auch ggfs. deutlich stärker verzögert ausgeführt als nur 2 - 4 Takte, und das sieht man hier ja anscheinend auch nicht...


    das Problem hat man da aber immer, auch bei normaler SW-PWM... zum Glück dauert die DMX-ISR ja nicht so lange, da fällt das prozentual nicht so in's Gewicht gegenüber nem längeren BCM-Segment

    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 msteciva,


    ok, if your German is bad, let us try it in Englisch ;)

    Zitat

    Bedeutet dies Dimmer adressiert werden können?

    Yes, you are able to address every panel via the dip switches. You have to enter the binary code of your desired address.

    Zitat

    Menü sollte aus den 258 Kanälen arbeiten.

    Hmm, I hope i got that one right: you want to have up to 258 channels? As the panels are working with standard DMX512, you can address them up to 512, so 258 is possible. While i have 9 RGB-Pixels in every module (alias 27 DMX channels) you can use up to 18 modules in one DMX universe.

    Zitat

    Wie richte ich programator.Neznam ob dies eine gute Einstellung ist.

    You should know, how to flash your atmel right. There are plenty of tutorials for that. The settings in the screen shot you have posted are - as far as I can see - wrong. You have do disable JTAG. And CKSELx has to be set to "external crystal" (all unselected).

    Zitat

    Sorry, Deutsch zu sprechen schlecht.
    Vielen Dank im Voraus für Ihre Antwort.

    No Problem, you´re welcome :)


    Greetings Gyver

  • Hi, I think, I am still not getting, what you are planing :D Could you please tell us a bit about your project? Are you going to use the software for your own dimmer?


    The software is working on 12bit with 244Hz. That means, that the shortest interval is about 16 micro seconds length. Switching 1A that fast seams to be hard (for me acutally). But there might be some experts for that around here.


    So: tell us more, seams interesting :)


    Regards
    Gvyer