Hallo,
ich versuche gerade einen Schrittmotoransteuerung mit Interrupts zu
realisieren. Soweit klappt das alles auch ganz gut – eine Pin wird auf
GND oder 5V gezogen um die Richtung zu steuern, der andere Pin wird in
einer Frequenz (Geschwindigkeit) getoggled.
1 | void timer1_init()
|
2 | {
|
3 | // set up timer with prescaler = 64 and CTC mode
|
4 | TCCR1B |= (1 << WGM12)|(0 << CS12)|(1 << CS11)|(1 << CS10);
|
5 |
|
6 | // set up timer OC1A pin in toggle mode
|
7 | TCCR1A |= (1 << COM1A0);
|
8 |
|
9 | // initialize counter
|
10 | TCNT1 = 0;
|
11 |
|
12 | // initialize compare value
|
13 | OCR1A = 1022; //slow
|
14 | }
|
Jetzt möchte ich aber "Schritte zählen", um einigermassen bestimmen zu
können, wo der Motor gerade ist… in meinem alten, linearen Programm zur
Steuerung habe ich einfach eine Variable "steps" bei jeder HIGH-LOW
phase des Step-Pins mitzählen lassen – je nach Richtung +1 oder -1.
Das ganze würde ich gerne auch in einer ISR() Routine machen. Ich
schaffe es aber nicht eine einzurichten… Welchen Vektor brauche ich?
Welche Bits muss ich bei der _init() setzen, damit ein Interrupt
ausgelöst wird (parallel zum Schalten des Pins)
Hoffe ihr könnt mir helfen!
Danke