Eiwomisa 1 - v1.2 (RGBW Controller) Bausatz - aktuell mit 25% Rabatt!!!

  • Dazu ergänzend: jede Universal-Fernbedienung für ein paar Euro lässt sich auf einen RC5-Code einstellen. Am einfachsten ist es, zuerst die Philips-Gerätecodes zu probieren (ist, wenn ich nicht falsch liege, von Philips entwickelt worden). Damit hatte ich schon beim ersten einen Treffer.

  • Das Problem: Wenn ASM läuft macht der Mikrocontroller nix mehr anderes. Lösung: Ein zweiter kleiner Mikrocontroller der DMX auswertet und über einen I2C oder anderen Bus die Daten an den Mikrocontroller sendet, der für das Programm und Fading zuständig ist. Somit ist das automatische Umschalten zwischen DMX und Standardfunktion gegeben.


    Ansonsten muss man weg von Bascom und dann zu einem Mikrocontroller, welcher mehrere Prozesse parallel verarbeiten kann.

  • Das Problem: Wenn ASM läuft macht der Mikrocontroller nix mehr anderes. [...]


    Ansonsten muss man weg von Bascom und dann zu einem Mikrocontroller, welcher mehrere Prozesse parallel verarbeiten kann.


    Kann ich nicht bestätigen! Habe hier ATMegas, die wunderbar DMX empfangen (ASM-Schleife), und nebenbei jede Menge anderes Zeug machen!!


    Sollte also überhaput kein Problem sein, bzw. verstehe ich nicht welche Probleme Du siehst!


    Viele Grüße
    André

  • André, Du benutzt ja diese oben verlinkte Routine, oder?


    Ich kenne mich jetzt mit Bascom nicht so gut aus, aber kann man da nicht den asm-Teil auch in nen Interrupt packen..? - Bei mir (alles in Assembler) läuft der DMX-Empfang in ner ISR, die jedes Mal aufgerufen wird, wenn ein Byte reingekommen ist. Die Routine selbst braucht ca. 10-20 Takte (je nachdem, was sie gerade macht), ein neues Byte kommt ca. alle 710 Takte (bei 16 MHz), der Prozessor ist also zu ca. 2-3 % mit DMX-Empfang beschäftigt - keine Notwendigkeit für nen Parallelprozessor... 8o


    ich weiß natürlich nicht, wie viel Zeit das Bascom schon wieder vers****, nur um ne ISR aufzurufen...? - da macht es wohl doch mehr Sinn, einfach gelegentlich den USART abzufragen, so wie das anscheinend hier ja geschieht - wobei ich mich auch frage, was der asm-Teil da soll, der macht ja nix weiter, als die 2 Byte aus dem USART auszulesen, *das* kann doch in Bascom auch nicht soviel länger dauern*..!?!? - die eigentliche Verarbeitung (Feststellen des Startbytes, schreiben der Daten in das Array) wird hier ja dann auch wieder in Bascom gemacht...


    *oder geht das in Bascom schlicht und einfach nicht, dass man direkt auf diese Register zugreifen kann...??

    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, ich benutze erfolgreich die verlinkte Routine, befreit von der Phasenerkennungs-Sache.


    Die Empfangsroutine im verlinkten Dokument sitzt ebenfalls in der Interruproutine "Rec_isr".
    Ob die paar Befehle nicht auch in BASIC geschrieben werden können habe ich ehrlich gesagt noch nicht ausprobiert, könnte aber durchaus funktionieren??


    Meine Simulationen und Erfahrungen haben gezeigt, das Bascom beim Aufruf einer Interrupt-Poutine erstmal mindestens mal alle Register auf den (Soft?-)Stack packt, und hinterher wieder 'runter. Das kostet insgesamt ca. 110 Takte für jeden ISR-Aufruf!!!
    Ist bei ~700 Takten zwar viel, aber noch verschmerzbar, je nachdem was die CPU noch alles machen soll, und wie zeitkritisch das ist...
    Aber ein bisschen mit Zahlen jonglieren und in die Hardware-PWM-Register zu schreiben ist kein Ding, funktioniert wie gesagt bei mir wunderbar!!

  • Hi,


    also wenn das Programm läuft, dann soll es verschiedene Modi geben. Einer davon ist der DMX Modus, nur wenn dieser aktiviert ist soll die DMX-ISR aufgerufen werden, sonst nicht. Aslo wenn DMX aktiv ist dann macht der µC eigentlich nicht anderes mehr als die Werte auf die PWM zu schreiben und zu schauen ob eventuell der Modus geändert wurde.


    Gruß, Benny.

  • Huch, 110 Takte um die 33 Register zu sichern? 8o
    In C gibt es da so lustige sachen, dass man die ISR bei der Deklaration als "naked" deklariert. Dabei wird auf dem Stack nur die Rücksprungadresse gesichert und sonst nix, allerdings muss man dann mit dem Befehl

    Code
    asm("reti");


    wieder aus der ISR rauspringen, weil er sonst nichtmehr bei der Rücksprungadresse ist, soweit ich weiß. Das wäre dann natürlich deutlich zeitschonender, allerdings weiß ich mal wieder nicht wie/ob sowas in Bascom auch machbar ist.
    2bl: sind die 110 Takte eigentlich für Sichern und später Wiederherstellen gemeint oder wirklich NUR für das Sichern der Register?

  • 2bl: sind die 110 Takte eigentlich für Sichern und später Wiederherstellen gemeint oder wirklich NUR für das Sichern der Register?


    Die Zahl 110 entspringt der Bascomeigenen Simulation, und ist die Gesamtzahl. Der ISR-Aufruf benötigt 53 Takte, und der Rücksprung 57 Takte. Was genau dabei geschieht, außer das die Register gesichert werden, weis ich nicht genau..


    Die von Dir angesprochene Möglcihkeit in C existiert bedauerlicherweise scheinbar nicht in BASCOM.


    Unlängst musste ich das schmerzlich feststellen, beim Versuch eine 24-Kanal-Soft-PWM in Bascom zu schreiben.
    Dort schlägt die Timer-Routine alle 256 Takte zu, und wenn dann 42% der Rechenzeit für den Aufruf der ISR draufgehen, kann das nix mehr werden...

  • Zitat

    Die von Dir angesprochene Möglcihkeit in C existiert bedauerlicherweise scheinbar nicht in BASCOM.


    Doch, natürlich existiert sowas auch in BASCOM:


    ON Interrupt_Name Label_Name NOSAVE


    Die Interrupt-Routine sollte man dann allerdings vollständig mittels Inline-Assembler schreiben, da man dann eben sicher weiss, welche Register man in der Routine benutzt, und man kann dann eben nur gezielt diese sichern. Zumindest das Status-Register (SREG) sollte man aber immer sichern, da BASCOM mit der Option NOSAVE eben nur die Rücksprungadresse auf den Stack schmeisst.
    Ausserdem wird für ISRs auch in BASCOM generell der HW-Stack genutzt und nicht der SW-Stack. Der SW-Stack wird 'nur' bei den BASCOM-Unterprogramm-Aufrufen, wie Prozedur- und Funktionsaufrufen verwendet.


    Gruss
    Neni


    EDIT: Übrigens erstaunt es nicht, dass BASCOM beim Aufruf einer ISR ohne NOSAVE-Option für die Sicherung von 25 Registern (R6, R8, R9 und R12 bis R15 sind ausgenommen) plus SREG 110 Takte benötigt, wenn man weiss, dass beim AVR jedes PUSH und jedes POP jeweils 2 Takte kostet, und SREG muss noch in ein Register kopiert werden, bevor es auf den Stack geschoben werden kann, und umgekehrt.

  • Hab mir vor kurzem den Mini-Fader bestellt, bin aber noch nicht zum aufbauen gekommen... Lötkolben noch nicht da... ^^
    Das neue Projekt reizt mich sehr!


    Einen kleinen Wunsch hätte ich auch und zwar, dass die PWM-Frequenz etwas höher ist.
    Also so ab 500Hz wär okay, denke ich.
    Würde da auch ne größere Platine in kauf nehmen.


    Oder man plaziert die FET's am Rand der Platine und macht die Frequenz wählbar, so dass man die Kühlkörper noch "nebenan" bauen kann. :)


    Tolles Projekt! Freu mich drauf!


    Danke
    Akron

  • Hab mir vor kurzem den Mini-Fader bestellt........Einen kleinen Wunsch hätte ich auch und zwar, dass die PWM-Frequenz etwas höher ist.
    Also so ab 500Hz wär okay, denke ich.

    Hi,


    das kannst auch mit dem jetzigen Fader schon haben, einfach über die Fuses ne höhere Frequenz einstellen und dies dann im Code anpassen. Aber bedenke das die Mosfets dann wärmer werden und man das vorher testen sollte!


    Gruß, Benny.

  • Ich werf mal eine Frage ein: Wie lange habt ihr gebraucht um das Thema Mikrocontroller richtig zu begreifen ? Ich persöhnlich verstehe nur Bahnhhof aber das hat auch damit zu tun das ich mich noch nicht wirklich damit beschäftigt habe

  • Auch wenn die beiden Postings hier nichts verloren haben, da OT :rolleyes:

    Wie hoch ist die Lebenseerwartung einer LED bei PWM? die wird dabei ja quasi immer ein und aus geschaltet oder? denke mir dass die sicher nicht so alt werden wie "normal betriebene" LED's. Oder lieg ich da falsch?

    Da liegst du falsch. Der LED macht das nichts aus wenn sie ein- und ausgeschaltet wird. Ganz im Gegenteil steigt sogar die Lebenserwartung weil sie ja nicht die komplette Zeit an ist.


    Was mich an pwm stört ist das die wenn man eine LED mit pwm auf 350ma einstellt....

    Wie stellst du denn eine LED per PWM auf 350mA ein ?(
    Die LED bekommt immer den Strom, den ihr die KSQ vorgibt. Mit der PWM stellst du nur (indirekt) die Helligkeit ein. Wie die Effizienz einer LED bei PWM-Betrieb ist wurde bereits schon ausgiebig diskutiert - einfach mal die SuFu benutzen.


    Edit: Sorry, ich möchte keinen benachteiligen....Nicht nur die beiden
    letzten Postings in dem Thread haben nichts mit dem Thema zu tun :D

  • Was mich an pwm stört ist das die wenn man eine LED mit pwm auf 350ma einstellt sie ja für die halbe Dauer des Pulses 700 ma bekommt.
    Ist das nicht schlecht für den Wirkungsgrad?

    Also wie Andy schon geschrieben hat ist schon die Annahme irgendwie falsch. Selbst wenn käme es immernoch auf die LED an. Mal abgesehen von uralten 1W LEDs wie Luxeon I vertragen eigentlich alle modernen Highpower 700mA bis 1A ohne Probleme auch im Dauerbetrieb. Von daher wären 700mA also kein Problem. Die meisten die bis 1A gehen werden sogar mit 1,5A Pulsstrom vom Hersteller angegeben. Bei guter Kühlung und kurzen An-Zeiten im Vergleich zu langen Aus-Zeiten können die meisten sogar mit 2-2,5A gepulst werden. Voraussetzung ist natürlich immer die guteKühlung.