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:
Hier wird aber meiner Meinung nach nichts am PortD geändert was die beiden OC2A&B "verwirren" könnte.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 }
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:
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 SchlicheCode:if (ImpulsCheck == 1) { PORTD= (1<<PD3); } else { PORTD &= ~(1<<PD3); }![]()
Vielen Dank für Eure Hilfe
MfG
Eddy







Zitieren

Lesezeichen