Forum: Mikrocontroller und Digitale Elektronik Entprellung + weiterer Timer funktiert nicht


von Tom (Gast)


Lesenswert?

Hi Leute,

hab da mal ne Frage. Und zwar habe ich mir den Entpreller von P. 
Dannegger genommen und wollte damit nun nen Menü für ne LED Steuerung 
erstellen. Meine LEDs werden mittels PWM angesteuert und laufen auch 
perfekt (ohne den Entprellcode).

Mein Problem ist, dass ich wenn ich die beiden Codes verschmelzen lasse 
überhaupt keine Funktion dem ganzen entlocken kann.

Lediglich die PWM funktioniert wenn auch eeeewig langsam. SOll heissen; 
man kann zugucken wenn die Lampen je nach RGB Wert an oder aus gehen...

In der Simulation habe ich das hochzählen des Timers mit dem Entpreller 
nicht verstanden. Es wirkt irgendwie zufällig (?)

Was mir aufstösst ist, dass die Interrupts immer deaktiviert und wieder 
aktiviert werden. Das kann doch nicht gut sein?!

Wenns was hilft würd ich sonst noch den Code nachliefern. Da der Code 
aber recht lang ist und ich nicht weiß wie man den anhängt laß ich das 
erstmal lieber.

Es geht mir also erstmal Prinzipiell um die Probleme der 
Entprellungsmethode in Verbindung mit anderen Timern.

Danke und lg

Tom

von Karl H. (kbuchegg)


Lesenswert?

Tom schrieb:

> Mein Problem ist, dass ich wenn ich die beiden Codes verschmelzen lasse
> überhaupt keine Funktion dem ganzen entlocken kann.

Dann hast du beim Zusammenführen irgendeinen Fehler gemacht.

> Lediglich die PWM funktioniert wenn auch eeeewig langsam. SOll heissen;
> man kann zugucken wenn die Lampen je nach RGB Wert an oder aus gehen...

Die Entrprellroutine wird in eine Timer-ISR eingefügt, die man so 
einstellt dass sie ca. alle 10ms aufgerufen wird. Die exakte Zeitdauer 
zwischen 2 Aufrufen ist ziemlich unkritisch aber auf jeden Fall so lang, 
dass sie weniger als 5% an Rechenzeit verbraucht. Ohne jetzt 
nachgerechnet zu haben: wahrscheinlich sind wir sogar unter 1%

> Was mir aufstösst ist, dass die Interrupts immer deaktiviert und wieder
> aktiviert werden. Das kann doch nicht gut sein?!

Die Operationen an sich, zwischen cli und sei, sind sehr kurz und 
verzögern die reguläre Programmausführung kaum. Wenns doch zu lang ist, 
reicht es auch in der Hauptschleife nur bei jedem 10-ten oder 20-ten 
Durchlauf abzufragen ob eine Taste gedrückt wurde.

> Wenns was hilft würd ich sonst noch den Code nachliefern. Da der Code
> aber recht lang ist und ich nicht weiß wie man den anhängt laß ich das
> erstmal lieber.

Was bitte ist an einer Tastenabfrage und einer 3-fach PWM lang?

> Es geht mir also erstmal Prinzipiell um die Probleme der
> Entprellungsmethode in Verbindung mit anderen Timern.

Ist kein allzugroßes Problem.
Man nimmt den Timer, der am langsamsten ISR-Aufrufe generiert. Wenn die 
ISR irgendwo in einem Zeitraum von 5ms bis 20ms kommen, dann passt das 
schon für die Tastenentprellung.

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.