Forum: Mikrocontroller und Digitale Elektronik ATtiny24: Timer als sicherheitsoption


von Koloblix (Gast)


Lesenswert?

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

von kunz (Gast)


Lesenswert?

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.

von Koloblix (Gast)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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

von Koloblix (Gast)


Lesenswert?

aha, ok danke fürs Augen öffnen.
Werds gleich mal fertig programmieren.

von Koloblix (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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