Forum: Mikrocontroller und Digitale Elektronik Mit 8052 Frequenz erzeugen


von Norbert L. (Gast)


Lesenswert?

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

von schudi (Gast)


Lesenswert?

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.

von crazy horse (Gast)


Lesenswert?

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.

von Norbert L. (Gast)


Lesenswert?

Danke für eure Hilfe. Damit kann ich mir was drunter vorstellen.

Schönen Gruß   Norbert L.

von Mathias (Gast)


Lesenswert?

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!

von akw (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.