Vielen Dank für die schnelle Antwort. So was ähnliches hatte ich ja befürchtet. Bei den zwei Registern kann man ja auch eigentlich nicht viel falsch machen...
@Markus: wie kommst du auf 72kHz? Der Mega rennt mit 18,432Mhz und der PWM soll mit 1,125kHz laufen.
Also tiefer ins Detail: Am PortD wo die OC2A&B Pin's sitzen habe ich noch den INT0 beschaltet. Der zündet den INT0_vect:
Code:
ISR( INT0_vect ) // Int2 liest DynamoImpulse ein
{
if (ImpulsCheck == 0) // kein DynamoImpuls vorweg
{
TCCR1B |= (1<<CS12) | (1<<CS10); // Prescaler für Timer1 auf 1024 setzen,
// dadurch 'füllt' sich TCNT1 mit 18kHz bei 18,432Mhz Fcpu
ImpulsCheck=1;
}
else // DynamoImpuls vorher kam, also Timer auswerten für Frequenzmessung
{
Timer1Register = TCNT1; // Übergabe des Timer1 Registers an globale Var zur Verrechnung in main
TCNT1=1; // Register Nullen um Messung neu zu beginnen
}
Impulse++; // Impulse um eins erhöhen um DynamoImpulse zu zählen, daraus Strecke
}
Hier wird aber meiner Meinung nach nichts am PortD geändert was die beiden OC2A&B "verwirren" könnte.
An die Variable ImpulsCheck ist eine (andere) LED gekoppelt, die bei ImpulsCheck=1 an ist, sonst eben aus. Eine einfache visuelle Kontrolle für mich:
Code:
if (ImpulsCheck == 1)
{
PORTD= (1<<PD3);
}
else
{
PORTD &= ~(1<<PD3);
}
So das war's was ich an PortD veranstalte. Vllt ist hier ja was bei, was den Timer nicht starten lässt. Ich komme dem Problem einfach nicht auf die Schliche ![Sad](https://www.roboternetz.de/phpBB2/images/smiles/icon_sad.gif)
Vielen Dank für Eure Hilfe
MfG
Eddy
Lesezeichen