Avr- Brauche Hilfe bei PWM Controller

OP #2561906
Lesenswert?

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
Angehängte Dateien:
OP #2561935
Lesenswert?

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
OP #2561979
Lesenswert?

@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
#2562003
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren