Ich möchte wie Eingangs erwähnt ein PWM Signal ausgeben, das allerdings flexibel sein soll. Sprich ich möchte während der Laufzeit des Controllers die PWM Frequenz zwischen 100-100kHz einstellen können. Um die Funktion der Folgeelektronik bei den Frequenzen testen zu können.
(Wer etwas aufpasst stellt schnell fest, dass mit Hardware PWM aufgrund 16Mhz /1/512 Zählschritte nur 31,25 kHz möglich sind, und dann dumme Zwischenschritte durch Prescaler)
Die Möglichkeit die Zwischenschritte manuell einstellen zu können würde ja schon zur gewünschten Funktion führen, und auch wie beim C-Control Frequenzen bis zu einigen MHz ermöglichen.
Das ganze soll zu Testzwecken verwendet werden um die Folgeelektronik auf Funktion zu prüfen. Die Frequenz gibt somit die Arbeitsfrequenz vor, die getestet werden soll.
[Alles nur zur Fehlersuche im Schadensfall, nicht zum Betrieb, weitere Sicherheitsmaßnahmen gibt es natürlich auch!]
Auf der anderen Seite soll das von externer Stelle erzeugte PWM Signal überwacht werden können, um zu sehen ob dieses richtig ausgegeben wird. Diese Funktion bietet Bascom ja sogar über das Interrupt Catch Register (Pin ICP1)!
Code:
Config Timer1 = Counter , Edge = Falling , Capture Edge = Rising , Noise Cancel = 1 , Prescale = 8
Config Portd.6 = Input
W = Capture1
Alles nur zur Fehlersuche bei Ausfall der Folgeelektronik.
Weiterhin hätte der Controller während Ausgabe, ODER des Einlesens des PWM Signals nichts besonderes mehr zu tun, außer Tastatur Überwachung zum Beenden der Funktion (Esc Taste), und eventuell auch eine kurze Displayausgabe währenddessen oder danach, Rechenleistung wäre aber frei.
Handling per Timerinterrupt habe ich versucht, kamen aber Falsche Frequenzen bei raus, und variieren wie gesagt extrem je nach Ausführung im Interrupt, wobei zB Toggle oder einfaches if/Else 63kHz schaffen, differenziertes if-Else (1 Takt High, 2 Takte low) die Frequenz in unter 1kHz einbrechen lassen.
Also wenn du ein passendes Muster für einen solchen Interrupt hättest würde ich es gerne sehen, verwenden, anpassen.
Mein Testbeispiel ist ja in der Bas-Datei (Erster Eintrag) Da sind die Möglichkeiten drin.
Vielleicht sieht dort ja auch jemand einen Fehler und dann geht es ja richtig?!
Möglich wäre zur Not auch die Alternative es mit einem externen Baustein zu regeln, also zB über I2C Frequenz und Pulsweite vorgeben, und der erzeugt das PWM Signal, und optimaler Weise könnte er auch PWM Signale einlesen, also Frequenz und Pulsweite.
Natürlich ist dies nicht die schönste Lösung, da der Controller das ja auch machen könnte aber wenn gar nix mehr geht......
PS:Und man braucht nicht mehrere Routinen für unterschiedliche Frequenzen, sondern kann für den Timer den Prescaler und Timervorgabe während der Laufzeit ändern, ebenso den Parameter für die Pulsweite (entspricht der Leistung). Kann man alles während der Laufzeit über Parameter ändern und funktioniert auch.
Lesezeichen