Forum: Mikrocontroller und Digitale Elektronik Avr- Brauche Hilfe bei PWM Controller


von Christian E. (ultraschall81)


Angehängte Dateien:

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

von Christian E. (ultraschall81)


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

von Lukas B. (lukas-1992) Benutzerseite


Lesenswert?

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

von Sam .. (sam1994)


Lesenswert?

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.

von Christian E. (ultraschall81)


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

von Sam .. (sam1994)


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.

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
Noch kein Account? Hier anmelden.