Forum: Mikrocontroller und Digitale Elektronik timer zeit per taster ändern


von M. S. (sadmarvin)


Lesenswert?

Ich habe mir mit einem tiny2313 einen kleinen LED Cube (3x3x3) gebaut.
Bis jetzt benutze ich einen 8bit Timer für das Multiplexen der 3 Ebenen 
und einen 16Bit Timer für das durchschlaten der einzelnen 
komplett-Bilder.

Im Timer für die Bilder habe ich noch ein Register als Zähler, das mit 
einem anderen Register, das einen bestimmten Wert enthält, 
verglichenwird. Es wird nur auf das nächste Bild geschaltet wenn der 
Zähler mit dem vergleichswert übereinstimmt und der Zähler wird dann 
wieder auf null gesetzt. Andernfalls wird nur der Zähler um 1 erhöht.
So kann ich also über das register mit dem vergleichswert, die 
geschwindigkeit mit der der Würfel die einzelnen Bilder durchschaltet 
beeinflussen.

Jetzt hätte ich es gerne so, dass ich die Geschwindigkeit ändern kann 
ohne das Programm zu ändern und neu in den tiny zu schreiben.

Ich dachte jetzt entweder an eine astabile Kippstufe mit einem NE555 
(mit Poti) dessen Ausgang ich an INT0 oder INT1 anschließe.

oder zwei Taster, einer erhöht das register mit dem vergleichswert, der 
andere veringert es.

Am besten wäre noch ein umschalter zwischen beiden Varianten. Ob das 
sinnvoll ist, ist erstmal egal. Mir gehts mehr ums prinzip wie man sowas 
macht und den Lerneffekt.

Der Umschalter müsste dann ja entweder den 16Bit Timer oder den externen 
Interrupt aktivieren, odeR?

Ist das so machbar?
Wie müsste man dann die Taster im Programm abfragen?
Im moment besteht das Programm nur aus den ganzen Initalisierungen und 
den beiden timer Interrupt Handler Teilen.

Würde es bei dem Umschalter dann reichen den entsprechenden PIN 
abzufragen und dann entsprechend das TIMSK Register zu ändern?

EDIT:
so einen umschalter könnte man doch auch auf einen Interrupt pin legen 
und im Interrupt Handler dann das TIMSK Register mit einem geigneten 
Bitmuster XOR nehmen, oder?

von Karl H. (kbuchegg)


Lesenswert?

Tasten einen Intrrupt auslösen zu lassen, macht man nur dann, wenn der 
µC im Tiefschalf liegt und aufgeweckt werden muss.

Ansonsten ist Polling (also regeklmässiges Nachsehen des Input-Ports) 
mehr als ausreichend. Wenn der AVR zb in einer Timer-ISR alle 10ms einen 
Blick auf den Input Port wirft, dann reicht das vollkommen aus. Kein 
Mensch kann eine Taster schneller drücken bzw. drücken-loslassen.

Das viel größere Problem (und auch der Grund, warum ein Interrupt bei 
Tastenbetätigung keine gute Idee ist) ist, das Tasten prellen.

Eine gute, bewährte Tastenauswertung findet sich hier
Entprellung
im Abschnitt "Komfortroutinen für C"

von M. S. (sadmarvin)


Lesenswert?

Ok, über das Entprellen hatte ich schon etwas gelesen. Schien mir aber 
doch erstmal recht kompliziert. Ich kann zwar C Programmieren, aber da 
ich ganz neu bei der Mikrocontroller Programmierung bin wollte ich 
erstmal Assembler lernen. ;)

Aber sonst wäre das so ok?

- TIMER0 für Multiplexen der Ebenen
- TIMER1 für umschalten der Bilder
- astabile Kippstufe an INT0
- 3 Taster an normale PINS, entprellen und in einem dritten Timer 
abfragen
- wenn Taster für umschalten zwischen kippstufe und Timer für 
Geschwindigkeit des Bildumschaltens gedrückt wird -> TIMSK entsprechend 
ändern (zwischen INT0 und TIMER1 wechseln)

EDIT:
ich habe gerade gesehen, dass der tiny2313 ja nur 2 Timer hat, könnte 
man dann das Tasten Polling mit in die TIMER-ISR für das Multiplexen der 
Ebenen packen?

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.