Hallo,

@mic:
Kleiner Hinweis dazu:
Seit Version 1.3 der RP6Lib vom 25.9 gibt es auch die 16Bit Variable "timer" die alle 100µs hochgezählt wird. Sowohl für die RP6BaseLib als auch die RP6ControlLib.

Damit könnte man es so schreiben:
// Hier wird der E_INT1 Pin an PORTA als Eingang verwendet...
while (!(PINA & E_INT1)); // Warten auf aufsteigende Flanke
timer=0;
while (PINA & E_INT1); // Warten auf absteigende Flanke
return (timer); // Fertig, Rückgabewert in 0.1ms
Auf delay_timer sollte man eigentlich gar keinen Zugriff haben (der Compiler sollte meckern ) - hast Du an den Headern was verändert?


Den Bootloader interessiert zum Starten des Programms übrigens nur SDA.

ACHTUNG: Auf jeden Fall zur Sicherheit 1K Widerstände in Serie dazwischen schalten wenn man SDA oder SCL als Sensoreingänge verwenden möchte! Der Bootloader generiert beim Starten nämlich einen General Call auf dem I2C Bus, schaltet SDA und SCL also als Ausgänge und ganz kurz nach GND!

--> Für E_INT1 und die beiden freien ADC Anschlüsse braucht man natürlich keinen Widerstand.
An den freien I/Os vom RP6-M32 Modul sowieso nicht wenn man die Portrichtung auf Eingang schaltet.


--------------------------------------------------------------------

@blenderkid:
Für das RP6-M32 Erweiterungsmodul funktioniert es prinzipiell natürlich ganz ähnlich. Hier hast Du auch jede Menge freie I/O Pins.

Um nochmal auf die Ausgangsfrage einzugehen:
Gibt es eine bessere Methode die Frequenz des PWM zu ermitteln?
Ja - man misst statt der Anzahl der Pulse einfach die Dauer eines einzelnen Pulses! Wie in dem Programmbeispiel von mic.

MfG,
SlyD