Der Timer ISR wird alle 1ms aufgerufen und führt die entsprechende
inline Methode auf.
Das funktioniert auch, aber aus irgendeinem Grund wird die Variable
tcADCPower nicht hochgezählt und dementsprechend wird
nie wahr.
In der Klasse RobotMotor wird die Variable erstellt und im Konstruktor
auf 0 gesetzt.
Die ISR ruft dann folgende private inline Methode auf:
1 | void RobotMotor::isrTimer0COMPA()
|
2 | {
|
3 | PORTD ^= (1<<PORTD3);
|
4 | PORTD |= (1 << PORTD2);
|
5 | tcADCPower++;
|
6 |
|
7 | if (tcADCPower >= 10)
|
8 | {
|
9 | PORTD &= ~(1<<PORTD2);
|
10 | tcADCPower = 0;
|
11 | }
|
12 | }
|
PORTD3 wird alle 1ms getoggelt, PORTD2 bleibt aber immer gesetzt, sollte
aber nach 10 Durchgängen immer wieder für 1ms gelöscht werden.
Ich weiß, der Code macht nicht viel Sinn, aber in der if sollte dann
alle 10ms etwas "sinnvolles" ausgeführt werden.
Ich kontrolliere das mit dem Oszi, habe auch schon die Pins vertauscht
usw. und komme in das if nicht hinein!
An der ISR kann es nicht direkt liegen, da ja PORTD3 brav getoggelt wird
und wenn ich PORTD2 toggle wird das auch in der gewünschten Frequenz
gemacht.
Wo kann hier das Problem liegen?
(Atmel Studio 6.2; Atmega328)