Treppenhaus Beleuchtung zeitversetzt?

  • Deine AVRs sind übrigens heute Nachmittag zur Post gekommen. Sollten wohl morgen ankommen.

    Kann es kaum erwarten die Dinger einzusetzen. Hoffe nur das jetzt nicht noch was schief geht beim verkabeln mit den Lichtschranken. :) Wenn alles glatt geht versuche ich ein Video zu machen, damit der Erfolg gekrönt wird. :D Mit was machst Du eigentlich deine Videos? Ich will die AVI-Funktion von meiner Kompakt-Digitalkamera nutzen.

  • Heute morgen sind meine geflashten AVRs gekommen. Danke Dir Dominique. :thumbup:


    Habe aber erst jetzt Zeit gefunden die Dinger auszuprobieren. Hab erst mal LEDs direkt an die Platine gesteckt um die Anzahl der Kanäle auf mich abzustimmen. Ich wollte auf 12 oder 13 Kanäle reduzieren aber es klappt nicht obwohl ich genau nach der binären Tabelle von Dir vorgegangen bin. Es leuchten immer alle 24 LEDs. Kannst du mit deiner Platine mal checken ob sich bei Dir die Kanäle reduzieren lassen? Ich hab auch andere Kanalanzahlen probiert aber es tut sich nichts.

  • Hallo Uwe,


    freut mich, dass die Platinen da sind. Wohl schon Weihnachtsstress bei der Post, dass sie nicht gestern schon da waren.

    Kannst du mit deiner Platine mal checken ob sich bei Dir die Kanäle reduzieren lassen?

    Habe ich soeben ausprobiert und klappt Problemlos. Jumper wie folgt gesetzt: offen, offen, geschlosse, geschlossen, offen (von oben nach unten). Ergebnis: 12 LEDs leuchten.
    Bedenke, dass die Konfiguration nur eingelesen wird, wenn die Spannung angelegt wird.


    Was ich allerdings auch reproduzieren kann ist, dass die Einstellungen nicht korrekt eingelesen werden, wenn die Spannug noch nicht stabil ist. Wenn ich das Netzteil einstecke mit abgeschlossener Platine, werden die Jumpersettings falsch interpretiert, schließe ich die Platine ans eingesteckte Netzteil an, klappts. Merkwürdig, evtl muss ich da das Einlesen der Settings doch anders legen.


    Als Workaround könntest du zum Testen den µC mal resetten, wenn er einige Sekunden bereits mit Spannug versorgt wird. Dazu Pin 9 kurz mit GND "antippen". Aber nicht abrutschen, direkt darunter (Pin 10) liegt Vcc, was also ein Kurzschluß wäre. Wenn dir das an der Stelle zu eng und zu heikel ist, kannst du auch von dem Widerstand über dem Quarz (das ist der 10k Pullup für Reset) das rechte Beinchen antippen.


    Ist natürlich unschön, dass das nicht zuverlässig erkannt wird beim Startup. Denn so wäre evtl nach einem Stromausfall oder ähnlichem die Einstellung falsch erkennt und du kannst ja schlecht dann jedes mal den AVR resetten. Evtl. müssten die AVRs dann nochmal zu mir, oder du baust dir aus einer Hand voll Bauteile einen seriellen Programmieradapter.

  • Ist natürlich unschön, dass das nicht zuverlässig erkannt wird beim Startup. Denn so wäre evtl nach einem Stromausfall oder ähnlichem die Einstellung falsch erkennt

    Es ist genau wie Du gesagt hast. Nachdem Jumper setzen und Spannung anlegen wird erst nach dem resetten des Prozessors die Anzahl der LEDs richtig erkannt. Kann man das programmtechnisch ändern?

  • So, ich habe das Auslesen der Jumpersettings in die Mainloop verlagert, so dass jedes mal, wenn einer der beiden Eingänge getriggert wird, die Jumper neu gelesen werden. Das erlaubt auch, dass die Einstellungen geändert werden können, ohne dass die Platine danach von der Versorgung getrennt werden oder der AVR resettet werden muss.


    Nun muss die neue Version nur noch auf deine AVRs.


    Das gibt allerdings auch die Möglichkeit noch andere Dinge zu verändern. Passt dir zB die Fade-Zeit soweit? Finde die immer noch relativ langsam...

  • Das gibt allerdings auch die Möglichkeit noch andere Dinge zu verändern

    Danke für die schnelle Umsetzung. :thumbup: Hab gerade ein wenig Stress bei der Arbeit. Jahresendgeschäft und Konjunturaufschwung lassen das Arbeitsvolumen extrem ansteigen. ;( Möchte die Sache unter realen Bedingungen testen, sprich eingebaut in die Wand so das Lichtschranken und LEDs real arbeiten. Dann sehe ich ob es noch was zu optimieren gibt. Möchte ja nicht wegen jeder Kleinigkeit Dich nerven. Ich denke es wird Wochenende bis ich wieder daran arbeiten kann. Hoffe das ist OK. :)

  • Passt dir zB die Fade-Zeit soweit? Finde die immer noch relativ langsam...


    Habe gestern unter realen Bedingungen getestet. Sieht super toll aus. Aber wie Du schon erkannt hast ist die Laufzeit zu langsam. Hab mal 15 Durchläufe gemacht und mit der Stoppuhr erfasst. Es kam ein Mittelwert von etwas 7 Sekunden bei 13 Stufen heraus. Hier sollten wir nachbessern. Die momentane Laufzeit ist ca. 10 Sekunden bei 13 Stufen(Kanälen).




    Was noch auffällt:


    Lichtschranke oben (an IN2) aktiviert. LED-Band baut auf. OK


    Lichtschranke unten wir durchquert. LED-Band baut wieder ab. OK


    Jetzt startet aber nachdem abbauen des Lichtbands wieder das Lichtband von oben nach unten ohne das die Lichtschranke oben ativiert wird.


    Wenn ich die Lichtschranken abklemme und löse von Hand an IN 1 oder IN 2 aus ist alles normal. Habe dann eine LED an den Ausgang der Lichtschranke gehängt um zu sehen ob da etwas flattert oder ob mehrere Impulse herauskommen. Ist aber OK. Wäre auch unlogisch, den der Effekt passiert nur einmal und dann ist alles wieder im Normalzustand. Hast Du hierfür eine Erklärung? :?:

  • Vertausche zum Testen mal bitte die beiden Eingänge, so kann man schauen ob es irgendwo am Code oder an der Elektronik liegt

    Habe ich heute gemacht. Nun läuft natürlich das LED-Band seitenverkehrt zur auslösenden Lichtschranke. Der Fehler bleibt wenn ich die obere Lichtschranke zurest auslöse (ist jetzt an IN1). Somit liegt es nahe das die Lichtschranke oben das Problem ist. Sie liegt am weitesten von der Steuerelektronik weg. Deine Lösung mit dem Pullup-Widerstand würde ich gerne ausprobieren. Wo muß ich den einlöten?

  • Hast du einen Schaltplan zu der Lichtschranke? Ein Bekannter von mir vermutet, dass diese eigentlich "open collector" ist und nur einen Pullup auf +12V hat. Damit könnte man die Zenerdiode und den Widerstand an den Eingängen am AVR entsorgen, wenn man den Pullup auf der Lichtschranke entfernt... das aber nur mal nebenbei.


    Der Interrupt könnte auch durch HF-Störungen auf der längeren Zuleitung ausgelöst werden, mach mal einen 10nF Kerko an die beiden Leitungen die von der Lichtschranke (also die beiden die Drähte die du auf die Platine steckst) kommen bzw. falls du den nicht da hast zum Testen auch mal einen 100nF. Mal schauen ob das schon was bringt.

  • Nur mal so als Verdacht, Du schreibst ja von Interrupts...


    das hatten wir ja schon mal, das Thema mit dem Interrupts "merken" - wenn's da nun Überschwinger/Prellen gibt, dann löst praktisch der Interrupt noch mal aus, weil er ja "vorgemerkt" wird...


    Man könnte das also so machen, dass man für ne kurze Zeit nach dem Auslösen einer Lichtschranke die Interrupts sperrt - und dann vor dem wieder freigeben die entsprechenden Flags löschen...


    Dann würde das für ne kurze Zeit - wenn die Animation gerade gestartet wurde - auf gar nix reagieren, also auch nicht auf Störsignale, oder wenn die Lichtschranke (warum auch immer) zweimal kurz hintereinander ausgelöst wird


    ist aber nur so ne Idee, ich finde gerade Deinen Quellcode nicht zum nachsehen, wie das überhaupt genau gemacht ist..


    ansonsten evtl. wirklich noch nen Tiefpass an den Eingang (und ideal dann noch Schmitt-Trigger dahinter), das ist ja egal, wenn das Signal leicht verzögert wird...

    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!

  • Prellen ist in dem Fall eigentlich egal, weil die ISR setzt nur ein Flag welches in der Mainloop ausgewertet und während des Fadens ignoriert und am Ende gelöscht wird. Deswegen muss der Fehler ausgelöst werden, nachdem die LEDs wieder aus sind, weil der Interrupt zwar das Flag setzt, dieses Flag aber nichts triggern kann, solange nicht das FadeOff beendet ist.


    Siehe http://paste.debian.net/101719/
    - Zeile 51 (ignorieren solange nicht alles aus ist)
    - Zeile 59, 69 (löschen des Flags nach dem FadeOn)
    - Zeile 85, 85 (löschen des Flags wenn der selbe Int der das FadeOn getriggert hat nochmal gesetzt ist)
    - Zeile 91, 100 (löschen des Flags nach dem FadeOff)


    Das hatte ich allerdings nicht explizit gegen Prellen so gemacht, sondern für den nicht gerade unwahrscheinlichen Fall, dass mehrere Personen hintereinander die Lichtschranke durchqueren :)