DIY-RGB-Controller mit IR-Fernbedienung und DMX - modular erweiterbar

  • Als ich im Internet über diese Software gestolpert bin, fand ich die Idee sehr interessant und gut umgesetzt und so entschied ich mich dies nach zubauen. Dies ist mein erstes Projekt mit µC und AVR-Assembler (habe schon x86-Erfahrung), ich habe probiert mir möglichst viel zu dem Thema anzulesen, aber es könnte nichtsdestotrotz seien, dass ich einige Anfängerfragen stellen muss. Ich hoffe trotzdem, dass insbesondere Pesi mit bei einigen Fragen/Probleme die sich beim Nachbauen für mich auftaten helfen könnte:
    1. In dem Quellcode gibt es die _rc5_receiver-"Funktion", diese wird aus _ISR_Timer0OVF aufgerufen, sobald das Programm aber erst einmal in der Hauptschleife angekommen ist findet allerdings kein Aufruf mehr von einer dieser beiden Funktionen statt, soweit ich das erkennen kann. Insofern frage ich mich, was ich hier übersehe, denn das Programm kann ja eigentlich auch in der Hauptschleife noch RC5 empfangen.
    2. Ich konnte den SFH5110-Empfänger nicht mehr finden und habe den im Thread zuerst erwähnten TSOP31236 (was ist der ) als Ersatz genommen. Funktioniert dieser "Out-of-the-Box" oder muss dafür die Software modifiziert werden?
    3. Wenn man kein DMX verwenden möchte, dann reicht es dies nicht zu bestücken und in der Software komplett auszukommentieren, oder macht man damit etwas anderes kaputt?
    4. In RC5_Receiver.inc wird gesagt, dass die Zeiten für 8MHz angepasst wären, es wird allerdings ein 16MHz Quartz verwendet. Wird dies auch softwareseitig gelöst oder was ist hier der Trick?
    5. Wenn man die Ausgänge beim Testen nicht bestückt sollte das auch keine Probleme verursachen, denn es sind ja nur Ausgänge, oder?


    MfG Empirelord

  • zu 1. : In der Timer-ISR wird regelmäßig die Routine aufgerufen, die den Empfänger abfragt ("RC5_Receiver.inc") und bei erkanntem RC5-Code die empfangenen Bits in zwei RAM-Zellen schreibt (rc5_device und rc5_command)


    In der Hauptschleife fragt dann die Routine "Get_RC5.inc" diese beiden Variablen ab - ist bei rc5_device das MSBit gesetzt, dann wurde ein neuer Befehl empfangen, der wird dann gespeichert (nur wenn das Device stimmt) und ein Flag gesetzt für "Befehl empfangen" sowie, ob sich das Toggle Bit geändert hat oder nicht...


    in "Key_Command.inc" wird dann der Befehl ausgewertet (wenn einer empfangen wurde), also je nach Tastendruck heller oder dunkler oder anderes Programm, oder wasauchimmer...


    ich wollte mal ne komplette Beschreibung rein machen, wie das da alles zusammen spielt, kommt bei Gelegenheit noch - hatte bisher noch so keine rechte Veranlassung, weil die meisten das einfach nachbauen, wie es ist, leider die wenigsten an der SW "rumschnitzen" wollen... und zum reinen Nachbauen muss man ja nur das .hex drauf klatschen, dazu muss man ja nicht kapieren, wie die SW arbeitet... ;)


    willst Du denn was ändern an der SW (frage rein aus Neugier)...? - würde mich schon freuen, wenn da mal jemand "mitmacht", so war das eigentlich gedacht...


    zu 4. : Das ist schlicht und einfach ein Fehler, manchmal vergesse ich halt auch hier und da, nen Kommentar anzupassen bei ner Änderung...

    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!

  • Vielen Dank erstmal für die Erklärung.
    Ich werde wahrscheinlich keinen "neuen" Code einbringen, aber dank des modularen Aufbaus ist es ja sehr einfach ihn auf die eigenen Bedürfnisse anzupassen, sprich in meinem Fall kein DMX, mit Display ,Fernbedienungstasten und möglichst viele Programme.
    Wenn ich allerdings mein Projekt einigermaßen fertiggestellt habe werde ich natürlich die Daten dafür veröffentlichen.
    Im Moment habe ich bloß den IR-Empfang noch nicht zum Laufen gekriegt, Display geht allerdings bereits. Was macht man also -> Debugging mit "Kommandozeilenausgabe". Keine Angst, wenn ich da nicht weiterkomme frage ich hier wieder.

  • Der IR-Empfang funktioniert bei mir leider immer noch nicht, deshalb wende ich mich einfach nochmal an die Großmeister:
    Meine Softwaredebugging-Versuche haben ergeben, dass der Controller die ganze Zeit nach einem Timeout-Fehler in _rc5_overrun landet. Ich habe (2x) die Pinbelegung des IR-Empfängers getestet und die Flags sind eigentlich auch richtig aufvlfuse:0xff hfuse:0xdf efuse:0xff gesetzt.
    Mir gehen langsam die Ideen aus, was ich noch machen könnte. Eine Beobachtung war, dass der IR-Empfänger die ganze Zeit 5 V liefert und bei Signalen 0V, ist hier eventuell ein Unterschied zum Original-Controller?
    Oder müssen vielleicht Änderungen an den Timings vorgenommen werden?
    Wie gesagt, jegliche Hilfe wird gerne in Empfang genommen.

  • Nur aus Neugier:

    Meine Softwaredebugging-Versuche haben ergeben, dass der Controller die ganze Zeit nach einem Timeout-Fehler in _rc5_overrun landet.

    wie stellst Du das fest..? - hast Du da ne Zeile eingebaut, die Dir ne LED anmacht oder was über den USART schickt o.ä., oder hast Du so nen Debugger (JTAGICE o.ä.), wo Du "live" nachschauen kannst, was der µC macht...?


    frage nur deswegen, weil ich sowas hier&da auch mal brauchen könnte also "im Betrieb" nachgucken, was in welchen Registern steht etc.


    was anderes: Hast Du mal einfach die fertige "Standard-SW" von hier probiert, also direkt das .hex und .eep drauf flashen, *ohne* noch irgendwas an der SW zu ändern...?


    weil die *muss* funktionieren - reagiert die bei Dir auch nicht auf die FB (zumindest die Nummern-Tasten und Vol+ sowie Vol- sollten eigentlich bei allen Herstellern gleich sein), dann muss anderswo was faul sein, also an der HW, oder falsche Fuses (evtl. nur eingestellt, aber nicht programmiert..?), o.ä. - hast Du mal auf den Quarz geguckt, evtl. nen falschen erwischt...?


    klingt vielleicht blöd, aber oft sind's so banale Fehler - ist mir auch schon passiert, Quarz aus dem Sortimentskasten genommen aus dem Fach "16 MHz" und eingelötet, Gerät funktioniert um's verrecken nicht - bis ich mal drauf gekommen bin, die Bauteile noch mal *ganz* genau anzusehen und festgestellt habe, dass da ein 12 MHz Quarz in's 16 MHz-Fach gerutscht war... :D


    auch mal die FB checken, sendet die wirklich RC5, oder nicht doch was anderes (NEC, RC7, ...)...?


    wenn die fertig assemblierte Standard-SW läuft, dann muss wohl beim "Ausmisten" der Module irgendwas schief gelaufen sein...

    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!

  • Ich habe für meine Software-Debugging-Versuche einfach ganz banal deine LCD_Number Routine aufgerufen mit entsprechend eindeutigen Nummern, also an den entsprechenden Stellen im Programm halt die dafür nötigen 3 Zeilen eingefügt.
    Die bereits fertig mitgelieferte Software funktioniert bei mir wenn ich sie einfach nur flashe auch nicht mir IR-Empfang, es wird allerdings GROESSENWAAHN angezeigt. (Das legt ja schon nahe, dass nicht direkt ein Software-Fehler ist)
    Aber vielen Dank erst einmal für die Tipps, ich werde morgen dann noch einmal die Banalitäteten durchtesten und melde mich dann wieder.

  • Die bereits fertig mitgelieferte Software funktioniert bei mir wenn ich sie einfach nur flashe auch nicht mir IR-Empfang, es wird allerdings GROESSENWAAHN angezeigt. (Das legt ja schon nahe, dass nicht direkt ein Software-Fehler ist)

    ich meinte eigentlich die "Standard-SW" wie verlinkt, da ist gar kein Display drin...


    aber OK, auch die mit Display sollte laufen - nachdem sie das auch nicht tut, muss echt irgendwas an der HW oder Fernbedienung faul sein...


    ja, mal das übliche Programm - schlechte Lötstellen, Kurzschlüsse, Quarz, Fuses, den µC mal tauschen (evtl. ist der irgendwie defekt), passt die Versorgung, IR-Empfänger richtig angeschlossen, usw.

    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!

  • oder hast Du so nen Debugger (JTAGICE o.ä.), wo Du "live" nachschauen kannst, was der µC macht...?


    frage nur deswegen, weil ich sowas hier&da auch mal brauchen könnte also "im Betrieb" nachgucken, was in welchen Registern steht etc.

    Wenn du einen Hardware-Debuggr für AVRs suchst ist der AVR-Dragon die günstigste (ca. 50,-EUR) Lösung. Arbeitet natürlich mit den Werkzeugen von Atmel zusammen. Oder alternativ mittels avarice und avr-gdb. Netter Nebeneffekt: Der AVR-Dragon beherrscht alle verschiedenen Programmierverfahren für AVRs. Allerdings: Die kleinen AVRs können maxinal debugWire. debugWire kann nicht viel und das auch nur langsam. Um den Controller mal anzuhalten und in den Registern rum zu schnüffeln reicht es. Nur die größeren ATmegas kann man mit JTAG bespaßen und nur dort gibt es z.B. echte Hardwarebreakpoints.

  • ich hab' den JTAGICE3 da, den hat turi mir geliehen, um mit dem XMega rumzuprobieren (der ja auf den nächsten SEDU drauf soll...)


    hatte nur deswegen gefragt, weil ich das (debuggen damit) noch nicht ausprobiert habe, also wie man da nun genau vorgeht um dies&das rauszufinden - da wäre es halt interessant gewesen, sich mit jemandem auszutauschen, der so ein Teil schon öfter einsetzt (so hatte sich das angehört)...


    i.M. mach' ich das noch genauso wie empirelord hier und wohl die meisten, also als "Debug-Zusatz" halt an bestimmten Stellen in der SW ne LED einzuschalten (z.B. um zu sehen, ob er überhaupt da hin springt, oder wann/warum), oder irgendwas über den UART oder auf ein LCD ausgeben, oder z.B. ne 8-Bit-Zahl an nen freien Port (wo sie dann mit 8 LEDs angezeigt wird) etc.


    das hilft oft sehr weiter, aber ab&zu wäre es doch auch ganz cool, wenn man gleich in mehreren Registern und RAM nachgucken könnte, was da so drin steht, etc. ;)


    Vom Dragon habe ich schon viel schlechtes gelesen, also dass der recht empfindlich sein und schnell kaputt gehen soll, aber auch k.A., inwieweit das stimmt...?

    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!

  • AFAIK kann der Dragon auch XMegas...


    Öfter habe ich das Ding noch nicht eingesetzt. Zum Programieren nehm ich lieber den USBasp, da der bei ISP ca. zwei mal so schnell ist wie der Dragon. Über JTAG ist der Dragon aber deutlich flotter als über ISP. Zum Debuggen ist mir die Methode mit instrumentiertem Code (Debugausgabe auf serielle Schnitte oder LCD) auch lieber. Genau dafür hatte ich mir den Dragen eigentlich sogar gekauft. In den Datenblättern ist inner von einem obskuren Debug Wire Data Register die Rede und dass das Programm auf dem Controler darüber mit dem Hardwaredebugger kommunizieren könne. Das hätte Debugkommunikation auf dem sonst "ungenutzten" Resetpin ermöglicht. Erst später wurde mir klar, dass die meisten AVRs das Register garnicht implementieren.


    Man kann mit dem Debugger durchaus das gleiche erreichen wie mit instrumentiertem Code. Man muss dann halt nicht den Code instrumentieren, sondern den Debugger mittels entsprechender Scripte. Je nach dem ist die Methode aber unbauchbar, besonders bei debugWire. Wenn man mit vielen Breakpoints arbeitet muss bei debugWire für jedes überspringen eines Breakpoints das Flash neu programmiert werden, da debugWire nur Softwarebreakpoints kennt. Das ist sehr langsam, ca. eine Sekunde pro Breakpoint. Bei vielen Breakpoints in Folge zu langsam. Mal einen Breakpoint setzen oder mal mitten drin anhalten und Register oder Speicher auslesen funktioniert gut.


    Wie so oft: Ein Hardwaredebugger ist ein Werkzeug. Man muss wissen was es kann und wann und wie es zu benutzen ist.


    Ja man hört oft von defekten Dragons. Das ist aber teils auch unsachgemäßem Gebrauch geschuldet. Auf der anderen Seite kann man sich für den Preis eines JTAGICE einen ganzen Stapel Dragons kaufen. Wenn man einiges beachtet hat man lange Freude am Dragon:
    - Die Zielschaltung nicht aus dem Dragon mit Strom versorgen, da der Schaltregler auf dem Dragon nicht "idiotensicher" ist.
    - Wenn man es doch tut den Dragon aus einem USB-Hub mit eigenem Netzteil speisen.
    - Den Dragon nicht auf dem leitfähigen Moosgummi der Verpackungsschachtel betreiben. Das führt zu "Kurzschlüssen".
    - Die Eingangs-/Ausgangspegelwander der Programmierpins sind wohl nicht ganz so robust wie bei den anderen Programmiergeräten. Wobei ich da noch keine Probleme hatte. Dem kann man vorbeugen in dem man extern nochmal einen Bustreiber als Puffer vorschaltet. Da gibts etliche fertige Schaltungen im Netz.


    Ich gebe daher Anfängern, die ihr erstes Programmiergerät kaufen wollen, den Rat: Zuerst mal einen USBasp beschaffen. Gibts in der Bucht unter 10,-EUR. Braucht man mehr als der USBasp kann, dann einen Dragon.

  • Hallo alle zusammen.


    Ich habe hier sozusagen auf Pesis Wunsch , ein Layout für Controller gemacht und überwiegend in SMD.
    Naja, aber statt eine Stiftleiste ein zu plane, ist das irgendwie ausgeufert.. :P


    Auch wenn einige THT Bauteile eingezeichnet sind, so heißt das aber nicht, das die bestückt werden müssen, wie der Quarz, FETs in TO220 und speziell in der Mitte die eingeplanten Stiftleisten fpr den Encoder!
    Diesen kann man entweder direkt mit Käbelchen an der Platine anlöten oder wie gesagt mit Stiftleisten.



    Zu den THT Wechselbauteilen:


    Entweder wird statt des THT ein SMD Bauteil verlötet, oder andersrum!
    Bis auf den Wannsenstecker, kann alles in SMD verlötet werden, sofern man sich dazu entschließt, alle Kabel direkt an die Platine zu löten!


    Es kann aber nicht der FET im TO220 und im D-PAK gleichzeitig verbaut werden!
    Ebenso den Quarz!



    Besonderheiten:


    Erst mal ist die Platine bis jetzt nur virtuell geplant und noch von niemanden aufgebaut worden.
    Zweitens ist die KSQ Funktion nicht mit auf der Platine, wer die aber einfügen mag, schreibt mir bitte eine PN, dann kann ich das SprintLayout6 File verschicken!


    Der ISP Anschluss ist das sonderbarste, was die Platine her gibt!
    Statt einen WSL 6 Wannenstecker, findet man hier die 6 Anschlüsse über der Platine verteilt.
    Überwiegend sind die makierten Datenleitungen in der WSL 14 Wannenstecker zu entnehmen, bis auf den Reset, der muss neben dem 10K Widerstand an dem Lötpad entnommen werden!
    Siehe dazu die weißen Vierecke auf der Unterseite des Layouts.


    Bis auf Reset, welches man anlöten sollte, kann man die Datenleitungen auf Stiftbuchsen setzen und diese an entsprechender Stelle auf den Wannenstecker anstecken!


    Zusätzlich habe ich eine Verpolschutzdiode vor dem Spannungsregler der ICs verbaut, um diese zu schützen.
    Die Spannung die aber bei "CA" abgegriffen werden kann, ist nicht durch diese Diode geschützt!



    Leider konnte ich nicht die schöne Reihenfolge RGB beibehalten, an den Eingängen, sonder musste es auf; GRB ändern!!


    Technische Daten:


    Jede der 3 Eingänge, kann mit max. 24V/1,5A belastet werden, zusammen also eine Leistung von 4,5A!
    Kühlung der FETs kann vernachlässigt werden.


    Die einzelne Platine ist 50mm Breit und 65mm Lang!


    3,5mm Bohrungen, sind in jeder Ecke vorgesehen.


    Abstand der Löcher längs zueinander sind 41mm und hoch 55,5mm.



    Anbei wie immer ein PDF in 2400dpi mit 4 Platinen darauf für eine € Karte.



    Mit Grüßen


    Denis


    PS:
    Wer Fehler oder Verbesserungen findet, behält Sie hoffentlich nicht! :thumbup:

  • Ich habe hier sozusagen auf Pesis Wunsch , ein Layout für Controller gemacht und überwiegend in SMD.
    Naja, aber statt eine Stiftleiste ein zu plane, ist das irgendwie ausgeufert.. :P

    Vielen Dank! - ja, eigentlich war das so gedacht, dass Du bei dem Layput im anderen Thread nur noch nen Anschluß für nen IR-Empfänger hin machst, das hätte schon gereicht... ;)


    dass man praktisch den DMX-Receiver wie üblich hat, also Adresse per DIP einstellen, und dann halt noch zusätzlich Standalone-Programme per FB abrufen... ein Layout mit Display-Anschluß etc. ist ja hier im Thread schon drin... ;)


    speziell in der Mitte die eingeplanten Stiftleisten fpr den Encoder!
    Diesen kann man entweder direkt mit Käbelchen an der Platine anlöten oder wie gesagt mit Stiftleisten.

    Da fehlt noch GND für den Encoder, aber da kann man ja auch einfach noch ein Loch irgendwo in die Massefläche bohren.. ;)


    Leider konnte ich nicht die schöne Reihenfolge RGB beibehalten, an den Eingängen, sonder musste es auf; GRB ändern!!

    Das ist kein Problem, die Reihenfolge der Farben lässt sich ja jederzeit in der SW anpassen...

    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, jetzt aber.


    Habe für den Encoder noch GND eingefügt.


    Der andere Controller hat jetzt auch seine Stiftleiste mit Hühnerfutter dran für IR Empfang.



    Und ich glaube nicht das es schwer fallenw ird, die Kabel in einer anderen reihenfolge an zu schließen, dafür würde ich zumindest die Software jetzt nicht ändern wollen :whistling:


    Gruß


    Denis

  • Nochmals Hallo alle zusammen.


    Ich habe zu dem oben gezeigtem Layout ohne KSQ, jetzt hier noch die Version mit KSQ, welche aber jetzt vom Umfang her größer ist.


    Es ist also jedem frei zu entscheiden, ob man jetzt eine KSQ mit "OnBoard" haben möchte, oder nicht, danach sollte man das Layout wählen!


    Aber auch diese Platine kann durch weg lassen des Transistors und setzen der Brücke J (3x), zu einem normalen RGB Controller umfunktioniert werden.




    Ein Hinweis zu den Widerstand, welcher den Strom für die KSQ Funktion einstellt.


    Es kann;

    • Eein 2W THT Widerstand oä. eingebaut werden
    • Einen 1W MELF Widerstand in SMD
    • Einen 0,25W 1206 oder 0,5W 1210 Wiederstand in SMD

    Zudem kann der FET stehend oder liegend eingebaut werden!


    Platinenbemaßung:
    54mm x 76mm
    2 Platinen sind auf einem Layout mit der gesamt Maße 77mm x 110mm


    LAY6 Datei auf Anfrage.



    So, das war es an dieser Stelle nun endgültig von mir in Sachen Layouts!


    PDF Anbei (2400dpi / Anzeige im Reader kann vom Ausdruck wesentlich abweichen, nicht verwirren lassen!)


    Gruß Denis


    EDIT:


    Ich aktualisiere wenn nötig die Layouts, derzeit aktuelle Version 1.4.
    Zudem gibt es jetzt auch Standard von mir, eine gesamt Lötstoppp Vorlage samt Bohrplan als PDF!

  • Hallo, ich bin's nochmal. Nachdem es ja hier wieder still geworden ist, ein paar gute Nachrichten von meiner Seite:
    Ich habe den Fehler in meiner Schaltung gefunden! Es war ganz trivial einfach nur, dass ich keine RC5-Fernbedienung hatte. Ich habe jetzt mit einem 2.ten attiny2313 eine RC5-Fernbedienung gebastelt und es geht. In den nächsten Wochen werde ich also mein LED-Projekt dann doch wieder weitertreiben und alles interessante posten.


    Vielen Dank für die Unteerstützung hier übrigens, ohne euch hätte ich das nie so lange durchgezogen.


    MfG Empirelord

  • Es war ganz trivial einfach nur, dass ich keine RC5-Fernbedienung hatte.

    Naja, diese Vermutung gab es doch schon mal im Dezember ...


    auch mal die FB checken, sendet die wirklich RC5, oder nicht doch was anderes (NEC, RC7, ...)...?

    eine Fernbedienung benutzen, die RC5-Codes sendet ...


    Vielleicht könntest Du die Schaltung + Firmware für die Eigenbau-Fernbedienung auch hier vorstellen?