Hallo, ich bin dabei einen Controller für mein LED Treppen- und Flurlicht zu programmieren. Leider sind meine C-Kenntnisse verbesserungswürdig. Der Controller überwacht drei Tasten (Treppe oben und unten und Taster im Flur) und soll entsprechend die LED's schalten. Der Flur hat nur eine LED, somit eine PWM. Das Treppenhaus hat 3 LEDS (unten, Mitte, oben). Wird nun die untere Taste gedrückt, sollen die LEDs von unten nach oben angehen (kurze Pause dazwischen). Wird die obere Taste gedrückt, soll die Reihenfolge umgekehrt sein. Die LEDs gehen nach eine einstellbaren Zeit (Variable dim) von alleine aus. Aber nicht schlagartig, sondern per PWM Dimmung. Zusätzlich soll eine Daueerlichtschaltung realisiert werden, bei der die LEDs nicht automatisch ausgehen (Bzw. in dem Fall nach 18 Stunden), wenn die Taste länger gedrückt wird. Das Projekt hatte ich vor ein paar Jahren mal ohne PWM realisiert und einige Funktionen wurden übernommen. Das alte Projekt ist auch gerade bei mir im Einsatz, hat aber keine PWM Dimmung. Prinzipiell funktioniert es auch, leider nur prinzipiell :-) Automatische abschalten inklusive dimmen und Dauerlicht gehen. Die Taster sind über Widerstände auf VCC gezogen und werden beim drücken auf GND gezogen. Am besten funktioniert die Flurschaltung. Jeder Tastendruck wird erkannt. Leider schaltet der Controller manchmal auch die Treppen-LEDS ("Taste unten") mit ein. Warum auch immer :-( Die "Taste unten (PIND4) funktioniert auch, nur die "Taste oben" (PIND2) wird selten erkannt. Das liegt m.M.n. aber nicht an der HW, sondern daran, welchen Zustand der Controller gerade hat. Bsp: PIND2 wird (mehrfach) gedrückt, nichts passiert PIND4 wird gedrückt, LEDS an PIND2 wird gedrückt, LEDS aus usw... Ich habe schon viel rumprobiert (sieht man im Code) aber es hat nichts geholfen. Was ich auch nicht verstehe, warum ich die Tasten per Widerstand auf high ziehen muss. Ich habe die internen Pull-ups aktiviert. Messe ich mit dem Oszi an dem PIN, liegen ca. 1 V an. Sobald der uC eingeschaltet wird verhält er sich, als ob die Tasten gedrückt wären. Mit externen Pull-ups geht es. Hat Jemand eine Idee woran das liegen könnte? Danke im Vorraus. Christian
NACHTRAG: Ich glaube ich habe den Fehler gefunden. :-)))) Der Widerstand für die nicht funktionierende Taste war 1MOhm. Nach Austausch zu 30k funktionieren alle Taster bestens und schalten nur das jeweilige Licht an. Trotzdem bleibt mir schleierhaft, warum ich die externen Widerstände brauche. Falls jemand noch Verbesserungsvorschläge hat, immer her damit. Für eine Sache weiß ich noch keine Lösung: Wenn die Treppen-LEDS nacheinander angehen kann ich in der Zeit nicht schalten, da eine delay Funktion aufgerufen wird und der uC somit auf nichts reagiert. Wie kann man das am besten umgehen? Gruß Christian
Hallo, wie hast du die Tasten an den AVR angeschlossen? 5V neben den 230V leitungen und durchs ganze Haus? Dann könnte es sein, dass du dir Störungen auf der Leitung einfängst
Christian E. schrieb: > Wenn die Treppen-LEDS > nacheinander angehen kann ich in der Zeit nicht schalten, da eine delay > Funktion aufgerufen wird und der uC somit auf nichts reagiert. Wie kann > man das am besten umgehen? Die ganzen delays sind der falsche Weg. Du brauchst ein neues Konzept.
@lukas: Die Probleme traten beim Testaufbau auf, das alte Projekt läuft im Haus. Neben dem Sicherungskasten ist das große 24V Netzteil von dort geht ein 3x1,5mm² Kabel zum ersten Schalter und von dort weiter mit einem 5x1,5mm² zum Controller Das zieht sich dann durch die Treppenhäuser (Jedes hat einen Controller) bis ins DG. Die Leitungen sind von den 230V Leitungen getrennt verlegt, außer das erste Stück nach dem Netzteil. Dort geht das Kabel im Leerrohr neben vielen anderen 230V Leitungen in die Kellerdecke und zum Schalter. @Samuel: Ich weiß, es ist ein schlechter Weg, mir ist aber kein anderer eingefallen. Hast du eine Idee? Gruß Christian
Versuche nacheinander alle deine Delays zu ersetzen. Suche dir zuerst eine Tastenentprellung aus dem Internet, die ohne Delays auskommt. Für das Blinken der Leds brauchst du eine Variable, die ein Timer alle 500ms verändert. Im Hauptprogramm musst du die Leds speichern, die gerade blinken und sie "nach der Variable" blinken lassen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.