Moin allerseits, ich muss an einen Portpin vom ADuC814(8052core) eine Frequenz wie folgt ausgeben: 1. Frequenzbereich von 1200Hz bis 1600Hz, variabel über Software. 2. Die Lowphase muss immer konstant ca.350µsec sein. 3. Die Frequenz wird folglich nur über die Highphase gesteuert, und zwar im Bereich von 475µsec(für 1200Hz) bis300µsec(für ca.1600Hz). 4. Es muss Timerinterrupt gesteuert sein, damit das Hauptprogramm wenig gestört wird. Nun hab ich keinen Plan wie ich die Timer konfiguieren soll. Kann mir jemand einen Tipp zum prinzipiellen Vorgehen geben? Vielen Dank! Gruß Norbert
Hallo Norbert, du kannst wie folgt vorgehen: - Richte einen Timer ein, mit einem Zeitwert, der ein gemeinsames Vielfaches mit deinen Referenzwerten hat, z.B. 5us oder 25us (nicht zu klein, da sonst zu hohe Prozessorbelastung). - Dann zählst du je eine Zählvariable für die Low- und die Highphase bei jedem Timerinterrupt hoch und vergleichst, ob dein gewünschter Zeit-Sollwert erreicht ist. - Wenn ja, schaltest du den Port-Pin entsprechend high oder low.
ich würde es soweit möglich, mit der Timer-Hardware machen. Ganz so stecke ich nicht mehr in der 8052-Archtektur drin, aber ungefähr so: Timer 2 Betriebsart reload Beim Timerüberlauf wird automatisch der in RCAP2 stehende Wert als neuer Timeranfangswert benutzt. Die ISR macht nun nichts anderes, als jeweils 2 verschiedene Werte nach RCAP2 zu schreiben. und einen Portpin zu toggeln. PORT_PIN=!PORT_PIN; if (!PORT_PIN) RCAP2=puls_low; //Konstante 350µs else RCAP2=puls_high //Variable für high puls Nun kannst du jederzeit vom Hauptprogramm aus neue Werte nach puls_high schreiben, alles andere läuft automatisch.
Danke für eure Hilfe. Damit kann ich mir was drunter vorstellen. Schönen Gruß Norbert L.
Hallo, bei den LPC900 Controllern kannst du eine genau Frequenz ausgeben indem du den Timer auf Auto Reload stellst und die Option Toggle T0 / bzw. T1 on Timer Overflow einstellst!
Hallo, bei den LPC900 Controllern kannst du eine genau Frequenz ausgeben indem du den Timer auf Auto Reload stellst und die Option Toggle T0 / bzw. T1 on Timer Overflow einstellst! Aber warsch. net mit variabler High/Low Phase oder?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.