Hallo zum Problem: Mit dem ATtiny 24 wird ein Motor über einen Treiber und Mosfet angesteuert. An dem Motor hängt ein Untersetzungsgetriebe und am letzten Zahnrad wird eine Umdrehung mittels eines Tasters erkannt und der Motor gestoppt. Nun habe ich das Problem, dass der sehr kleine Taster auch gerne mal seinen Geist aufgibt und nicht mehr schaltet. Daher war mein Gedanke, dass ich den 16Bit Timer so einstelle, mit CTC und einem Prescaler von 64 laufen lasse (~4s) und eingeschaltetem Interrupt einstelle. Dann beim Einschalten des Motors den Timer starte, und entweder der Taster stoppt den Motor oder im Notfall der Timer löst einen Interrupt aus und stoppt den Motor wenig später. Nun weiß ich nicht wie ich den Timer nach auslösen des Tasters oder dem eigenen Interrupt stoppe, auf null setzte und dann beim erneuten starten des Motors den zurückgesetzten Timer wieder starte? Im Interupt den Motor dann ausschalten ist kein Problem. Schon mal vielen Dank für Eure Hilfe! MfG Koloblix
Koloblix schrieb: > eine Umdrehung mittels eines Tasters erkannt und der Motor > gestoppt. Mit deinem Konzept musst du im worst case damit rechnen, dass der Motor noch mindestens EINE Umdrehung macht, bevor dein Sicherheitskonzept greift.
Die 1-3 Umdrehung die der Motor noch macht sind irrelevant, die machen kaum einen unterschied, wichtig ist dass der Motor egal wie stehen bleibt wenn der Taster versagt.
Koloblix schrieb: > Nun weiß ich nicht wie ich den Timer nach auslösen des Tasters oder dem > eigenen Interrupt stoppe Wenn Du das Register für den Prescaler gefunden hast, dann weißt Du doch wie man den Timer auf Prescaler 0 setzt. Koloblix schrieb: > auf null setzte Der Timer ist wie eine Variable schreib und lesbar:
1 | TCNT1 = 0; |
Peter
aha, ok danke fürs Augen öffnen. Werds gleich mal fertig programmieren.
Hab da noch eine Frage: Als Timer Modus muss ich ja dann einen CTC Modus benutzen. Nun gibt es Laut Datenblatt 2 dieser Modi. Der eine vergleicht den Timerwert mit dem Wert im ICR1 Register und der andere mit dem OCR1A. Wo ist denn da der Unterschied? Das ganze soll ja nur nach einer bestimmten Zeit einen Interrupt auslösen, und keine Auswirkung auf irgendeinen Pin haben MfG Kolo
Koloblix schrieb: > Als Timer Modus muss ich ja dann einen CTC Modus benutzen. Nun gibt es > Laut Datenblatt 2 dieser Modi. Der eine vergleicht den Timerwert mit dem > Wert im ICR1 Register und der andere mit dem OCR1A. > Wo ist denn da der Unterschied? Das der eine MOdus das ICR1 Register als TOP Wert benutzt und daher ICR1 nicht zur Verfügung steht um mit dem Timer die Aufgaben zu erledigen, die man eben mit ICR1 so macht (Input Capture) Und das der andere Modus das OCR1A Register als TOP Wert benutzt und daher OCR1A nicht zur Verfügung steht, um mit dem Timer die Aufgaben zu erledigen, die man eben mit OCR1A so macht (zb PWM auf dem A Kanal vom Timer) > Das ganze soll ja nur nach einer > bestimmten Zeit einen Interrupt auslösen, und keine Auswirkung auf > irgendeinen Pin haben Auf deutsch: es ist völlig Wurscht welchen du nimmst.
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.