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?
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"
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.