public static void HardwarePwmAndISR() { const int isrPin = 4; const int pwmPin = 18; Console.Write("Setup "); WiringPiWrapperDirect.WiringPiSetupGpio(); WiringPiWrapperDirect.pinMode(isrPin, PinType.INPUT); WiringPiWrapperDirect.pullUpDnControl(isrPin, PullUpType.PUD_DOWN); //WirinPiWrapper.wiringPiISR (isrPin, EdgeType.INT_EDGE_RISING, IsrCounter); WiringPiWrapperDirect.pwmSetMode(PwmType.PWM_MODE_MS); WiringPiWrapperDirect.pinMode(pwmPin, PinType.PWM_OUTPUT); Console.WriteLine("completed."); int loopCount = 1000; int clock = 2; //Teile den max Prozessortakt in Count Teile uint range = 2; //Mach jedes dieser Teile durch 2 Teilbar WiringPiWrapperDirect.pwmSetClock(clock); WiringPiWrapperDirect.pwmSetRange(range); DateTime start = DateTime.Now; m_isrCounter = 0; WiringPiWrapperDirect.pwmWrite(pwmPin, 1); //Schreibe 1 von 2 Teilen Plus, dann 1/2 0 while (m_isrCounter < loopCount) { ; } DateTime end = DateTime.Now; float frequenzKhz = (float)(loopCount / (new TimeSpan(end.Ticks - start.Ticks).TotalMilliseconds)); Console.WriteLine(string.Format("Clock: {0}, Range: {1} Frequenz in KHz: {2}", clock, range, frequenzKhz)); Console.WriteLine(string.Format("Resultierende PWI Grundfrequez: {0} KHz", clock * frequenzKhz)); //Hier ist ein Oszi nötig: schreibe ich falsch oder Messe ich falsch? //Angeblich ist die interne Clock 19.2MHz //Ich komme bei einer Teilung von 64 auf 4,5KHz --> interne Clock 64 * 4,5 = 288KHz? //Bei kleinerer Teilung bleibt er stehen (32), danach (ab 16) freeze, der nur mit kaltem reboot zu beenden ist. //Vermute, da läuft am ISR ein Stack voll? //Stimmt wohl: Ohne ISR schreibt er auch mit clock 2 range 2 data 1: Das sollten dann 10MHZ sein: Oszi?? //Fazit ISR ist eine feine Sache aber nicht für Hochfrequenz, 3-4 KHz hält das aus, dahinter dann wohl nur primitive Methoden //ledoder volle Threadpools etc //Console.WriteLine ("completed."); }